Я робот. Я купил эту клавиатуру из-за ее легкой прямоугольной раскладки:
~` !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; возможно также символы табуляции и перевода строки. На выходе должен быть список команд для манипуляторов.
Так, например, чтобы набрать 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
может появиться само по себе.