Étant donné une liste de deux ou plusieurs numéros de série épelés de longueur égale supérieure à deux, par exemple
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
trier la liste par les nombres que les mots représentent:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Vous devrez peut-être orthographier les chiffres en minuscules ou en majuscules, mais pas en les mélangeant.
Cas de test
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
donne[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
donne[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
donne[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
donne[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Réponses:
Husk ,
98 octetsEssayez-le en ligne!
Algorithme "inspiré" par la réponse récursive de Stax (je viens de changer un peu la chaîne de recherche), allez le voter!
L'astuce consiste à mapper chaque lettre à sa position dans la chaîne
tfsen
(compressée à la fin de ce programme). Les listes de cosses sont basées sur 1 et les éléments manquants renvoient 0, nous obtenons donc ce mappage:Comme vous pouvez le constater, les listes sont parfaitement ordonnées.
Pour être clair, voici comment fonctionne la comparaison de liste dans Husk (et dans de nombreuses autres langues):
la source
tfrsen
mais je suppose que le fait d'avoir des mots commewith
etsen
aide à la compression.[1,0,0]
est considéré comme plus petit que[1,0,0,0]
(mais pour ce programme, cela ne ferait aucune différence)Stax ,
2422171614 octetsExécuter et déboguer
Ce programme prend des tableaux de chiffres épelés en minuscules pour la saisie. La sortie est séparée par des sauts de ligne.
Ce programme trie les entrées en utilisant l'ordre obtenu sous une transformation spécifique. Chaque caractère de chaque mot est remplacé par son index dans la chaîne
"wo thif sen"
. Les tableaux d'origine sont triés par cet ordre. Ensuite, les résultats sont imprimés après avoir rejoint un espace.Les espaces ne servent à rien, mais permettent en fait une plus grande compression dans le littéral de chaîne.
la source
Gelée , 12 octets
Un lien monadique.
Essayez-le en ligne! ... ou voir la suite de tests
Comment?
La conversion des chiffres en ordinaux puis à partir de la base 10 puis la prise de modules par 4752 puis 147 donne un ordre croissant:
Cela peut ensuite être utilisé comme une fonction clé pour trier:
la source
Python , 62 octets
Essayez-le en ligne! ... ou voir la suite de tests
Remarque:
qui fonctionne en Python 2 (mais pas 3) est plus long de deux octets.
la source
APL (Dyalog Classic) , 12 octets
Essayez-le en ligne!
Voici comment j'ai trouvé un argument de gauche approprié pour dyadique
⍒
(j'ai essayé⍋
et longueur 6 en premier):la source
Perl 6 , 37 octets
Essayez-le
Étendu:
Le bloc de code prendra une valeur du formulaire
("three","one","four")
et le traduira en("3","1","4")
une valeur.sort
facilement utilisable.la source
APL (Dyalog) , 38 octets
Essayez-le en ligne!
Basé sur la formidable solution de Jonathan Allan .
la source
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
mais vous pouvez le faire beaucoup plus simplement en moins de la moitié de votre nombre d'octets actuel.Rubis, 48 octets
Abuse le fait que
"zero".to_i(35)
0 (puisque 'z' n'est pas un chiffre valide en base 35), il est donc beaucoup plus facile de forcer brutalement une formule pour les neuf autres chiffres.la source
K (ngn / k) , 14 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 70 octets
Essayez-le en ligne!
la source
Rubis , 47 octets
Essayez-le en ligne!
Utilise le fait que l'utilisation d'une base inférieure au chiffre maximum donne un résultat de zéro (comme souligné par l'histocrate dans sa réponse )
la source
Python 2 ,
858180 octetsUtilise simplement les deux premières lettres de chaque mot pour déterminer le nombre, puis trie chaque liste en utilisant cette fonction d'indexation comme clé.
Essayez-le en ligne!
Enregistré 4 octets, merci à Jonathan Allan
la source
Rubis , 49 octets
Essayez-le en ligne!
la source
05AB1E , 27 octets
Essayez-le en ligne!
la source
Haskell ,
133122109107 107106 octetsNon golfé:
la source
Python 2 , 59 octets
Essayez-le en ligne!
Riffing sur la solution Python 3 de Jonathan Allan ...
la source
Java (JDK 10) , 132 octets
Essayez-le en ligne!
la source
Ruby , 64 octets
Essayez-le en ligne!
Un lambda acceptant un tableau 2D de chaînes et renvoyant un tableau 2D de chaînes.
Le ferroutage de la réponse Python 2 de mbomb007 pour -26 octets de ce que j'allais publier.
la source
Perl 5 , 103 octets
Essayez-le en ligne!
la source
Retina 0.8.2 , 38 octets
Essayez-le en ligne! Le lien inclut une suite de tests. Fonctionne en remplaçant temporairement les lettres
zowithfsen
par leur position dans cette chaîne, ce qui permet de trier lexicalement les chiffres.la source
Gelée ,
302827 octetsEssayez-le en ligne!
-1 merci à Jonathan Allan.
Recherche l'index de chaque chiffre dans la chaîne 'onetwo ... nine' puis trie en utilisant ceci comme une fonction clé avec
Þ
. Il n'est pas nécessaire d'inclure'zero'
au début, car la recherche des deux premiers caractères de'zero'
échouera et0
sera renvoyée à la place d'un index, ce qui rend'zero'
lexicographiquement "précoce".la source
'zeontw...ni'
fini par être plus longue.Python 3, 141 octets
Essayez-le en ligne!
la source
C (clang) , 229 octets
Essayez-le en ligne!
Il n'y a aucun moyen simple d'envoyer un tableau de tableau de chaînes aux fonctions C, donc dans l'esprit du code-golf, j'ai pris une liberté mineure dans le format d'entrée.
f()
accepte un tableau de pointeurs vers des chaînes, où chaque chaîne est un nombre, représenté par des chiffres épelés séparés par des virgules en minuscules. De plus, il a besoin d'un nombre de chaînes dans le tableau dans le deuxième paramètre. J'espère que c'est acceptable.f()
remplace les pointeurs en place dans l'ordre trié à l'aide deqsort()
.r()
lit le numéro d'entrée dans une chaîne numérique séparée par des virgules. Il compare uniquement les deux premiers caractères pour identifier le numéro.c()
est la fonction de comparaisonla source
strstr("i"-19,t)-"zeontwthfofisiseeini"
? Est-ce spécifique au compilateur ou standard?.rodata
qui ressemblent à cela0x69 0x00
et que le compilateur place l'adresse de"i"
fin"zeo..."