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 keine P
oder p
kann für sich allein erscheinen.