Étant donné un entier non négatif ( n
), créez une fonction qui retourne n
dans l'ordre alphabétique, selon l'orthographe littérale de chaque chiffre dans n
.
Exemples:
Input: 101
>> one, zero, one
>> one, one, zero
Output: 110
Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913
Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544
Input: 1234567890
Output: 8549176320
Remarque: les opérations dans l'exemple ne sont qu'illustratives et n'ont pas besoin d'être incluses dans la sortie. Seul le numéro trié par ordre alphabétique doit être renvoyé.
Il s'agit de code-golf, donc le code le plus court en octets l'emporte.
Modifier: l'entrée peut être prise dans le format souhaité qui convient le mieux à votre langue, et la sortie peut être produite de la même manière en revenant de la fonction ou de l'impression. L'entrée sera toujours un nombre naturel (y compris 0) et ne contiendra pas de 0 en tête.
Entrée OEIS pertinente (A057846) trouvée par @DomHastings
00
....849
, cela signifie-t-il que nous sommes autorisés à imprimer le nombre849
mais pas la chaîne"849"
? OMI, ce n'est qu'un format d'E / S encombrant (mauvais!) En plus d'un défi parfaitement bien.001
sortie? S'ils sont significatifs et que le résultat ne l'est pas1
, la plupart des langues nécessiteront des chaînes en entrée pour le simple fait qu'elles sont grossières, peu pratiques et généralement impossibles à demander à l'analyseur de conserver les zéros de tête dans les nombres littéraux de base 10.Réponses:
Perl 6 ,
3228 octetsExplication:
Tester:
la source
05AB1E,
121110 octetsExpliqué
Essayez-le en ligne
1 octet enregistré grâce à Adnan
la source
JavaScript (ES6), 54
Modifier le même nombre de caractères, mais en évitant la variable globale
z
Entrée / sortie sous forme de chaînes
Tester
la source
z
...Haskell,
62 5144 octetsComme l'a suggéré @nimi, l'utilisation d'une liste de compréhension est plus courte que la composition de fonctions:
Pour référence ma version:
La version sans point est un peu plus longue:
Simple: filtrez les chiffres dans le bon ordre, puis concaténez le résultat.
la source
Pyth,
1210 octetsJe ne sais pas s'il peut être joué plus loin. L'entrée doit être placée entre guillemets.
2 octets économisés grâce à @isaacg!
En pseudocode pythonique:
Testez-le ici .
la source
549176320
parC" Ȁ\0
\0
. C'est probablement le problème que vous rencontriez.Perl, 37 octets
Code de 36 octets + ligne de commande de 1 octet (-F)
Exemple d'utilisation:
la source
MATL , 19 octets
Essayez-le en ligne!
Explication
la source
Gelée, 11 octets
Essayez-le ici.
Explication
la source
Mathematica
35 7847 octets31 octets économisés grâce à une suggestion de LIAMnYP!
IntegerDigits
décompose le nombre en chiffres qui sont ensuite triés en fonction de leurs noms en anglais.FromDigits
assemble les chiffres en un nombre de base 10.8549176320
la source
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
douloureusement lent, c'est donc un bonus supplémentaire.C,
142141117Passez le paramètre
long long *
àf()
; la fonction modifie le paramètre:long long
est nécessaire car le dernier cas de test a débordéint
lors du tri.la source
Python 2 - 95 octets
Essayer de continuer à jouer au golf ... Je pense que la ligne 2 est inutile et cela peut devenir 1 lambda.
EDIT: version 49 caractères dans les commentaires, thx à xnor et vaultah pour de l'aide.
la source
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
pour que lefind
donne -1.lambda n: "".join(sorted(n,key="549176320".find))
, ce qui est vraiment similaire à ce que vous avez suggéré, vaultah. Vous devriez le poster!- Oracle 11 (SQL): 164 octets
Forme longue et explication
Obtenez l'entrée en tant que paramètre du script:
"créer" des lignes en utilisant la connexion en fonction de la longueur de l'entrée:
Extrayez chaque chiffre de la chaîne pour chaque position:
Convertissez le chiffre en date julienne, puis revenez à Char pour obtenir l'orthographe:
Vérifiez zéro - cas spécial.
Utilisez la fonction LISTAGG pour concaténer des lignes en une seule liste de lignes, délimitées par des virgules, classées par ordre alphabétique
Toujours amusant d'essayer de modifier SQL pour des choses comme ça ... :) teste vraiment ma connaissance du bugger ...
la source
Rubis, 60 octets
la source
Raquette,
142130 octetsDont les conversions sont
plusprès de la moitié de la longueur (7664 octets).la source
(+ 1 answer)
pour Raquette!TSQL, 260 octets
Tri des bulles inversé utilisé pour éviter de se référer à la longueur, pour économiser quelques octets
Golfé:
Non golfé:
Insister sur l'utilisation de types entiers comme entrée et sortie a ajouté 37 octets
la source
DECLARE @ varchar(99)=101
0.o101
se transforme-t-il automatiquement en chaîne?stuff
est un nom de fonction objectivement horrible.squash
oushove
oupack
serait mieux: Pstuff
car c'est ce que font les fonctions: elles font des trucs. Ensuite, votre code peut ressemblerstuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 octets
Utilise une conversion stringy>> int vissée à partir de la fuite de Javascript, donc ce n'est pas valide Clojure.
la source
Firebird, 317 octets
Golfé:
Non golfé:
Il n'y a pas de fonctionnalité partagée dans Firebird. Au lieu de cela, j'ai créé une requête récursive pour obtenir le caractère suivant encore et encore. Puis resélectionnez-les en les triant par notre bon ordre. Enfin concaténer ces résultats ensemble dans une liste. Remplacez le délimiteur de virgule par défaut par un blanc. Je pourrais économiser 11 octets en créant une nouvelle table factice au lieu de
rdb$database
mais j'ai pensé que cela pouvait être contraire aux règles.la source
ZX Spectum, code machine,
5348474544 octetsconvtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command
la source
Facteur, 128
Hourra pour les intégrés! :RÉ
la source
PHP, 126 octets
Pour autant que je sache, php n'a pas de code intégré qui pourrait vraiment aider à cela (le mieux que je puisse faire en utilisant un usort (str_split ()) était de 5 octets de plus), donc la seule chose que je suis satisfait de cette réponse est la jeux joués avec $ i pour économiser quelques octets sur l'itération.
la source
APL, 23 octets
Explication:
n←⍕⍵
: obtenir la représentation sous forme de chaînen
et la stocker dansn
'8549176320'⍋
: trouver une permutation den
ce genren
étant donné l'ordre8549176320
.n[
...]
: réorganisern
par cette permutation⍎
: évaluer le résultat (pour le reconvertir en nombre)la source
⍎
et⍕
. Convertir en tradfn en supprimant{
et}
et son remplacement⍞
par⍵
. Enfin, supprimez0
les tris non répertoriés à la fin:n['854917632'⍋n←⍞]
Clojure, 53 octets
Eh bien, l'idée de compréhension de liste de la solution Haskell semble être la plus courte:
Mon approche originale est d'un octet de plus:
Vous pouvez voir les deux fonctions en ligne ici: https://ideone.com/afac5n
la source
Lisp commun, 104
Non golfé
Convertissez un entier sous forme de chaîne, triez les caractères à l'aide de la
string<=
comparaison tout en utilisant une:key
fonction personnalisée qui convertit un caractère donné en représentation anglaise de la valeur numérique qu'il représente. Habituellement, je n'utiliserais pas une fonction clé qui fait autant que celle-ci, mais elle coûte moins en octets que décorer / trier / décorer.la source
Python 3, 234 octets
Ceci est une traduction directe de ma réponse Factor , juste pour le plaisir.
La sémantique de l'évaluation des objets "paresseux" de la carte et du zip est la pièce la plus subtile des excréments de chevaux induisant les insectes les plus difficiles à trouver dans l'univers. Parfois,
s = map(f, x)
ne permet pass
d'être utilisé correctement ou pas du tout.la source
Pyke, 14 octets
Essayez-le ici!
la source
C, 80 octets
Prend une chaîne contenant un nombre en base 10 et imprime dans
stdio
:la source
Python 2.7.11, 67 octets
Prend une chaîne en entrée et sort une chaîne.
la source
Python 3, 74 octets
la source
PHP , 107 octets
Essayez-le en ligne!
Utilise une fonction de comparaison définie par l'utilisateur pour ajuster l'ordre de tri.
Sortie
la source