Je n'ai pas vérifié le bac à sable avant de publier ce défi - il semble que ce défi ait été proposé par Cᴏɴᴏʀ O'Bʀɪᴇɴ .
Étant donné une entrée entière, écrivez un programme qui imprime l'énigme "quatre est un nombre magique"
- Quatre est le nombre magique
- Cinq est quatre et quatre est le nombre magique
- Six est trois et trois est cinq et cinq est quatre et quatre est le nombre magique
- Onze est six et six est trois et trois est cinq et cinq est quatre et quatre est le nombre magique
- Cinq cent est onze et onze est six et six est trois et trois est cinq et cinq est quatre et quatre est le nombre magique
Si vous connaissez déjà l'énigme, ou si vous êtes trop paresseux pour la résoudre, impatient de savoir ce qu'est l'énigme, voici une explication
Le chiffre suivant est le nombre de lettres du chiffre précédent. Ainsi, par exemple, cinq a quatre lettres, donc le chiffre suivant est quatre .
six a trois lettres, donc le chiffre suivant est 3 , et trois a cinq lettres, donc le chiffre suivant est 5 , et cinq a quatre lettres, donc le chiffre suivant est 4
La raison pour laquelle l'énigme se termine à quatre est parce que quatre a quatre lettres et quatre est quatre et quatre est quatre et quatre est quatre ... (quatre est le nombre magique)
Cas de test
0 =>
Zero is four and four is the magic number
1 =>
One is three and three is five and five is four and four is the magic number
2 =>
Two is three and three is five and five is four and four is the magic number
3 =>
Three is five and five is four and four is the magic number
4 =>
Four is the magic number
5 =>
Five is four and four is the magic number
6 =>
Six is three and three is five and five is four and four is the magic number
7 =>
Seven is five and five is four and four is the magic number
8 =>
Eight is five and five is four and four is the magic number
9 =>
Nine is four and four is the magic number
10 =>
Ten is three and three is five and five is four and four is the magic number
17 =>
Seventeen is nine and nine is four and four is the magic number
100 =>
One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number
Règles
- L'entrée peut être extraite
STDIN
ou comme argument d'une fonction - L'entrée sera un nombre positif compris entre 0 et 999 999
- L'entrée ne contiendra que des nombres (elle suivra l'expression régulière
^[0-9]+$
) - L'entrée peut être considérée comme un entier ou une chaîne
- Lorsqu'ils sont convertis en chaîne de mots, les espaces et les tirets ne doivent pas être inclus dans le décompte (100 [cent] correspond à 10 caractères, pas 11. 1 742 [mille sept cent quarante-deux] correspond à 31 caractères, pas 36)
- Une fois converti en chaîne, 100 doit être Cent, pas Cent ou Cent, 1000 doit être Mille, pas Mille ou Mille.
- Une fois converti en une chaîne 142 devrait être cent quarante deux, pas cent et quarante deux
- La sortie ne respecte pas la casse et doit suivre le format " N est K et K est M et M est ... et quatre est le nombre magique" (sauf si l'entrée est 4, auquel cas la sortie doit simplement être "quatre est le nombre magique ")
- La sortie peut utiliser des nombres au lieu de lettres ("5 est 4 et 4 est le nombre magique" au lieu de "cinq est quatre et quatre est le nombre magique") tant que votre programme est toujours cohérent
- La sortie peut être soit la valeur de retour d'une fonction, soit imprimée sur
STDOUT
- Des échappatoires standard s'appliquent
- Il s'agit de code-golf , donc le programme le plus court en octets l'emporte. Bonne chance!
Prime
-30 octets si le programme fonctionne lorsque l'entrée est comprise entre -999 999 et 999 999.
Les nombres négatifs, lorsqu'ils sont convertis en mots, ont juste "négatif" devant eux. Par exemple, -4
"Negative Four", Negative Four est douze et douze est six et six est trois et trois est cinq et cinq est quatre et quatre est le nombre magique
-150 octets si le programme n'utilise aucune fonction intégrée pour générer la représentation sous forme de chaîne du nombre
Classement
Il s'agit d'un extrait de pile qui génère à la fois un classement et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre en utilisant le modèle Markdown suivant
## Language Name, N bytes
Où N est la taille, en octets, de votre soumission
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, en supprimant les anciens scores ou en incluant des indicateurs dans le nombre d'octets), assurez-vous simplement que le score réel est le dernier numéro de votre en-tête
## Language Name, <s>K</s> X + 2 = N bytes
Réponses:
Bash + utilitaires communs (y compris les jeux bsd), 123 - 30 = 93 octets
Heureusement, la sortie de l' utilitaire bsd-games
number
est presque exactement ce dont nous avons besoin. Les numéros de sortie sont tous écrits numériquement et non pas en mots selon le 8ème point:la source
C,
263261 octets - 180 = 81Inspiré par la réponse de Cole Cameron . Je pensais que je pourrais faire mieux sans la définition de macro. Bien que j'ai finalement réussi, il a fallu un peu de compression pour y parvenir!
Il nécessite un jeu de caractères hôte avec des lettres consécutives (donc ASCII est correct, mais EBCDIC ne fonctionnera pas). C'est pour la paire de tables de recherche. J'ai choisi
j
le caractère zéro et j'ai profité d'avoir besoin de deux recherches pour pouvoir soustraire l'une de l'autre plutôt que d'avoir à soustraire mon zéro des deux.Version commentée:
Il y a une extension évidente pour supporter des millions, en remplaçant
f(n/1000,8)
parf(n/1000000,7)+f(n/1000%1000,8)
.Sortie test
la source
Mathematica, 156-30 = 126 octets
Je suis simplement surpris que cela utilise des cordes et ne soit pas ridiculement long.
la source
Swift 2 ,
408419 - 30 = 389 octetsJe serais en mesure de me débarrasser de 176 octets si Swift n'était pas aussi verbeux avec des expressions régulières (suppression des tirets et des espaces) * lance un regard noir à Apple *
Cela peut être testé sur swiftstub.com, ici
J'ai couru un peu pour la boucle, et il s'avère que
100003
le nombre compris entre 0 et 999999 a le résultat de chaîne le plus long, qui a 6 itérations, et estNon golfé
la source
NSStringCompareOptions.RegularExpressionSearch
Et je pensais que JSString.fromCharCode
était verbeux. : Pstring.replace
. Swift:String.stringByReplacingOccurrencesOfString
Haskell, 285 - 180 = 105 octets
En fait, il n'y a pas du tout intégré pour afficher le nombre. Je n'étais toujours pas satisfait du score. N'hésitez pas à commenter. Je vais expérimenter plus loin, cependant. Le score est toujours meilleur que le score de Swift
usage
Explication.
m
est assez banal, cependant, cec
n'est pas le cas.c
est la fonction pour compter le nombre de caractères du nom anglais du numéro.la source
C, 268 - 180 = 88 octets
Essayez-le ici .
Non golfé
la source
Java, 800 - 150 = 650 octets
De-golfé
la source
==0
à<1
. Donc:return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;
( - 10 octets )QC, 265-30-150 = 85 octets
Suite de tests
Non golfé:
la source
JavaScript, 382 - 150 - 30 = 202 octets
L'entrée est donnée comme paramètre à l'expression de fonction immédiatement invoquée.
Entrée de test:
De-golfé:
la source
Python 641-150 = 501 octets
Au moins, ce n'est pas plus long que Java! Il est basé sur cela, sauf en utilisant des chaînes.
EDIT : J'ai oublié 0 et que je dois dire "5 est 4", ne pas passer à "4 est le nombre magique" - qui a ajouté un peu au score.
Essayez-le ici!
la source
i(5)
imprime4 is the magic number
, au lieu de5 is 4 and 4 is the magic number
.Moo,
182176/192188 octets - 30 = 146/158Version 188 octets:
Version dépendante de l'implémentation de 176 octets :
Les deux sont des fonctions.
la source
PHP, 168-30 = 138 octets
la source