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 é
LRUDpermitido mover ( ) quando a impressão (P) é ativada - Sem obstrução de manipuladores: quando um manipulador é acionado (
SouP), o próximo comando para esse manipulador deve ser desativado (soup) e vice-versa Nenhuma mudança desnecessária: entre cada dois comandos de mudança (
s,S), deve haver umPcomandoPortanto, para imprimir
~~, os comandosSPpPpsão válidos, enquantoSPpsSPpnã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 Pou ppode aparecer por conta própria.