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 nemP
oup
pode aparecer por conta própria.Respostas:
Python 2 ,
338337335331325 bytesExperimente online!
Move diretamente de cada caractere para o próximo.
Explicação:
S=[c in K,s][c in' \n']
, verifica se o próximo caractere deve estar em maiúsculas ou minúsculas. Sec
for um espaço ou uma nova linha, o caso permanece o mesmo.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
. Sec
for um espaço ou uma nova linha, é escolhida a coordenada x mais próxima da corrente (como as teclas abrangem várias colunas)print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, imprime a alternância entre maiúsculas e minúsculas, o número de movimentos da coordenada x, o número de movimentos da coordenada y e, finalmentePp
, para cada caractereVersão mais curta, se o caminho mais curto não for necessário:
Python 2 ,
294293291287281 bytesExperimente online!
fonte
space
/enter
?o
)JavaScript (ES6), 263 bytes
Recebe a entrada como uma matriz de caracteres.
Experimente online!
fonte
.COM opcode,
108104 bytesRetire a entrada do teclado com o CapsLock desativado
Mal golfe
fonte
Take input from keyboard
Como nosso amigo robô, que está pedindo ajuda para usar o teclado, pode usar esse programa?