Avant de lire ceci, je suggère de lire ce petit puzzle: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard
Je veux que vous fassiez un programme qui prend un argument, un mot (uniquement des lettres minuscules), et génère "Oui" si le mot peut être tapé avec des touches adjacentes sur le clavier (voir l'article) et "Non" si le mot peut 't être tapé avec des lettres adjacentes.
Voici la disposition du clavier utilisée dans ce défi:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
| A | S | D | F | G | H | J | K | L |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
| Z | X | C | V | B | N | M |
└───┴───┴───┴───┴───┴───┴───┘
N'oubliez pas: il s'agit de codegolf, donc la réponse la plus courte l'emporte!
code-golf
puzzle-solver
keyboard
Loovjo
la source
la source
Réponses:
Pyth, 66
Essayez-le ici.
J'ai été surpris d'apprendre que Pyth n'a pas de fonction d'hypoténuse, donc cela sera probablement battu par un langage différent. Je proposerai une fonction d'hypoténuse à Pyth, donc cette atrocité ne se produira pas à l'avenir.
Explication
Je transforme le clavier en ceci:
Que j'encode ensuite comme
"qwertyuiopasdfghjkl*zxcvbnm"
. Ensuite, j'ai utilisé divmod avec modulo 9.5 pour déterminer les coordonnées 2D de chaque touche. Ensuite, je calcule les distances entre les touches consécutives et vérifie si la distance au carré <2.la source
CJam,
837574 octetsEssayez-le en ligne.
Explication
L'approche générale consiste à produire une grande chaîne d'adjacence contenant chaque paire de caractères de clavier adjacents, puis à vérifier que chaque paire de caractères d'entrée adjacents est contenue dans cette chaîne.
Je suis assez content de la façon dont j'ai réussi à construire la chaîne d'adjacence, qui utilise une logique très simple et compacte.
la source
J, 77 octets
Usage:
Méthode:
Pour chaque lettre d'entrée, je génère sa coordonnée 2D (similaire à l'image de la question) en fonction de son index dans la chaîne
'qazwsxedcrfvtgbyhnujmikXolX'
. Pour chaque paire de lettres dans l'entrée, je vérifie si la distance Manhattan de leurs coordonnées est inférieure à 2. Si toutes le sont, je les émetsYes
,No
sinon (en abusant de l'opérateur `).Essayez-le en ligne ici.
la source
p
.i.
opérateur retourne leindex of the last element + 1
afin que je puisse enregistrer 1 octet en n'écrivant pasp
et toujours obtenir son index correct.CJam, 75
Essayez-le ici ( Firefox ici ).
Oublié la partie Oui / Non ... Fixé.
la source