Я робот. Я купил эту клавиатуру из-за ее легкой прямоугольной раскладки:
~` !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
может появиться само по себе.Ответы:
Python 2 ,
338337335331325 байтПопробуйте онлайн!
Переходит непосредственно от каждого персонажа к следующему.
Объяснение:
S=[c in K,s][c in' \n']
, проверяет, должен ли следующий символ быть прописным или строчным. Еслиc
это пробел или перевод строки, регистр остается тем же.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
, Еслиc
это пробел или новая строка, выбирается ближайшая x-координата к текущей (так как ключи охватывают несколько столбцов)print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, печатает переключатель регистра, количество ходов по координатам x, количество ходов по координатам y и, наконецPp
, для каждого символаУкороченная версия, если кратчайший путь не требуется:
Python 2 ,
294293291287281 байтПопробуйте онлайн!
источник
space
/enter
?o
)JavaScript (ES6), 263 байта
Принимает ввод как массив символов.
Попробуйте онлайн!
источник
Код операции .COM,
108104 байтаВозьмите ввод с клавиатуры с отключенным CapsLock
Хотя плохо играли в гольф
источник
Take input from keyboard
Как наш друг-робот, который просит помощи с помощью клавиатуры, использует эту программу?