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, gdyPwłączone jest drukowanie ( ) - Bez blokowania manipulatorów: gdy manipulator jest włączony (
SlubP), następną komendą dla tego manipulatora powinno być wyłączenie (slubp) i odwrotnie Bez niepotrzebnego przesuwania: między dwoma poleceniami shift (
s,S) powinna znajdować sięPkomendaTak więc, aby wydrukować
~~, poleceniaSPpPpsą prawidłowe, aSPpsSPpnie 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 Pczy pmogą pojawić się na własną rękę.