Auf modernen Spielekonsolen und anderen Geräten ohne herkömmliche Tastaturen ist der Versuch, Text einzugeben, ein Albtraum. Es ist ärgerlich, mit ein paar Tasten und einem Joystick auf einer virtuellen Tastatur tippen zu müssen, und ich mache gerne so wenig Bewegungen / Tastendrücke wie möglich.
Die Tastatur, die Sie verwenden, sieht folgendermaßen aus:
+---+---+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+---+---+---+---+---+---+---+---+---+---+
| q | w | e | r | t | y | u | i | o | p |
+---+---+---+---+---+---+---+---+---+---+
| a | s | d | f | g | h | j | k | l | - |
+---+---+---+---+---+---+---+---+---+---+
| z | x | c | v | b | n | m | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
Die folgenden Operationen können verwendet werden:
L
: auf der Tastatur ein Feld nach links bewegen (Zeilenumbruch)R
: auf der Tastatur ein Feld nach rechts bewegen (Zeilenumbruch)U
: ein Feld auf der Tastatur nach oben bewegen (Zeilenumbruch)D
: ein Feld auf der Tastatur nach unten bewegen (Zeilenumbruch)Y
: ein Leerzeichen einfügenB
: Bewegen Sie den Einfügezeiger um eine Stelle nach links (macht nichts, wenn sich der Zeiger am Anfang befindet)F
: Bewegen Sie den Einfügezeiger um eine Stelle nach rechts (macht nichts, wenn sich der Zeiger am Ende befindet)C
: Feststelltaste umschaltenA
: füge das ausgewählte Zeichen an der Position des Einfügezeigers ein
Wenn eine Eingabezeichenfolge nur ASCII-Zeichen enthält, die mit der obigen Tastatur eingegeben werden können, und Befehle (Übereinstimmungen [a-zA-Z0-9 _@.-]*
), geben Sie eine Folge von Befehlen aus, die zur Ausgabezeichenfolge führen. Die Anfangsposition des Cursors befindet sich auf der 1
Taste (oben links), und die Feststelltaste ist anfangs deaktiviert.
Wertung
Für eine bestimmte Zeichenfolge wäre es naiv, für jedes Zeichen in der Zeichenfolge auf dem kürzesten Weg zum Zeichen auf der Tastatur zu navigieren, die Feststelltaste bei Bedarf zu aktivieren und das Zeichen auszuwählen. Solch ein naiver Ansatz würde einen Befehl der Länge erzeugen (length of input string) + (sum of Manhattan distances on keyboard between consecutive non-space characters) + (number of times the string alternates between lowercase and uppercase characters) + (1 if string starts with an uppercase letter else 0)
. Zum Beispiel kann der naive Ansatz für 101
in Folge hätte ALARA
, eine Länge 5 Befehl ein , und Noob 5
würde dazu führen DDDRRRRRCAUURRRCAADDLLLLAYUUUA
, eine Länge von 30 Befehl.
Ihr Beitrag ist jedoch besser als der naive Ansatz. Für jede Eingabezeichenfolge erhält Ihre Übermittlung Punkte, die der Anzahl der Befehle entsprechen, die der naive Ansatz verwendet, abzüglich der Anzahl der Befehle, die Ihre Übermittlung ausgibt. Ihre Gesamtpunktzahl ist die Summe der einzelnen Punkte.
Regeln
- Die Einsendungen werden in einem Cloud9- freien virtuellen Arbeitsbereich ausgeführt. Der Arbeitsbereich verfügt über 512 MB RAM, 2 GB Festplattenspeicher, 8 Intel (R) Xeon (R) -CPUs bei 2,50 GHz (die vollständigen CPU-Informationen finden
cat /proc/cpuinfo
Sie hier ) und 64-Bit-Ubuntu 14.04 Vertrauenswürdig Sie können den Zugriff auf den Testarbeitsbereich anfordern, um Ihre Einreichung auszuführen und zu bewerten, oder ich kann sie für Sie bewerten. - Einsendungen werden einmal pro Testfall ausgeführt. Das Speichern des Status zwischen den Läufen ist verboten. Eingaben dürfen nur in die Quelldatei geschrieben oder von diesen gelesen werden (diese darf zwischen den Durchläufen nicht geändert werden), mit der möglichen Ausnahme, dass bei Bedarf eine Eingabedatei gelesen wird.
- Die Einreichung ist für jeden Testfall auf 1 Minute Laufzeit begrenzt. Einsendungen können mehrere Lösungen ausgeben, aber nur die letzte gültige Lösung innerhalb der zugewiesenen Zeit wird für die Bewertung verwendet. Wenn innerhalb der vorgegebenen Zeit keine gültigen Lösungen ausgegeben werden, wird für diesen Testfall eine Punktzahl von 0 vergeben.
- Bitte geben Sie an, wie Sie Ihre Einsendung aufrufen und welche Tools / Bibliotheken installiert werden müssen, die nicht in einer Ubuntu 14.04-Standardinstallation enthalten sind.
- Gewinner ist die Einsendung mit der höchsten Punktzahl. Bei einem Unentschieden gewinnt der Beitrag mit der besseren algorithmischen Komplexität. Wenn das Unentschieden immer noch nicht gelöst ist, gewinnt der erste Beitrag, der die Punktzahl und die algorithmische Komplexität erreicht.
- Einsendungen können möglicherweise nicht für die Testfälle optimiert werden. Ich behalte mir das Recht vor, die Testfälle zu ändern, wenn ich dies für erforderlich halte.
Testfälle
Format: input string => naive score
(Wenn Sie Fehler in diesen sehen, hinterlassen Sie bitte einen Kommentar mit der Korrektur)
101 => 5
quip => 12
PPCG => 15
Mego => 25
Noob 5 => 26
penguin => 27
867-5309 => 32
2_sPoOkY_4_mE => 60
The Nineteenth Byte => 76
penguins@SouthPole.org => 95
8xM3R__5ltZgrkJ.-W b => 98
correcthorsebatterystaple => 104
verylongRUNSOFCAPSandnocaps => 118
This is an English sentence. => 122
WNtza.akjzSP2GI0V9X .0epmUQ-mo => 131
Programming Puzzles and Code Golf => 140