Ich bin ein Roboter. Ich habe diese Tastatur wegen ihres einfachen rechteckigen Layouts gekauft:
~` !1 @2 #3 $4 %5 ^6 &7 *8 (9 )0 _- +=
tab Qq Ww Ee Rr Tt Yy Uu Ii Oo Pp {[ }] \|
Aa Ss Dd Ff Gg Hh Jj Kk Ll :; "' [-enter-]
Zz Xx Cc Vv Bb Nn Mm <, >. ?/
[========= space =========]
Um menschlichen Text zu drucken, muss ich ihn in Befehle konvertieren, die meine Manipulatoren interpretieren können. Mein linker Manipulator schwebt über dem ShiftSchlüssel. Mein rechter Manipulator schwebt am Anfang über der ~Taste. Die Befehle, die meine Manipulatoren verstehen, sind:
S : press the shift key
s : release the shift key
L : move the right manipulator left by 1
R : move the right manipulator right by 1
U : move the right manipulator up by 1
D : move the right manipulator down by 1
P : press the key under the right manipulator
p : release the key by the right manipulator
Schreiben Sie Code, um eine ASCII-Nachricht in eine Liste von Befehlen zu konvertieren. Die Eingabe kann eine beliebige Anzahl von 95 druckbaren ASCII-Zeichen enthalten. möglicherweise auch TAB- und Zeilenumbruchzeichen. Die Ausgabe sollte die Liste der Befehle an die Manipulatoren sein.
Um beispielsweise zu tippen Hello World!
, sind die Befehle
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Ich habe die Manipulatoren vor dem Drucken jeder Nachricht auf den Ausgangszustand zurückgesetzt.
Es gibt einige mechanische Gefahren, die durch ordnungsgemäße Programmierung vermieden werden sollten:
- Kein Verschieben (
LRUD
) erlaubt, wenn print (P
) aktiviert ist - Kein Blockieren von Manipulatoren: Wenn ein Manipulator aktiviert ist (
S
oderP
), sollte der nächste Befehl für diesen Manipulator das Deaktivieren (s
oderp
) sein und umgekehrt Keine unnötige Verschiebung: Zwischen jeweils zwei Verschiebungsbefehlen (
s
,S
) sollte einP
Befehl stehenZum Drucken
~~
sind BefehleSPpPp
also gültig, während diesSPpsSPp
nicht der Fall istKein Verschieben außerhalb der Grenzen: Kein Bewegungsbefehl sollte versuchen, den rechten Manipulator um mehr als 13 Felder nach rechts oder 4 um den unteren Rand der Ausgangsposition (oder einen beliebigen Punkt nach oben oder links) zu bewegen.
Zusätzliche Bemerkungen:
- Das Drücken einer deaktivierten Taste (Befehlssequenz ähnlich
DDPp
) führt dazu, dass keine Tasten gedrückt werden und zulässig sind. - Das Drücken von Shift+ Tabhat keine Wirkung, aber Shift+ Spaceund Shift+ Enterhaben den gleichen Effekt wie ohne Shift.
- Das Drücken einer beliebigen Stelle auf der Leertaste und der EnterTaste hat den gleichen Effekt.
- Leerzeichen in der Ausgabe haben keine Bedeutung, können jedoch verwendet werden, um sie auf schöne Weise zu formatieren.
Pp
? Soweit ich sehen kann, handelt es sich immer um eine einzelne Aktion, und keineP
oderp
kann für sich allein erscheinen.Antworten:
Python 2 ,
338337335331325 BytesProbieren Sie es online aus!
Bewegt sich direkt von jedem Charakter zum nächsten.
Erläuterung:
S=[c in K,s][c in' \n']
, prüft, ob das nächste Zeichen Groß- oder Kleinbuchstaben sein soll. Wennc
es sich um ein Leerzeichen oder eine neue Zeile handelt, bleibt der Fall derselbe.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
. Wennc
es sich um ein Leerzeichen oder eine neue Zeile handelt, wird die dem aktuellen am nächsten liegende x-Koordinate ausgewählt (da die Tasten mehrere Spalten umfassen).print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, druckt den Fallschalter, die Anzahl der x-Koordinatenbewegungen, die Anzahl der y-Koordinatenbewegungen und schließlichPp
für jedes ZeichenKürzere Version, wenn der kürzeste Weg nicht benötigt wird:
Python 2 ,
294293291287281 BytesProbieren Sie es online aus!
quelle
space
/ zu verwendenenter
?o
)JavaScript (ES6), 263 Byte
Nimmt die Eingabe als Array von Zeichen auf.
Probieren Sie es online aus!
quelle
.COM Opcode,
108104 BytesNehmen Sie Eingaben von der Tastatur bei ausgeschaltetem CapsLock vor
Schlecht Golf gespielt
quelle
Take input from keyboard
Wie kann unser Roboterfreund, der mit seiner Tastatur um Hilfe bittet, dieses Programm nutzen?