Localisateur de numéro de chambre
Je suis tombé sur une technique de résolution de problèmes intéressante à mon travail quand on m'a donné le mauvais numéro de chambre d'un collègue pour une réunion. De temps en temps, alors que je me rends à une réunion, un membre de mon équipe m'envoie le mauvais numéro de chambre, généralement parce qu'il est pressé à son bureau et qu'il a la grosse clé du mauvais doigt.
Fait intéressant, à mon arrivée dans la mauvaise pièce, je peux généralement deviner de quelle pièce il s'agissait vraiment en imaginant un pavé numérique :
et en devinant un nombre adjacent, ils voulaient appuyer.
Défi
Votre défi consiste à écrire une fonction qui prend un numéro de bureau de bâtiment (000-999) et génère les solutions de faute de frappe possibles, en supposant que votre collègue ne tape qu'un chiffre.
Le tableau suivant montre quels numéros sont adjacents les uns aux autres sur un pavé numérique:
0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8
Contribution
Un numéro à 3 chiffres: 000-999
. Supposons une entrée d'exactement 3 chiffres. Si le nombre est inférieur à 100 ou inférieur à 10, vous recevrez les zéros de tête. (c.-à-d. 004 et 028).
Sortie
Une liste des chambres possibles. Cela peut prendre la forme que vous souhaitez, tant qu'il y a un délimiteur entre les numéros de pièce. (c.-à-d. espace, virgule, nouvelle ligne, etc.). Si le nombre est inférieur à 100 ou inférieur à 10, vous pouvez ou ne pouvez pas avoir les zéros de tête en sortie, cela dépend de vous. (c.-à-d. 004 peut être 004 04 4
et 028 peut être 028 28
)
Cas de test (les zéros en tête sont facultatifs):
008 -> 108, 208, 018, 028, 005, 007, 009
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558
Il s'agit de code-golf , donc le code le plus court en octets pour chaque langue l'emporte.
933
donc je l'ai corrigé.Réponses:
Wolfram Language (Mathematica) ,
112106 octetsReconnaissant qu'un pavé numérique est essentiellement un 3x3
GridGraph
avec des bords ajoutés pour 0, nous obtenons les chiffres adjacents pour chaque chiffre d'entrée avecAdjacencyList
.Cela peut être vu ci-dessous:
EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}]
rendements:Ensuite, j'utilise
Tuples
pour comprendre toutes les erreurs possibles et choisir celles avec exactement une erreur avecSelect
etEditDistance
. Soit dit en passant, cela fonctionnera pour des numéros de pièce plus longs et vous pouvez également augmenter leEditDistance
paramètre pour permettre plusieurs erreurs. Pourrait être en mesure de jouer au golf un peu plus loin, mais je voulais montrer mon approche.Version légèrement plus golfée codée en dur pour une longueur de 3 numéros de pièce (106 octets). Cela produira une liste de rang 3 correspondant à chaque chiffre:
Essayez-le en ligne!
la source
DamerauLevenshteinDistance
au lieu deEditDistance
cela, incluraient également des erreurs de transposition.Python 2 , 89 octets
Essayez-le en ligne!
Les 1 er et 5 e caractères peuvent ne pas être affichés ici (selon le navigateur), mais la chaîne complète équivaut à
[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]
la source
05AB1E , 29 octets
Essayez-le en ligne!
la source
R , 190 octets
Essayez-le en ligne!
Ma deuxième tentative chez CodeGolf! Assez long, 190 octets, mais le mieux que j'ai pu gérer avec R. Curieux de voir si d'autres ont des retours ou peuvent faire mieux!
la source
:
over*/+-
peut raser quelques octets dans la première ligne, s'en débarrasserdo.call
, le traitera
comme unmatrix
et le transposer économise environ 39 octets: Essayez-le en ligne!JavaScript (Firefox 30-57),
115109 octetsEdit: 6 octets enregistrés grâce à @ edc65 (bien que les suggestions
0
apparaissent maintenant après d'autres suggestions). Version ES6,118112 octets:la source
[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
[for(...)]
était l'une des nombreuses propositions de syntaxe de compréhension de tableau qui n'ont jamais été intégrées dans ECMAscript. Il vous a permis de parcourir un itérateur et de filtrer et / ou cartographier succinctement les résultats. (Je l'ai trouvé particulièrement utile lors d'une double itération.)Java,
205177 octetsJe sais que c'est long par rapport aux autres réponses. Mon excuse: c'est en Java.
Oracle devrait renommer
toCharArray
quelque chose commegetCrs
.Crédits
-28 personnages de Kevin Cruijssen
la source
(String b)->
peut être justeb->
, et vous pouvez supprimer la fin;
. Quant aux choses réelles au golf: vous ne l'utiliseza
qu'une seule fois, vous pouvez donc l'enleverString[]a=...;
et l'utiliser"12,024,0135,26,157,2468,359,48,579,68".split(",")[...]
directement. , AussiByte.parseByte
peut êtrenew Byte
. Au total: 177 octets .Ruby 97 octets
Essayez-le en ligne!
Alternativement, 94 caractères mais 100 octets
Essayez-le en ligne!
la source
C (gcc) , 136 ou 114 octets
ASCII version 136 octets
Essayez-le en ligne!
Unicode
114108 octets (TiO semble compter étrangement pour cela)Merci à @ceilingcat pour cette version.
Essayez-le en ligne!
la source
Perl 5 ,
12085 + 2 (-F
) = 87 octetsEssayez-le en ligne!
Économisé 35 octets en empruntant une idée à la réponse ruby de @ AsoneTuhid.
la source
Python 2 , 103 octets
merci à @Lynn pour -4 octets.
Essayez-le en ligne!
la source
in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]
(J'ai essayéint('…',36)
aussi mais c'est un octet de plus.)Julia 0,6 , 93 octets
Essayez-le en ligne!
0x502A044228550A21102B05406
est unUInt128
dans lequel le1+10j
bit e est défini ssii
est à côtéj
du pavé numérique.big(1)
est unBigInt
. Il est utilisé pour éviter le débordement et utilise moins de caractères queInt128(1)
ouUInt128(1)
.la source
SQL (SQLite), 533 octets
Non golfé
Explication
L'entrée est une seule ligne de texte sur un tableau
t
avec une colonnes
. Ma compréhension est que selon cette méta-réponse, c'est une forme d'entrée acceptable. L'entrée peut être créée comme ci-dessous.Solution annotée
la source
Kotlin , 117 octets
Embellie
Tester
TIO
TryItOnline
la source
Gelée , 35 octets
Essayez-le en ligne!
-1 merci à Jonathan Allan .
Explication en cours de mise à jour ...
la source
Wẋ3
->ḷþ
T-SQL , 322 octets
L'entrée provient de la colonne
s
d'une table à une seule ligne nomméet
:Non golfé:
SQLFiddle
la source