Une représentation en double précision d'une décimale ne peut garantir qu'une précision de 15 décimales, donc pi est approximé comme:
3.141592653589793
Vous pouvez voir que le chiffre 3
est en position 1, 10, 16
, le chiffre 1
est en position, 2, 4
etc.
Défi
Votre tâche consiste à créer un programme ou une fonction qui crée un double aléatoire entre 0 et 1 et mappe les valeurs de ce nombre sur la valeur de pi. Pour ce faire, placez les différents chiffres dans les nombres aléatoires à la position que le chiffre a dans pi. Si le chiffre n'est pas trouvé dans pi, vous le sauterez, et chaque chiffre dans pi qui n'est pas dans le nombre aléatoire sera représenté par un x
. Chaque valeur ne peut être utilisée qu'une seule fois, en commençant par la gauche.
Quelques exemples le rendront probablement plus clair. Dans les exemples suivants, le premier nombre est pi, le second est le nombre aléatoire et le dernier est la sortie souhaitée.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Règles:
- La fonction ne doit prendre aucune entrée (une exception possible est expliquée au point 3)
- La sortie doit être constituée uniquement de la chaîne de sortie, avec une nouvelle ligne facultative (un seul espace de fin est également accepté)
- Si votre programme n'a pas de valeur Pi intégrée et / ou de RNG, vous pouvez coder en dur Pi et prendre le nombre aléatoire en entrée. Vous ne pouvez pas coder en dur le nombre aléatoire ou prendre Pi comme entrée.
- La valeur codée en dur pour Pi et les 15 chiffres aléatoires (vous pouvez ignorer
0.
car vous savez que ce sera entre 0 et 1) seront inclus dans le nombre d'octets. - Si votre langue n'a pas la précision requise, vous pouvez utiliser moins de précision sous les restrictions suivantes
- Les chiffres de Pi doivent être précis jusqu'à la précision que vous avez
- Vous ne pouvez pas produire plus de valeurs que ce qui est garanti, c'est-à-dire que vous ne pouvez pas produire 15 chiffres si la précision ne permet que 8 décimales précises.
- La valeur codée en dur de Pi comptera comme 16 octets (vous n'avez pas besoin du point décimal), même si votre programme ne prend en charge que 8 chiffres.
- La valeur d'entrée pour le nombre aléatoire comptera comme 15 octets (vous n'avez pas besoin
0.
. C'est parce que les langues avec une faible précision ne devraient pas avoir un avantage injuste. - Le programme doit prendre en charge une précision de 5 décimales (au moins).
- Modifier: Pour valider la réponse: Le nombre aléatoire doit être imprimé d'une manière ou d'une autre, mais cette opération ne doit pas être incluse dans le nombre d'octets. Ainsi, par exemple, s'il est possible d'insérer un
print r
à la fin du script, cette partie n'augmentera pas le score. - Vous ne pouvez pas soustraire les octets s'il fait partie d'une autre opération nécessaire. C'est à dire si le code est
print pi, r
, alors vous ne pouvez que soustraire, r
. - Si vous devez insérer des pièces à plusieurs endroits dans le code, veuillez inclure les deux versions (celle qui imprime le nombre aléatoire et celle qui ne le fait pas avec un commentaire tel que:
_p
et_oNo
sont nécessaires pour imprimer le nombre aléatoire._p
Fait xxx et_oNo
fait yyy._p
et_oNo
ne sera pas inclus dans le nombre d'octets.
Le code le plus court en octets gagne.
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
ou0 <= random <= 1
?Réponses:
Pyth, 25 octets
Essayez-le en ligne: démonstration ou test montrant le nombre aléatoire
Explication:
la source
LabVIEW, 53 primitives LabVIEW
Je fais correspondre des chaînes et je mets le nombre dans une chaîne x.xxx "vide" et je supprime le nombre de pi pour qu'il ne s'affiche plus.
le nombre aléatoire et les caractères simples ici sont un peu visibles, est-ce bien ou dois-je refaire l'enregistrement?
la source
Mathematica, 105 ou 147 caractères
Si un nombre aléatoire " entre 0 et 1" signifie
0 <= random <= 1
, c'est-à-dire inclut 0 et 1.(105 caractères)
Sinon, prendre un nombre aléatoire " entre 0 et 1" pour signifier
0 < random < 1
.Boucle pour obtenir 15 entiers aléatoires, pas tous nuls. Sélectionnez le complément de 0 à 9, c'est-à-dire les nombres de 0 à 9 qui ne figurent pas dans la liste aléatoire. Convertissez ces entiers en chaînes et remplacez les caractères correspondants dans une chaîne pi.
(147 caractères)
Chiffres aléatoires: -
la source
True
est1>0
,RandomInteger
peuvent utiliser la notation infixe{0,9}~RandomInteger~15
. Vous pouvez probablement enregistrer certains octets en donnant uner
certaine valeur et en utilisant la condition de auWhile
lieu d'utiliserBreak.
Alors, vousFor
pouvez enregistrer un autre octetWhile
. Bien que je ne vois pas du tout pourquoi vous avez besoin de la boucle si vous supposez plutôt le nombre aléatoire dans la plage[0,1)
.1>0
:-)JavaScript (ES6),
8987 octetsExplication
Edit: la chaîne aléatoire n'est plus tronquée comme le précise l'affiche.
Boucle dans chaque chiffre de pi et supprime le chiffre du nombre aléatoire s'il a été trouvé, sinon remplace le chiffre dans pi par
x
.Tester
Le test génère également le nombre aléatoire.
Afficher l'extrait de code
la source
Math.random()
produit un certain nombre de plages de[0,1)
sorte qu'il pourrait0
mais jamais1
. L'OP n'a pas précisé si la gamme était inclusive ou exclusive, j'ai donc supposé que tout ce qui était raisonnable était bien. C'est également la plage utilisée par les autres réponses. Cependant, vous m'avez fait savoir que si c'est exactement0
cela échouera car l'.
in pi ne sera pas mis en correspondance et deviendrax
. Cela a 1 chance sur 2 ^ 53 de se produire, mais j'ai quand même décidé de le corriger.[0,1]
est fine (tout comme(0,1)
).CJam,
4846423836 octetsTestez-le ici.
Et voici la version qui imprime à la fois π et le nombre aléatoire:
Testez-le ici.
Je ne tronque pas le nombre aléatoire à 15 décimales, comme le précise l'OP dans un commentaire.
Explication
L'idée est de transformer chaque caractère de la représentation sous forme de chaîne de π en une paire de ce caractère et
x
. Pour chaque caractère du nombre aléatoire, nous échangeons la première paire qui commence par ce caractère. À la fin, nous sortons le deuxième caractère de chaque paire.la source
Lua,
231230octetsExplications
Malheureusement, lua ne m'aide pas du tout ici. math.pi autour du dernier chiffre de pi il retourne:
Je dois tronquer ce nombre:
Le deuxième gros défaut pour faire ce défi était lua manque de string.replace (). Comme je fais cette action deux fois en utilisant
s:sub(1,l-1)..c..s:sub(l+1)
, je voulais faire une fonction anonyme, pensant que ce serait plus court. Ce n'est pas le cas, donc je l'ai gardé écrit deux fois.La raison pour laquelle je dois faire attention au point, c'est comment lua retourne sa position. Dans les expressions rationnelles, un point signifie "n'importe quel caractère", donc lorsque j'évalue le caractère
.
dans ma boucle, il correspond au premier caractère:Vous pouvez tester lua en ligne . Comme je n'amorce pas le PRNG, voici un code vous permettant d'exécuter plusieurs tests tout en surveillant les valeurs.
la source
Python 2.7,
117110 octetsTesté sur la dernière application QPython Android, mais devrait fonctionner n'importe où.
Edit 1: changé
str(pi)
en backticks.Pour tester:
la source
Python, 147 octets
Assez explicite: la fonction lambda convertit float en liste; nous parcourons ensuite la liste pi en essayant de supprimer chaque chiffre de la liste aléatoire. Si nous le pouvons, tant mieux, joignez-le à la réponse; sinon, ajoutez un «x» à la place.
la source
str(t)
vous donne seulement 11 chiffres de précision à partir det
,repr(t)
vous donne toust
les 15 chiffres de.Perl, 70 octets
Avec commentaires:
Cette version affichera pi, le nombre aléatoire et le résultat:
Exemple de sortie:
J'espère que ça va:
9
) est exact.la source