Je suis un robot. J'ai acheté ce clavier en raison de sa disposition rectangulaire facile:
~` !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 =========]
Pour imprimer du texte humain, je dois le convertir en commandes que mes manipulateurs peuvent interpréter. Mon manipulateur gauche plane sur la Shiftclé. Mon manipulateur droit, au début, plane sur la ~clé. Les commandes que mes manipulateurs comprennent sont:
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
Écrivez du code pour convertir tout message ASCII en une liste de commandes. L'entrée peut contenir n'importe quel nombre des 95 caractères ASCII imprimables; éventuellement aussi TAB et caractères de nouvelle ligne. La sortie doit être la liste des commandes aux manipulateurs.
Ainsi, par exemple, pour taper Hello World!
, les commandes sont
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
Je remets les manipulateurs à leur état initial avant d'imprimer chaque message.
Il existe certains risques mécaniques qui devraient être évités par une programmation appropriée:
- Aucun déplacement (
LRUD
) autorisé lorsque l'impression (P
) est engagée - Pas de brouillage des manipulateurs: lorsqu'un manipulateur est engagé (
S
ouP
), la commande suivante pour ce manipulateur doit être de se désengager (s
oup
), et vice-versa Pas de décalage inutile: entre chaque commande shift (
s
,S
), il doit y avoir uneP
commandeDonc, pour imprimer
~~
, les commandesSPpPp
sont valides, alorsSPpsSPp
qu'elles ne le sont pasPas de déplacement hors des limites: aucune commande de mouvement ne doit essayer de déplacer le manipulateur droit de plus de 13 espaces vers la droite ou 4 vers le bas de la position initiale (ou n'importe quel endroit en haut ou à gauche)
Notes complémentaires:
- Appuyer sur une touche désactivée (comme une séquence de commandes
DDPp
) n'entraîne aucune pression et est autorisé. - Appuyer sur Shift+ Tabn'a aucun effet, mais Shift+ Spaceet Shift+ Enteront le même effet que sans Shift.
- En appuyant sur n'importe quel endroit de la barre d'espace et la Entertouche a le même effet.
- Les clés d'espaces en sortie n'ont aucune signification, mais peuvent être utilisées pour les formater d'une manière magnifique.
Pp
? Pour autant que je puisse voir, ce sont toujours une seule action et ni l'unP
ni l' autre nep
peuvent apparaître seuls.Réponses:
Python 2 ,
338337335331325 octetsEssayez-le en ligne!
Se déplace directement de chaque personnage au suivant.
Explication:
S=[c in K,s][c in' \n']
, vérifie si le caractère suivant doit être en majuscule ou en minuscule. S'ilc
s'agit d'un espace ou d'une nouvelle ligne, le cas reste le même.X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]
. Sic
est un espace ou une nouvelle ligne, la coordonnée x la plus proche du courant est choisie (car les clés s'étendent sur plusieurs colonnes)print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp'
, imprime le commutateur de casse, le nombre de mouvements de coordonnées x, le nombre de mouvements de coordonnées y et enfinPp
, pour chaque caractèreVersion plus courte, si le chemin le plus court n'est pas requis:
Python 2 ,
294293291287281 octetsEssayez-le en ligne!
la source
space
/enter
?o
)JavaScript (ES6), 263 octets
Prend l'entrée comme un tableau de caractères.
Essayez-le en ligne!
la source
.COM opcode,
108104 bytesPrendre l'entrée du clavier avec CapsLock désactivé
Mal golfé cependant
la source
Take input from keyboard
Comment notre ami robot, qui demande de l'aide pour utiliser son clavier, utilise-t-il ce programme?