Le but de ce code golf est de convertir des entiers en mots anglais.
Le programme vous invite à entrer. Si cette entrée n'est pas un entier, imprimez NaN
. S'il s'agit d'un entier, convertissez-le en mots anglais et imprimez ces mots. Entrée minimale: 0 (zéro). Entrée maximale: 9000 (neuf mille).
Donc, 5
retourne five
(la casse n'a pas d'importance) et 500
retourne five hundred
ou five-hundred
(les tirets n'ont pas d'importance).
Quelques autres règles:
Un one
avant hundred
ou thousand
est facultatif: one hundred
est correct, mais hundred
aussi (si l'entrée est 100
bien sûr).
Le mot and
dans par exemple one hundred and forty five
est facultative aussi.
L'espace est important. Donc, pour 500
, five-hundred
ou five hundred
c'est correct, mais ce fivehundred
n'est pas le cas.
Bonne chance!
Réponses:
Perl 281 octets
Ajout de nouvelles lignes pour la santé mentale horizontale. Ce qui précède peut être utilisé de manière interactive ou en lui attribuant une valeur via stdin.
Fonctionne correctement pour toutes les valeurs entières sur la plage [0, 19999] , les valeurs en dehors de cette plage présentent un comportement non défini. Les valeurs non entières seront tronquées vers zéro, et en tant que telles, seules les valeurs réellement non numériques seront signalées
NaN
.Exemple d'utilisation:
Exemple de sortie:
la source
NaN
."JavaScript (375)
Probablement une tentative terrible, mais de toute façon, c'est parti ...
Assez imprimé (en fonction):
Exemple de conversion (notez qu'il sort même
NaN
en dehors des limites, c'est-à-dire une entrée invalide):la source
+1
il est assez difficile de faire mieux dans une langue comme javascript. (vous pouvez supprimer l'espaceN(s,z) {return
pour enregistrer 1 caractère)O
chaîne. Je vais arranger ça ..Mathematica
6057Usage:
Éditer:
la source
Lisp,
7256 caractèresJe me rends compte 1) que c'est ancien et 2) qu'il repose entièrement sur la bibliothèque standard pour fonctionner, mais le fait que vous puissiez faire en sorte que le système d'impression c-lisp fasse ce genre de chose m'a toujours impressionné. En outre, cela prend en fait l'entrée d'un utilisateur, la convertit et l'imprime.
Il totalise 72 caractères.
:junk-allowed
fait en sorte que parse-integer renvoie nil en cas d'échec au lieu de déclencher une erreur.~:[if-nil~;if-non-nill]
conditionnelle basée sur zéro, gère NaN si nécessaire~:*
sauvegarde l'interprétation des arguments pour consommer à nouveau l'entrée~r
imprime le nombre sous forme de chaîne de mots anglais, comme demandé, sauf avec une ponctuation entièrement corrigéeÉchantillon:
Lisp info principalement de Practical Common Lisp .
Modifier, joué correctement jusqu'à 56 caractères
Cette version fonctionne plutôt différemment. Au lieu de lire une ligne et de la convertir, il appelle le lecteur lisp pour interpréter l'entrée comme une expression s lisp, tente de l'utiliser comme un nombre, et si des erreurs sont produites les ignore produisant nil pour alimenter la chaîne de format conditionnelle. C'est peut-être la première fois que j'ai vu de lisp produire un programme vraiment laconique ... Fun!
(read)
Appelle le lecteur / analyseur lisp pour lire une expression à partir de l'entrée standard et la convertir en un objet approprié(floor)
tente de convertir n'importe quel type numérique en entier inférieur le plus proche, les types non numériques provoquent une erreur(ignore-errors ...)
fait ce qu'il dit sur l'étain, il attrape et ignore toutes les erreurs dans l'expression incluse, renvoyant nil pour alimenter la branche NaN de la chaîne de formatagela source
PHP,
327310308 octetsprend le nombre comme paramètre, fonctionne pour 0 <= n <= 12999
panne
la source
SAS, 70 caractères
Les instructions
window
etdisplay
ouvrent l'invite de commande SAS. L'entrée pourn
va sur la ligne 1. Cela profite du format SASwords.
qui imprime le nombre sous la forme d'un mot ou d'une série de mots avec "et", "" et "-" selon le cas.la source
PHP
777 caractères
C'est certainement une tentative terrible, mais vous ne pouvez pas m'accuser de tirer parti des lacunes, et c'est un chiffre très chanceux. Merci à ProgramFOX pour l'astuce.
Longue main
la source
array('zero','one','two')
.['zero','one','two']
(php 5.4+). Et si cela ne vous dérange pasE_NOTICE
,[zero,one,two]
cela fonctionnerait aussi.Python 2.x - 378
Dérivée de la réponse de Fireflys, bien qu'en changeant
P
pour inclure des millions ou des milliards de milliards, etc., elle pourrait être récursivement utilisée pour n'importe quelle gamme de nombres positifs. Cela prend également en charge des valeurs jusqu'à 999 999Exemple de test (l'entrée est
<<<
, la sortie est>>>
):Bien que, si quelqu'un peut expliquer cet étrange problème de "dépassement de mémoire tampon" que j'ai, ce serait exagéré ...
la source
print divmod(-2,1000) #-> (-1, 998)
-1*1000
et un "reste" de998
.SmileBASIC,
365trois cent quarante-sept octetsIl y a un espace de fin si les un ou deux derniers chiffres sont 0.
la source
MOO - 55 caractères
player:tell($string_utils:english_number(read(player)))
Ou, si je n'ai pas besoin d'imprimer sur "stdout" - 42 caractères:
$string_utils:english_number(read(player))
Remarque: ce code n'imprime aucune invite sur la sortie standard et s'imprime
zero
au lieu deNaN
lorsque l'entrée n'est pas un nombre.En prime, ce code peut gérer n'importe quel nombre avec les limites de la langue moo (
2147483647
--2147483648
).la source
Wolfram Language
2740 octetsFaisant usage de la fonction native,
IntegerName
,Ce qui précède invite l'utilisateur à entrer ses informations. La présente implémentation renvoie "NaN" si l'utilisateur entre autre chose qu'un entier.
Quelques exemples (avec entrées prédéfinies) :
la source
Python 2 , 333 octets
Essayez-le en ligne!
C'est bon pour 1 à 999 999 inclus.
la source
Pyth,
239242 octetsL'entrée est un entier dans la plage [0-999,999]. Essayez-le en ligne ici . Explication en attente.
Version précédente, opération très similaire, mais ne prend pas en charge 0:
Explication de la version précédente:
la source