Jestem robotem. Kupiłem tę klawiaturę ze względu na jej łatwy prostokątny układ:
~` !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 =========]
Aby wydrukować ludzki tekst, muszę przekonwertować go na polecenia, które moi interpretatorzy mogą interpretować. Mój lewy manipulator unosi się nad Shiftklawiszem. Mój prawy manipulator na początku unosi się nad ~klawiszem. Polecenia, które rozumieją moi manipulatorzy, to:
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
Napisz kod, aby przekonwertować dowolny komunikat ASCII na listę poleceń. Dane wejściowe mogą zawierać dowolną liczbę 95 drukowanych znaków ASCII; ewentualnie także TAB i znaki nowej linii. Wyjściem powinna być lista poleceń manipulatorów.
Na przykład, aby wpisać Hello World!
, polecenia są
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Przed wydrukowaniem każdej wiadomości resetuję manipulatory do stanu początkowego.
Właściwe programowanie wymaga pewnych mechanicznych zagrożeń:
- Przenoszenie (
LRUD
) nie jest dozwolone, gdyP
włączone jest drukowanie ( ) - Bez blokowania manipulatorów: gdy manipulator jest włączony (
S
lubP
), następną komendą dla tego manipulatora powinno być wyłączenie (s
lubp
) i odwrotnie Bez niepotrzebnego przesuwania: między dwoma poleceniami shift (
s
,S
) powinna znajdować sięP
komendaTak więc, aby wydrukować
~~
, poleceniaSPpPp
są prawidłowe, aSPpsSPp
nie sąBez wychodzenia poza granice: żadna komenda ruchu nie powinna próbować przesunąć prawego manipulatora o więcej niż 13 pól w prawo lub 4 na dół do początkowej pozycji (lub dowolnego miejsca na górze lub na lewo)
Dodatkowe uwagi:
- Naciśnięcie wyłączonego klawisza (podobnie jak sekwencja poleceń
DDPp
) powoduje, że nie ma naciśnięcia żadnego klawisza i jest dozwolone. - Naciśnięcie Shift+ Tabnie daje żadnego efektu, ale Shift+ Spacei Shift+ Entermają taki sam efekt jak bez Shift.
- Naciśnięcie w dowolnym miejscu spacji i Enterklawisza ma ten sam efekt.
- Klucze białych znaków w danych wyjściowych nie mają znaczenia, ale można ich użyć do pięknego sformatowania.
Pp
? O ile widzę, to są zawsze jedna akcja i ani P
czy p
mogą pojawić się na własną rękę.