Eu sou um robo. Comprei este teclado por causa de seu layout retangular fácil:
~` !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 =========]
Para imprimir texto humano, preciso convertê-lo em comandos que meus manipuladores possam interpretar. Meu manipulador esquerdo paira sobre a Shifttecla. Meu manipulador certo, no começo, passa o mouse sobre a ~tecla. Os comandos que meus manipuladores entendem são:
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
Escreva um código para converter qualquer mensagem ASCII em uma lista de comandos. A entrada pode conter qualquer número de 95 caracteres ASCII imprimíveis; possivelmente também caracteres TAB e nova linha. A saída deve ser a lista dos comandos para os manipuladores.
Então, por exemplo, para digitar Hello World!
, os comandos são
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Redefino os manipuladores para o estado inicial antes de imprimir cada mensagem.
Existem alguns riscos mecânicos que devem ser evitados pela programação adequada:
- Não é
LRUD
permitido mover ( ) quando a impressão (P
) é ativada - Sem obstrução de manipuladores: quando um manipulador é acionado (
S
ouP
), o próximo comando para esse manipulador deve ser desativado (s
oup
) e vice-versa Nenhuma mudança desnecessária: entre cada dois comandos de mudança (
s
,S
), deve haver umP
comandoPortanto, para imprimir
~~
, os comandosSPpPp
são válidos, enquantoSPpsSPp
não sãoSem sair dos limites: nenhum comando de movimento deve tentar mover o manipulador direito mais de 13 espaços para a direita ou 4 para a parte inferior da posição inicial (ou qualquer ponto para o topo ou para a esquerda)
Notas Adicionais:
- Pressionar uma tecla desativada (como sequência de comando
DDPp
) resulta em nenhuma tecla pressionada e é permitida. - Pressionar Shift+ Tabnão tem efeito, mas Shift+ Spacee Shift+ Entertêm o mesmo efeito que sem Shift.
- Pressionar qualquer ponto da barra de espaço e a Entertecla tem o mesmo efeito.
- As teclas de espaço em branco na saída não têm significado, mas podem ser usadas para formatá-lo de uma maneira bonita.
Pp
? Tanto quanto eu posso ver esses são sempre uma única ação e nem P
ou p
pode aparecer por conta própria.