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 aniP
czyp
mogą pojawić się na własną rękę.Odpowiedzi:
Python 2 ,
338337335331325 bajtówWypróbuj online!
Przechodzi bezpośrednio od każdej postaci do następnej.
Wyjaśnienie:
S=[c in K,s][c in' \n']
, sprawdza, czy następny znak powinien być wielką lub małą literą. Jeślic
jest spacją lub znakiem nowej linii, wielkość liter pozostaje taka sama.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
. Jeślic
jest spacją lub znakiem nowej linii, wybierana jest najbliższa współrzędna x prądu (ponieważ klucze obejmują wiele kolumn)print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, wypisuje przełącznik wielkości liter, liczbę ruchów współrzędnych X, liczbę ruchów współrzędnych Y i na koniecPp
dla każdego znakuKrótsza wersja, jeśli najkrótsza ścieżka nie jest wymagana:
Python 2 ,
294293291287281 bajtówWypróbuj online!
źródło
space
/enter
?o
)JavaScript (ES6), 263 bajty
Pobiera dane wejściowe jako tablicę znaków.
Wypróbuj online!
źródło
.COM opcode,
108104 bajtówPobieraj dane z klawiatury przy wyłączonym CapsLock
Jednak źle grał w golfa
źródło
Take input from keyboard
W jaki sposób nasz przyjaciel-robot, który prosi o pomoc w korzystaniu z klawiatury, korzysta z tego programu?