Défi :
Pi est censé être infini. Cela signifie que chaque nombre est contenu dans la partie décimale de pi. Votre tâche sera de prendre un entier positif en entrée et de retourner la position de ce nombre en chiffres pi en sortie.
Par exemple, si l'entrée est 59
, nous retournerons4
Voici pourquoi: nous allons chercher le nombre 59
dans les chiffres de pi
3.14159265...
^^
La valeur commence au 4ème chiffre, donc la sortie sera 4
.
Quelques autres exemples:
input : 1 output : 1
input : 65 output : 7
input : 93993 output : 42
input : 3 output : 9
Règles :
- Vous n'avez pas à gérer les chiffres qui n'existent pas dans les 200 premiers chiffres
- Les failles standard sont, comme toujours, interdites.
- Il s'agit de codegolf , donc le moins d'octets gagne.
n
'e index indexé 0 ? Ainsi, les cas de texte reviendraient0, 6, 41, 8
au lieu de1, 7, 42, 9
.Réponses:
Python 2,
69757167 octetsEnregistré 4 octets en raison de coinheringaahing caird .
Ne pas trouver
3
à la position zéro coût62 octets. L'entrée est donnée sous forme de chaîne.Essayez-le en ligne!
Version illimitée
Python 2, 224 octets
Utilisation d'un bout uni sans limite basé sur la même formule que celle utilisée ci-dessus.
Essayez-le en ligne!
Version plus rapide
Un robinet sans limite beaucoup plus rapide, basé sur Ramanujan # 39 .
Essayez-le en ligne!
la source
Husk , 5 octets
Essayez-le en ligne!
Explication
la source
€
) avec le premier élément (le 3 en tête) supprimé (t
) des chiffres de PI (İπ
), convertissez-le en base 10 (d
) et sortez en STDOUT (implicitement).İπ
est une liste infinie de chiffres, créée avec une source deExcel, 212 octets
Excel ne gère que 15 décimales, donc pi est simplement codé en dur. Cela devrait être une limite supérieure assez faible pour ce défi.
la source
CONCAT
une formule BBP pour calculer les 200 premiers chiffres de π-base16 et rechercher à la place en hexadécimal? (Je n'ai pas 365, donc je ne peux pas tester)CONCAT
,CODE
etMID
j'ai réduit la chaîne PI de 202 caractères (guillemetsCONCAT(CODE(MID(".ÜÁ£ÙÏ ¦®š«¦ ϲœÔ“ÇŧÝËŠº”ᱬ»—‡ÑÀ†œ¾ˆãÖœƒ°™¢•‘†ÏÒŽÐÖ³ Ҟ¯‰¦¬¼ß²º–ŸÈµ»¨Ñœ°‹‘‚ÔŠ›ÝÕ•Š·»À®–Þٶ݃Ñà",2*ROW(A1:A100)-1,2))-32)
Java 8,
615217202184182166165 165 octets (calculé999200 chiffres)1 indexé
Essayez-le en ligne.
La fonction intégrée de Java
Math.PI
a une précision de 15 valeurs décimales, comme beaucoup d'autres langages. Pour avoir plus de chiffres, vous devrez les calculer vous-même avecBigIntegers
ouBigDecimals
. Ce qui précède est une façon de le faire ..Peut - être que quelqu'un peut le golf ce ci - dessous 211 octets, lol ..EDIT: Création d' un port de @primo « s réponse Python 2 (assurez - vous de le upvote!), Si le calcul étant plus courte que dure -coded n'est plus si farfelu.
Juste 7 octets de plus pour jouer au golf pour qu'il soit plus court.-15 octets grâce à @Neil , ce qui le rend plus court que la réponse codée en dur ci-dessous!
-36 octets grâce à @primo .
-1 octet change
java.math.BigInteger t=null,T=t.TEN.pow(200),r=T;
àvar T=java.math.BigInteger.TEN.pow(200);var r=T;
, carvar
est 1 octet plus courte quenull
(dois - amour le nouveau Java 10).Explication:
Java 8, 211 octets (200 chiffres codés en dur)
0 indexé
Essayez-le en ligne.
la source
!p.equals(t.ONE)
peut-être? Aussi,indexOf(n,1)-1
je pense que ça marche. Ou enregistrez 2 octets et rendez-le indexé 1.indexOf
méthode qui saute les premiersm
caractères. TIL, merci!p
de un à chaque fois (for(int p=667;p-->1;)
), puis multiplierp
et diviser parp-~p
.r
peut littéralement être n'importe quoi, bien que les valeurs extrêmes nécessitent plus d'itérations. La meilleure graine (le moins d'itérations) est en fait4e200
.05AB1E , 6 octets
Essayez-le en ligne!
Comment?
la source
3
quand mêmeMATL ,
1615 octetsEssayez-le en ligne!
Explication
la source
RPaquet de numéros +, 52 octets
Essayez-le en ligne!
dropletPi
calcule les 200 premiers chiffres décimaux depi
mais inclut un3.
au début, donc nous supprimons cela avecsubstring
puis nous faisons correspondre avecregexec
, qui retourne l'index de la correspondance avec quelques métadonnées sur la correspondance.la source
regexpr(scan(),numbers::dropletPi(200))-2
- être ?"if"
?3.
(je suppose que nous traitons avec des entiers non réels en entrée). Les exemples de test fonctionnent avec cela.regexpr(3,numbers::dropletPi(200))-2
revient-1
quand il devrait revenir9
, essayez-leGelée , 23 octets
Un lien monadique acceptant une liste de caractères (l'entier à trouver) et renvoyant l'index. Fonctionne pour les entrées contenues dans les 252 premiers chiffres de la partie décimale de π.
Essayez-le en ligne!
Comment?
Cela utilise la formule de Leibniz pour π pour calculer les 253 premiers chiffres, y compris le premier
3
(plus quatre derniers chiffres incorrects). Le début3
est ensuite supprimé et l'index de l'entrée est trouvé:Si vous préférez une liste de chiffres comme entrée, utilisez
⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊw
(également 23), tandis que si vous voulez vraiment lui donner une utilisation entière⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊwD
(pour 24).la source
BASH (GNU / Linux),
756766 octets1 octet enregistré grâce à Sophia Lechner et 7 octets grâce au charlatan des vaches.
Il s'agit d'un script shell qui prend un seul argument, qui est le nombre. Testez avec
Ce script exécute d'abord un pipeline de trois commandes:
Le résultat de ce pipeline est affecté à la variable shell
a
, qui est ensuite renvoyée avec tout sauf le premier nombre supprimé:Malheureusement,
bc
a tendance à casser les lignes de sortie quand elles deviennent trop longues. Cela peut conduire à des résultats erronés si le numéro à trouver n'est pas sur la première ligne. Vous pouvez éviter cela en définissant la variable d'environnementBC_LINE_LENGTH
:Cela désactive complètement la fonction de saut de ligne.
Évidemment, les deux dernières commandes peuvent être omises si une autre sortie est tolérée.
Cela donne un nombre de 48 octets :
Avec la sortie résultante:
la source
-l
et<<<
bien.sed
(voir la deuxième partie de ma réponse). Néanmoins, la transformation en programme m'a donné 7 octets, alors merci! J'ai également remplacé letr
/head
combo par la magie variable du shell maintenant pour enregistrer un autre octet.JavaScript,
197187-10: Merci, Neil !
Prend une série d'entiers de base 36 à neuf chiffres, les convertit en base 10 et les concatène pour créer les 200 premiers chiffres de pi.
la source
x=>'50...'.replace(/.{9}/g,a=>parseInt(a,36)).search(x)+1
pour économiser 10 octets.Première fois faire du golf à code. Utilisez des délégués et des expressions lambda pour réduire les appels de fonction. V2 raccourcit le nom de la classe en un seul octet.
[C #],
361355 octetsVersion formatée:
Ideone!
NB: j'ai mal compté la première version. C'était 361 octets, pas 363 octets.
[C #], tio version 218 octets
Essayez-le en ligne!
la source
using System;f=>"14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196".IndexOf(f)+1;
une modification.Haskell ,
208120 octetsEssayez-le en ligne!
Un grand merci à Jonathan Allan pour ses suggestions!
Ancienne version (208 octets)
En fait, je ne sais pas comment fonctionne le code ci-dessus; Je l'ai repris de ce document et tout ce que j'ai implémenté était la partie recherche.
g(1,0,1,1,3,3)
renvoie les chiffres de pi et est étonnamment efficace (il calcule 10 000 chiffres sur tio.run en moins de 4s).L'entrée est une liste composée des chiffres du numéro à rechercher.
Essayez-le en ligne!
la source
l=4*sum[((-1)**x/(2*x+1))|x<-[0..1e6]]
, mais cela prend 5 secondes pour fonctionner et le 7ème chiffre est déjà faux. Il pourrait donc ne pas être possible de calculer 200 chiffres. C'était un exercice intéressant de toute façon, alors merci!g1_ref
dans la section Générateurs plus rapides et sans limites . Le code est en python.Haskell, 230 octets
Utiliser la paresse pour trouver le nombre n'importe où dans les chiffres infinis de pi, pas seulement dans les 200 premiers chiffres. Oh oui, et cela vous renvoie toutes les (infiniment nombreuses?) Instances du nombre, pas seulement la première.
Exemples du défi
Crédits
'p' est le flux infini de chiffres pi, extrait de https://rosettacode.org/wiki/Pi#Haskell
la source
SmileBASIC,
179164 octetsLes chiffres de pi sont codés en dur et regroupés dans les valeurs ascii des caractères. 14 ->
CHR$(14)
, 15 ->CHR$(15)
, 92 ->\
, 65 ->A
, 35 ->#
.La chaîne contient des caractères non imprimables, voici donc les octets écrits en hexadécimal:
0E 0F 5C 41 23 59 4F 20 26 2E 1A 2B 26 20 4F 32 1C 54 13 47 45 27 5D 4B 69 52 00 61 31 2C 3B 17 00 4E 10 28 3E 56 14 59 62 3E 50 03 30 19 03 2A 75 00 43 62 15 30 00 56 33 20 52 1E 42 2F 00 5D 54 2E 00 5F 32 3A 16 1F 48 35 3B 28 51 1C 30 6F 4A 32 1C 29 00 1B 00 13 26 34 6E 37 3B 40 2E 16 5E 59 36 5D 00 26 13 06
En décimal, vous pouvez voir les chiffres de pi:
14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 50 28 84 19 71 69 39 93 75 105 82 0 97 49 44 59 23 0 78 16 40 62 86 20 89 98 62 80 3 48 25 3 42 117 0 67 98 21 48 0 86 51 32 82 30 66 47 0 93 84 46 0 95 50 58 22 31 72 53 59 40 81 28 48 111 74 50 28 41 0 27 0 19 38 52 110 55 59 64 46 22 94 89 54 93 0 38 19 6
la source
Rubis ,
3735 octetsEssayez-le en ligne!
Rien de spécial, juste pour présenter la bibliothèque intégrée. La sortie est indexée 0. La chaîne Pi est formatée en tant que
0.31415...e1
, nous devons donc supprimer les 3 premiers caractères. lee1
partie à la fin ne fait pas vraiment de mal, mais elle est également supprimée, car nous devons de toute façon fournir une valeur de fin de plage (ou de longueur de tranche).la source
Fusain ,
2715 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Fonctionne jusqu'à près de 1000 chiffres. Explication:
la source
Japt ,
186177 octetsPuisque Japt partage la contrainte Pi à 15 chiffres et le shoco de Javascript , l'encodage utilisé par Japt ne code pas les nombres, certains manigances sont nécessaires pour la compression.
En bref, le début est la chaîne ci-dessous sous forme codée:
C'est une chaîne où se trouve chaque lettre
'm' + corresponding digit of pi
. J'ai testé l'alphabet entier et cette lettre donne la meilleure compression de quelques octets.Les backticks indiquent à Japt de décoder la chaîne. Le reste est assez simple:
Génère un index basé sur 0 du fragment correspondant.
Rasé encore deux octets grâce à Oliver .
Essayez-le en ligne!
la source
£X
par®
et}
avecÃ
AWK -M,
131 119117 117 octetsUtilise l'
-M
indicateur pour les calculs de précision arbitraires. Ajoutép=k=0
(5 octets) au lien TIO pour permettre l'entrée multi-ligneEssayez-le en ligne!
Explication:
la source
sprintf
à obtenir les décimales. L'utilisationCONVFMT
est définitivement plus propre.-M
drapeau"Gelée , 24 octets
Essayez-le en ligne!
Utilisez une formule semblable à Machin , spécifiquement 1/4 pi == tan -1 (1/2) + tan -1 (1/3).Use the formula pi/2 == 1 + 1/3 × (1 + 2/5 × (1 + 3/7 × (1 + 4/9 × ( ... ))))
la source
ØP
in M?floor
. Mind if I use that to post as answer in M?Python 2
239238229214 bytes-9 bytes due to @primo
Uses the Chudnovsky-Ramanujan algorithm to find the first
1 million digits50000 digits of π (change10**10**5
to10**10**6
for more, but it takes ages to run) and then searches them for the desired string.la source
n=10**10**5
takes about 10s).10**10**6
takes about 7 minutes on my machine.. To be fair,10**10**5
gives the first 50000 digits, so I guess it's not that bad either :)gmpy2
, butbigfloat
saves a dozen or so bytes. The assignment ofk
can be merged withk=b=0
if you movek+=1
to the start of the iteration.-(6*k-5)*(2*k-1)*(6*k-1)
can be written more succinctly ask*(k*(108-72*k)-46)+5
. If you declare Python 2, the//
integer divisions can be replaced by/
, and also parentheses aren't necessary forprint
. Space can also be removed inimport*
. Only validates to 50000 digits, btw.n
insqrt(10005*n)
seems to be the problem; it's moving the decimal point to 50000th place. In case you're interested, here's my own Chudnovsky implementation: Try it online!Visual Basic - 114 Bytes
Okay, first submission. Go easy on me!
Feedback welcome!
I haven't restricted to the first 256 parts of PI as the question says "You don't have to", not "You shouldn't" Hope I'm doing this right :)
la source
Javascript 217 bytes (200 hardcoded)
la source
PHP, 27 bytes
Not a very serieus answer, it requires a change in the php.ini settings as pi() defaults to 14 digits, not 200, but for once the PHP solution is fairly elegant:
la source
precision
tag in php.ini only alters the display precision, and doesn't actually increase the precision of defined constants. witnessJulia 0.6, 53 bytes
Set the precision for BigFloats high enough, then convert
pi
to a string and search. Precision of9^6
handles 159980 digits.Try it online!
la source
J, 25 Bytes
Try it online!
0-Indexed
Takes input as a string, +2 Bytes (
":
) if that's not allowed.Explanation eventually.
la source
Perl 5 with
-MMath::BigFloat+bpi
and-n
, 20 bytesTry it online!
I'm not sure where usage of
$>
stands, since it's theEFFECTIVE_USER_ID
which is not portable, but on TIO this is 1000 and satisfies our requirement, for -1 byte vs.200
.la source
Husk, 5 bytes
Try it online!
la source