Il était difficile de convertir un nombre en chiffres en anglais , mais c'était trop simple. Étant donné un nombre compris entre 0 et 100, votre tâche consiste à sortir le chiffre correspondant en français. Le système numérique français a une logique plus complexe derrière lui que le système anglais:
Chiffre numérique --------------- 0 zéro (notez l'accent) 1 un 2 deux 3 trois 4 quatre 5 cinq 6 six 7 Sept 8 huit 9 neuf 10 dix 11 onze 12 douze 13 treize 14 quatorze 15 quinze 16 saisir 17 dix-sept (littéralement dix sept) 18 dix-huit 19 dix-neuf 20 vingt 21 vingt et un (pas de tirets) 22 vingt-deux ... 30 trente ... 40 quarante ... 50 cinquante ... 60 soixante ... 70 soixante-dix (littéralement soixante dix) 71 soixante et onze ... 80 quatre-vingts (notez les s; littéralement quatre vingt) 81 quatre-vingt-un (notez les tirets) ... 90 quatre-vingt-dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 cent
Pour une liste complète, suivez http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Autres règles / explications
- Il y aura toujours un trait d'union entre les mots SAUF lorsque le nombre se termine par 1.
- Lorsque le nombre se termine par 1, le mot et (signifiant et ) est ajouté avant l' un ou l' onze . (31 = trente et un)
- Cependant, 81 et 91 sont formatés de la même manière que les autres nombres. (81 = quatre-vingt-un)
- À 60, le système passe de la base 10 à la base 20.
- Il existe quelques différences mineures à ce sujet sur le Web; reportez-vous à la liste ci-dessus pour les questions.
- Les failles interdites par défaut ne sont pas autorisées.
- L'utilisation d'une source externe telle qu'un site Web, ainsi que toutes bibliothèques, API, fonctions ou similaires qui convertissent des nombres en chiffres ou traduisent en français ne sont pas autorisées.
- Il s'agit de code-golf , donc la réponse avec le moins d'octets l'emporte.
- Si disponible, veuillez créer un lien vers un compilateur en ligne pour permettre un test facile de votre code.
Contribution
- L'entrée doit provenir de votre langue. (STDIN, ligne de commande, etc.)
- L'entrée sera une seule chaîne, composée d'un nombre entier compris entre 0 et 100 inclus (zéros non significatifs en option).
- Vous pouvez supposer que l'entrée sera toujours bien formée.
Sortie
- Le résultat sera transmis à la méthode la plus pratique pour votre langue. (STDOUT, boîte de dialogue, etc.)
- La casse n'a pas d'importance dans la sortie.
Exemples
Testez votre code par rapport à ceux-ci:
Entrée sortie ------------- 0 zéro 18 dix-huit 51 cinquante et un 80 quatre-vingts 91 quatre-vingt-onze 99 quatre-vingt-dix-neuf
code-golf
number
kolmogorov-complexity
NinjaBearMonkey
la source
la source
Réponses:
JavaScript (ES6) 318
321Modifier le correctif de bogue (gérer les premiers 0) et jouer au golf plus
Crédit pour l'astuce de l'affaire de chameau @ Core1024
Avec entrée / sortie via popup
Comme fonction testable
Pour tester dans la console FireFox ou FireBug
Sortie de test
la source
Haskell, 390 octets
Non golfé
Les langages de programmation fonctionnels conviennent parfaitement à ce travail.
la source
main=interact$f.read
et enregistrer quelques caractères.interact
. Mis à jour.Rubis, 333 octets
Ce ne sont généralement que deux tables de recherche et un tas d'opérateurs ternaires qui codent toutes les règles étranges et vous indiquent quelle table de recherche utiliser quand. Faites-moi savoir si vous voulez en savoir plus. ;)
la source
80
devrait produire quatre vingts, avec un s à la fin.Python - 344
(348) (380) (445) (537)octetsMerci à grc, Ray et isaacg pour leur aide dans le processus de golf.
Le code se compose de la définition initiale du dictionnaire et d'une compréhension de liste qui remplit les blancs avec la jonction des éléments du dictionnaire.
Vous pouvez vérifier le code en ligne sur repl.it
Mes dernières tentatives pour jouer à ce code ont été de renoncer au processus de génération et avec cette réduction d'affiner la fonction pour générer simplement le numéro demandé sur place. Cependant, comme les nombres des années 60 et 80 ont besoin d'éléments non calculés, la difficulté a été de créer une telle fonction tout en diminuant le code.
la source
r=range
, cette astuce pour les lignes 2 et 3, et un seul espace pour l' indentation. Et vous pouvez économiser 65 octets avecd=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
astuce que je connaissais, mais j'ai oublié de l'ajouter lorsque j'ai écrit la première révision. Tout le reste était relativement nouveau pour moi, alors merci. Une note cependant, le code ne fonctionne pas sur Python 3.x sauf si l'print
instruction est transformée en fonction et lesr
fonctions dans le dict sont transformées en listes.int(input())
,input()
c'est suffisant.b=a/60*10+10
enf(a)
vous pouvez ensuite utilisera-a%b
eta%b
pour vos clés de dictionnaire. De plus, vous n'avez pas besoin d'espace1 or
et la 4ème ligne peut être raccourcie[f(v)for v in r(100)if v not in d]
. Je n'ai pourtant rien essayé de tout cela.if v not in d
->if(v in d)<1
enregistre un personnage. Si vous séparez les deux parties de votre fonction par un point-virgule, vous pouvez tout mettre sur une seule ligne.Python - 392 octets
Il a une liste avec des numéros de base qu'il utilise pour générer les autres numéros. La plupart de la logique de génération se trouve dans la compréhension de liste sur la ligne 2, en utilisant l'indexation de liste pour les conditions. Une fois la liste générée, elle recherche le numéro saisi et l'imprime.
Edit: raccourci de 426 octets en utilisant la pointe de grc.
la source
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3, (503 octets)
Compressez le tableau à l'aide de bzip2, puis utilisez l'encodage ascii85 pour stocker le résultat. Le tableau est:
Méthode très naïve, mais ce n'est pas si mal.
Golfé
Non golfé
Prime
Pouvez-vous trouver le mot "Vim" dans la chaîne compressée?
la source
Sh0W
. Impossible de trouver Vim, vous non plus.Frapper,
456 440 421408Suppose une entrée valide (entier de 0 à 100 avec n'importe quel nombre de zéros non significatifs).
la source
JavaScript 459 (sans boîtier Camel)
@ edc65 ne peut pas vous prendre ça ...;)
A="0un0deux0trois0quatre0cinq0six0sept0huit0neuf0dix0onze0douze0treize0quatorze0quinze0seize0dix-sept0dix-huit0dix-neuf".split(0);S="soixante";Q=A[4]+"-vingt";T=10;V=20;N=59;for(b=5;1<b--;)for(c=V;c--;)X=b*V+c,A[X]=[,["vingt","trente"],["quarante","cinquante"],[S,S],[Q,Q]][b][c/T|0]+(X%T?X>N?X%V==T?"-dix":"":"":"")+(1>X%T?"":(1==X%(X>N?V:T)|71==X)&81!=X?" et ":"-")+(X>N&X%V==T?"-dix":A[c%(X>N?V:T)]);A[0]="zéro";A[80]+="s";A[100]="cent";alert(A[prompt()])
la source