Ein bestimmtes bekanntes Kabelunternehmen verfügt über eine etwas ungeschickte Funktion zum Suchen nach Programmen, die über die Fernbedienung funktioniert. Es dauert sehr viel Knopfdruck; Als Bewunderer der Bewegungsökonomie dachte ich, ich würde die Hilfe eines Programmierers suchen, um die Anzahl der Fingerbewegungen, die ich machen muss, zu minimieren.
Die Craptastic Search-Funktion bietet ein Layout aus auswählbaren Zellen, 1 Zeile mit 3 Zellen, gefolgt von 6 Zeilen mit 6 Zellen, das folgendermaßen aussieht:
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
Für jeden Buchstaben gibt es Zellen A-Z
, mit spa
denen der Suchzeichenfolge ein Leerzeichen hinzugefügt wird. del
soll verwendet werden, um ein Zeichen zu löschen; und sav
soll zum Speichern der Suchzeichenfolge verwendet werden. Wir werden diese tatsächlichen Funktionen für diese Herausforderung ignorieren. Ansonsten sind die Zellen für unsere Zwecke noch auswählbar.
Wir beginnen mit einer leeren Suchzeichenfolge und der A
ausgewählten Zelle. und wir verwenden die Pfeiltasten nach links, rechts, oben und unten, um die ausgewählte Zelle zu ändern. Wenn die zentrale OK-Taste gedrückt wird, wird das Zeichen in der ausgewählten Zelle zur Suchzeichenfolge hinzugefügt. Der Einfachheit halber werden wir verwenden <
, >
, ^
, v
und _
für links, rechts, oben, unten und OK sind.
Bei den Buchstaben und Zahlen ist die Bedienung der Richtungstasten unkompliziert. Es gibt kein "Wrap-Around"; Wenn sich beispielsweise die aktuelle Zelle befindet G
, <
hat dies keine Auswirkung.
Um die Suchzeichenfolge einzugeben BIG
, könnten wir die Sequenz verwenden
>_>v_<<_
(Die Initiale >
ist erforderlich, um uns von der Standardstartzelle A
in die Zelle zu verschieben. B
) Alternativ könnten wir natürlich stattdessen verwenden >_v>_<<_
; Beachten Sie jedoch, dass es keine kürzere Sequenz als 8 Tasten gibt, die die Aufgabe ausführen können.
Da die oberste Reihe nur drei Zellen hat, ist die Aktion dort etwas anders und kompliziert die Dinge ein wenig:
Befindet sich die ausgewählte Zelle in der obersten Buchstabenzeile A-F
, ^
bewegt der Schlüssel die ausgewählte Zelle direkt darüber. Also A,B
geh zu del
, C,D
geh zu spa
und E,F
geh zu sav
.
Wenn andererseits die ausgewählte Zelle 'del' ist, verschiebt der v
Schlüssel die ausgewählte Zelle in A
und der >
Schlüssel macht die ausgewählte Zelle spa
. In ähnlicher Weise v
verschiebt die Taste die ausgewählte Zelle von spa
nach C
und sav
nach E
.
Dies bedeutet , dass zum Beispiel, wenn Sie sich gerade an dem sind B
Zelle, die Sequenz ^v
zurückkehrt Sie nicht auf die B
Zelle; Stattdessen gelangen Sie in die A
Zelle.
Und beginnend bei der A
Zelle v>>^
bewegt uns die Sequenz zur C
Zelle; während die Sequenz ^>>v
uns in die E
Zelle bewegt .
Die Herausforderung
Bei einer TV - Sendung oder einen Film Titel s
, die ausschließlich aus Zeichen A-Z
, 0-9
und space
Ihr Programm / Funktion sollte eine Ausgabe einen der Sequenzen von Tastenfolgen minimaler Länge geben s
als Suchbegriff aus dem Ausgangszustand in Craptastic Art und Weise.
Ihre Ausgabe sollte eine Zeichenfolge oder eine Liste unterschiedlicher Werte sein, die eine Folge von Auf, Ab, Rechts, Links und OK darstellen. Sie sind also nicht auf den Zeichensatz beschränkt <>^v_
(z. B. udrl*
oder eine Liste mit ganzzahligen Elementen 0,1,2,3,4 wären akzeptable Alternativen, solange Sie Ihr Schema formulieren).
Das ist Code-Golf ; Es gelten die üblichen Lücken-Tabus. Mögen die Chancen für jede Sprache jemals zu Ihren Gunsten sein.
Testfälle
Nachfolgend finden Sie Eingaben und eine akzeptable Beispielantwort (andere unterschiedliche Sequenzen sind ebenfalls korrekt, müssen jedoch höchstens die Länge der bereitgestellten Beispiele haben).
(Ich poste die Tastatur hier erneut, damit man leichter visuell mitspielen kann, wenn man das nicht will ...)
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
BIG >_>v_<<_
THE OFFICE >vvv_^^_>>>^_^<_vvv_>>>^^__<<<v_^_>>_
FARGO ^>>v>_^<<v_^>>v>vv_<<<<<^_>>v_
BUFFY >_>vvv_>>>^^^__^<<vvvvv_
DALLAS >>>_<<<_^>>v>v__^^<<v_vvv_
THX1138 >vvv_^^_>>>>vv_<<v__>>_<v_
ON DEMAND >>vv_<_^^^>_v>_>_<<<<vv_^^_>vv_>>^^_
NEWS RADIO >vv_>>>^^_vvv_<<<<_^^^^>_>vvv>_^^^<<v_>>>_<v_v_
ROOM 909 ^>>v>vv_<<<__<<_^^^>_>vvvvvv>_<<<^_>>>v_
FA
geht nicht geradeaus, sondern rauf und runterdel
undsav
nutzlos hier?del
undsav
haben keine Funktion, wenn 'OK' verwendet wird, wenn sie ausgewählt werden; aber das würde einen Tastendruck verschwenden.Antworten:
JavaScript (ES6), 196 Byte
Das Golfen dieses Codes unter 200 Bytes war im Grunde ein Albtraum (aber es hat Spaß gemacht). Ich freue mich sehr auf eine einfachere und kürzere Implementierung.
Probieren Sie es online aus!
Wie?
Variablen
p ist die aktuelle Position auf der Tastatur gemäß der folgenden Zuordnung und wird auf 6 initialisiert (die Taste "A" ).
P ist die Position des Zielzeichens c
Codierung verschieben
Es gibt 7 mögliche Züge. Wir codieren jede von ihnen als 7-Bit-Ganzzahl. Die 4 niedrigstwertigen Bits halten den Verschiebungswert V + 6 und die 3 höchstwertigen Bits halten das Symbol ID S .
Ausrichtung mit Funktionstasten
Zu Beginn jeder Iteration führen wir den folgenden Code aus, um sicherzustellen, dass p mit der aktuellen Funktionstaste ausgerichtet ist, wenn wir uns in der ersten Zeile befinden:
Logik verschieben
Der Zug wird mit einer (zu) langen Kette ternärer Operatoren ausgewählt, die unten beschrieben wird.
quelle
Python 2 ,
294293289 BytesProbieren Sie es online aus!
quelle
JavaScript, 311 Bytes
Ich bin mir nicht sicher, wie ich das Golf spielen soll ...
f
: Konvertiere 'A-Z0-9' in 1-36, Leerzeichen in "S"g
: Holen Sie sich 4 Geschwister des angegebenen Schlüsselsh
: finde den kürzesten Weg von p nach qF
: die Antwortquelle