C'était amusant! Cependant, avec seulement trois chiffres, le plaisir était trop tôt. Ce défi est similaire, mais nous continuerons à nous amuser.
Le défi
Imprimez autant de chiffres du nombre d' or Golden que possible. Le Golden Ratio est défini comme le nombre qui satisfait φ = (φ + 1) / φ et les 100 premiers chiffres sont donnés par:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Ce défi ne concerne pas l' informatique! Il s'agit d'imprimer autant de chiffres que possible sans utiliser aucune méthode pour le faire deux fois. Alors, trouvez autant de façons créatives d'obtenir vos chiffres que vous le pouvez!
Restrictions
En soi, imprimer les chiffres de φ serait un peu trop simple, voici donc les règles:
- Vous devez construire le nombre dans l'ordre de gauche à droite , soit en l'imprimant pièce par pièce, soit en construisant une chaîne de gauche à droite et en l'imprimant à la fin - vous pouvez même générer un tableau de caractères numériques, puis le joindre et imprimez-le, tant que vous le faites dans l'ordre. Dans les règles suivantes, "print" et "output" peuvent faire référence à n'importe lequel de ces processus (par exemple, si vous créez une chaîne et que la chaîne contient
1.6
qui compte comme ayant1.6
déjà été imprimée). - Pour votre code, vous obtenez un budget de 15 caractères par chiffre . La période ne compte pas dans ce budget, mais doit également être imprimée. Notez que la restriction concerne uniquement la taille totale du code: vous pouvez utiliser plus de 15 caractères pour n'importe quel chiffre tant que vous n'en utilisez pas plus en moyenne. En fait, vous pouvez accumuler une "dette" en caractères et "la rembourser" plus tard. Par exemple, pour imprimer,
1.618
vous avez 60 caractères. - Les inclusions / importations de la bibliothèque standard ne comptent pas dans la taille du code. Mais vous ne pouvez pas donner ces alias raccourcis gratuitement!
- Vous ne devez pas utiliser le chiffre que vous générez actuellement, ni aucun que vous avez déjà imprimé. Par exemple, il ne
1
peut apparaître nulle part dans votre code source, car il s'agit du tout premier chiffre. Le code qui émet le8
en1.618
peut utiliser tout ou partie des chiffres[0234579]
, mais aucun d' entre[168]
. À cette fin, tous les littéraux équivalents à un seul chiffre sont traités comme ce chiffre . Donc, si votre langue peut représenter9
car'\t'
vous n'êtes pas autorisé à l'utiliser n'importe où, où vous ne pouvez pas utiliser un à la9
place. - Vous ne devez pas produire plusieurs chiffres à la fois. Il devrait être possible de diviser clairement votre code en morceaux qui génèrent un chiffre à la fois.
Vous ne devez pas se référer à tout intégré dans lequel vous avez la fonction, opérateur / chaîne mathématique / booléenne / bit-wise, variable ou constante utilisée dans le code qui a généré un chiffre plus tôt. Les exceptions sont la conversion d'entier en chaîne, la concaténation de chaîne et les fonctions d'impression dont vous pourriez avoir besoin pour chaque chiffre. Notez que peu importe le nom auquel vous faites référence à n'importe quel intégré: simplement parce que vous alias un intégré
PI
aux deuxp
etq
ne signifie pas que vous pouvez l'utiliserp
uneq
fois. De même, vous êtes autorisé à utiliser un nom deux fois s'il fait référence à deux éléments intégrés différents, comme une chaînelength
et un tableaulength
.Si votre langage de programmation n'a pas de fonctions, utilisez votre meilleur jugement sur ce que serait l'équivalent - par exemple pour les scripts bash, invoquer d'autres programmes devrait suivre les règles imposées aux fonctions
- Votre soumission doit être rédigée dans une seule langue. Il n'est donc pas nécessaire d'exécuter l'interpréteur d'une autre langue pour accéder également aux fonctions intégrées de cette langue.
Implications
Les points suivants sont tous impliqués par les règles ci-dessus, mais je les ajoute ici pour éviter les questions qui se sont déjà posées dans le bac à sable:
- Vous n'êtes pas autorisé à écraser des parties de votre sortie en imprimant des espaces arrière (généralement
'\b'
) entre les deux. - Les boucles qui génèrent / produisent plusieurs chiffres sont interdites. (Les boucles qui calculent un seul chiffre sont bien, cependant.)
- Il
(1 + √5)/2
est interdit d' utiliser une version obscurcie ou de diviser des nombres de Fibonacci pour obtenir plus d'un chiffre. - Vous ne pouvez pas précalculer les 10 chiffres et les stocker dans 10 variables, puis vous y référer, car ces références de variables ne génèrent pas le chiffre - le code qui remplit la variable le fait, c'est donc une violation de la règle 6.
- En fait, vous ne pouvez pas réutiliser les résultats précédents (ou intermédiaires), car cela signifierait que deux chiffres partageraient le code pour être généré .
- Sinon, vous pouvez utiliser n'importe quel moyen (qui ne doit pas être purement mathématique) pour générer les chiffres. (Et vous devriez!)
- En fait, il n'est pas nécessaire de calculer quoi que ce soit, si vous pouvez extraire les chiffres corrects de nombreux endroits différents en utilisant votre bibliothèque standard.
- Vous pouvez utiliser un opérateur plusieurs fois tout en générant un seul chiffre, il
2+2+2
est donc juste de générer le premier6
(bien qu'il soit peu probable qu'il soit le plus court). - Vous pouvez utiliser n'importe quel littéral aussi souvent que vous le souhaitez, car ce ne sont pas des constantes intégrées. Donc, tant que vous n'avez pas à imprimer
5
, vous pouvez autant de5
s dans votre code que vous le souhaitez. - Vous ne pouvez pas coder en dur la sortie, car cela impliquerait d'utiliser les chiffres que vous sortez.
En bref: n'utilisez aucune méthode de génération de chiffres deux fois et n'utilisez pas le chiffre que vous êtes en train de produire ou que vous avez déjà imprimé.
Si vous repérez une faille qui vous permet d'obtenir un score (quasi-) infini, veuillez ne pas gâcher le défi en l'exploitant, mais faites-le moi savoir afin que je puisse voir si la faille peut être corrigée sans rien casser.
Notation
Le programme qui imprime correctement le plus grand nombre de chiffres gagne. En cas d'égalité, le code le plus court rompt l'égalité.
Veuillez ajouter une version commentée non golfée qui identifie quelle partie de votre code génère quel chiffre.
PS: Si quelqu'un bat les 100 chiffres ci-dessus, en voici d'autres .
x = (x+1)/x
(ou x^2 = x+1
) (ou x^2-x+1
).