Я робот. Я придбав цю клавіатуру через її легку прямокутну розкладку:
~` !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 =========]
Щоб надрукувати людський текст, мені потрібно перетворити його на команди, які мої маніпулятори можуть інтерпретувати. Мій лівий маніпулятор наводить курсор на Shiftклавішу. Мій правильний маніпулятор на початку наводить на ~клавішу. Команди, які розуміють мої маніпулятори, це:
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
Написати код, щоб перетворити будь-яке повідомлення ASCII в список команд. Вхід може містити будь-яке число з 95 друкованих символів ASCII; можливо також TAB та символи нового рядка. На виході повинен бути список команд для маніпуляторів.
Так, наприклад, щоб набрати Hello World!
, команди є
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Я скидаю маніпулятори до початкового стану перед друком кожного повідомлення.
Є деякі механічні небезпеки, яких слід уникати правильним програмуванням:
- Не дозволяється переміщення (
LRUD
), коли друк (P
) задіяний - Ніякого заклинання маніпуляторів: коли маніпулятор задіяний (
S
абоP
), наступною командою для цього маніпулятора має бути відключення (s
абоp
), і навпаки Немає зайвого зсуву: між кожною з двох команд shift (
s
,S
) повинна бутиP
командаОтже, для друку
~~
командиSPpPp
є дійсними, тодіSPpsSPp
як ніЖодного переміщення за межі: жодна команда руху не повинна намагатися перемістити правий маніпулятор більше ніж на 13 пробілів вправо або на 4 в нижній частині вихідного положення (або будь-яке місце вгору або вліво)
Додаткові нотатки:
- Натискання відключеної клавіші (подібна командна послідовність
DDPp
) призводить до того, що не натискається жодна клавіша, і це дозволено. - Натискання Shift+ Tabне робить ефекту, але Shift+ Spaceі Shift+ Enterмають такий же ефект, як і без Shift.
- Натискання на будь-яке місце на панелі пробілу та Enterклавіша має той самий ефект.
- Пробіли клавіш білого простору не мають значення, але їх можна використовувати для гарного форматування.
Pp
? Наскільки я можу бачити тих , хто завжди одну дію , і ні P
або p
може з'явитися саме по собі.