Herausforderung :
Pi soll unendlich sein. Das bedeutet, dass jede Zahl im Dezimalteil von pi enthalten ist. Ihre Aufgabe wird es sein, bei der Eingabe eine positive Ganzzahl zu verwenden und die Position dieser Zahl in pi-Ziffern bei der Ausgabe zurückzugeben.
Wenn die Eingabe beispielsweise lautet 59
, werden wir zurückkehren4
Hier ist der Grund: Wir werden nach der Zahl 59
in den Ziffern von pi suchen
3.14159265...
^^
Der Wert beginnt bei der 4. Stelle, die Ausgabe erfolgt also 4
.
Einige andere Beispiele:
input : 1 output : 1
input : 65 output : 7
input : 93993 output : 42
input : 3 output : 9
n
Index 0 ausgeben ? So würden die Textfälle0, 6, 41, 8
anstelle von zurückkehren1, 7, 42, 9
.Antworten:
Python 2,
69757167 Bytes4 Bytes wegen Caird Coinheringaahing gespeichert .
Nicht
3
auf Position Null zu finden kostet62 Bytes. Die Eingabe erfolgt als String.Probieren Sie es online!
Ungebundene Version
Python 2, 224 Bytes
Verwendung eines unbegrenzten Zapfens, der auf der oben verwendeten Formel basiert.
Probieren Sie es online!
Schnellere Version
Ein viel schnellerer, unbegrenzter Zapfen, basierend auf Ramanujan Nr. 39 .
Probieren Sie es online!
quelle
Schale , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
€
) mit dem ersten Punkt (die führenden 3) entfernt (t
) der Ziffern von PI (İπ
), wandelt es in Basis-10 (d
) und die Ausgabe an STDOUT (implizit).İπ
ist eine unendliche Liste von Ziffern, mit unbeschränktem Zapfen geschaffen QuelleExcel, 212 Bytes
Excel verarbeitet nur 15 Dezimalstellen, daher ist pi nur hartcodiert. Dies sollte eine ziemlich schwache Obergrenze für diese Herausforderung sein.
quelle
CONCAT
und eine BBP Formel , die ersten 200 Stellen von π-Base16 zu berechnen und stattdessen in Hexadezimal suchen? (Ich habe kein 365, kann also nicht testen)CONCAT
,CODE
undMID
ich reduzierte das PI - String von 202 Zeichen (inkl Anführungszeichen) bis 143:CONCAT(CODE(MID(".ÜÁ£ÙÏ ¦®š«¦ ϲœÔ“ÇŧÝËŠº”ᱬ»—‡ÑÀ†œ¾ˆãÖœƒ°™¢•‘†ÏÒŽÐÖ³ Ҟ¯‰¦¬¼ß²º–ŸÈµ»¨Ñœ°‹‘‚ÔŠ›ÝÕ•Š·»À®–Þٶ݃Ñà",2*ROW(A1:A100)-1,2))-32)
Java 8,
615217202184182166165 Bytes (berechnet999200 Stellen)1-indiziert
Probieren Sie es online aus.
Math.PI
Wie viele andere Sprachen hat auch Java eine Genauigkeit von 15 Dezimalwerten. Um mehr Ziffern zu haben, müssen Sie diese mitBigIntegers
oder selbst berechnenBigDecimals
. Das oben genannte ist eine Möglichkeit , es zu tun ..Vielleicht Golf jemand kann dies unter 211 Bytes, lol ..EDIT: einen Hafen Erstellt @primo ‚s Python 2 Antwort (stellen Sie sicher , ihn upvote!), So die Berechnung kürzer ist als hart -coded ist nicht mehr so weit hergeholt.
Nur noch 7 Bytes zum Golfen, damit es kürzer wird.-15 Bytes dank @Neil , was es kürzer macht als die hartcodierte Antwort unten!
-36 Bytes dank @primo .
-1 Byte wechselt
java.math.BigInteger t=null,T=t.TEN.pow(200),r=T;
zuvar T=java.math.BigInteger.TEN.pow(200);var r=T;
, weilvar
1 Byte kürzer ist alsnull
(ich muss das neue Java 10 lieben).Erläuterung:
Java 8, 211 Bytes (200 Ziffern fest codiert)
0-indiziert
Probieren Sie es online aus.
quelle
!p.equals(t.ONE)
vielleicht? AuchindexOf(n,1)-1
funktioniert denke ich. Oder speichere 2 Bytes und mache es 1-indiziert.indexOf
Methode gibt, die die erstenm
Zeichen überspringt . Bis, danke!p
jedes Mal um eins dekrementieren (for(int p=667;p-->1;)
) und dann mit multiplizierenp
und durch dividierenp-~p
.r
kann buchstäblich alles sein, obwohl extreme Werte mehr Iterationen erfordern. Der beste Startwert (wenige Iterationen) ist tatsächlich4e200
.05AB1E , 6 Bytes
Probieren Sie es online!
Wie?
quelle
3
trotzdem fehlMATL ,
1615 BytesProbieren Sie es online!
Erläuterung
quelle
R + Nummernpaket, 52 Bytes
Probieren Sie es online!
dropletPi
Berechnet die ersten 200 Dezimalstellen vonpi
, enthält aber3.
am Anfang ein, so dass wir das mit entfernensubstring
und dann mit abgleichenregexec
, wodurch der Index der Übereinstimmung zusammen mit einigen Metadaten über die Übereinstimmung zurückgegeben wird.quelle
regexpr(scan(),numbers::dropletPi(200))-2
?"if"
?3.
(ich nehme an, wir beschäftigen uns mit Ganzzahlen, die keine reellen Eingaben sind). Die Testbeispiele arbeiten damit.regexpr(3,numbers::dropletPi(200))-2
kehrt zurück,-1
wenn es zurückkehren sollte9
, versuchen Sie esJelly , 23 Bytes
Ein monadischer Link, der eine Liste von Zeichen (die zu suchende Ganzzahl) akzeptiert und den Index zurückgibt. Funktioniert für Eingaben innerhalb der ersten 252 Stellen des Dezimalteils von π.
Probieren Sie es online!
Wie?
Hierbei werden nach der Leibniz-Formel für π die ersten 253 Stellen einschließlich der führenden
3
(plus vier nachgestellten falschen Stellen) berechnet . Der führende Punkt3
wird dann gelöscht und der Index der Eingabe gefunden:Wenn Sie eine Liste von Ziffern als Eingabe bevorzugen, verwenden Sie
⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊw
(auch 23), während Sie der Liste eine ganzzahlige Verwendung geben möchten⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊwD
(für 24).quelle
BASH (GNU / Linux),
756766 BytesDank Sophia Lechner 1 Byte und dank Cows Quack 7 Byte eingespart.
Dies ist ein Shell-Skript, das ein einziges Argument verwendet, nämlich die Zahl. Testen Sie mit
Dieses Skript führt zunächst eine Pipeline mit drei Befehlen aus:
Das Ergebnis dieser Pipeline wird der Shell-Variablen zugewiesen
a
, die dann mit Ausnahme der ersten entfernten Zahl als Echo ausgegeben wird:Leider
bc
hat die Tendenz, Ausgangsleitungen zu unterbrechen, wenn sie zu lang werden. Dies kann zu falschen Ergebnissen führen, wenn die zu findende Nummer nicht in der ersten Zeile steht. Sie können dies vermeiden, indem Sie die Umgebungsvariable festlegenBC_LINE_LENGTH
:Dadurch wird die Zeilenumbruchfunktion vollständig deaktiviert.
Offensichtlich können die letzten beiden Befehle weggelassen werden, wenn eine andere Ausgabe toleriert wird.
Dies ergibt eine Anzahl von 48 Bytes :
Mit der resultierenden Ausgabe:
quelle
-l
und nicht<<<
.sed
(siehe den zweiten Teil meiner Antwort). Das Umwandeln in ein Programm gab mir trotzdem 7 Bytes, also danke dafür! Ich habe auch dietr
/head
combo durch Shell Variable Magic ersetzt, um ein weiteres Byte zu speichern.JavaScript
197,187-10: Danke, Neil !
Nimmt eine Reihe von neunstelligen Ganzzahlen zur Basis 36, konvertiert sie zur Basis 10 und verknüpft sie, um die ersten 200 Stellen von pi zu erstellen.
quelle
x=>'50...'.replace(/.{9}/g,a=>parseInt(a,36)).search(x)+1
10 Byte zu speichern.Zum ersten Mal Code Golf spielen. Verwenden Sie Delegaten und Lambda-Ausdrücke, um die Funktionsaufrufe zu reduzieren. V2 verkürzt den Klassennamen in ein einzelnes Byte.
[C #],
361355 BytesFormatierte Version:
Ideone!
Ich habe die erste Version falsch gezählt. Es waren 361 Bytes, nicht 363 Bytes.
[C #], Version 218 Bytes
Probieren Sie es online!
quelle
using System;f=>"14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196".IndexOf(f)+1;
als redaktion vor .Haskell ,
208,120 BytesProbieren Sie es online!
Vielen Dank an Jonathan Allan für seine Vorschläge!
Alte Version (208 Bytes)
Ich weiß eigentlich nicht, wie der obige Code funktioniert; Ich habe es diesem Artikel entnommen und alles, was ich implementiert habe, war das Nachschlagen.
g(1,0,1,1,3,3)
gibt die Stellen von pi zurück und ist überraschend effizient (es berechnet 10 000 Stellen bei tio.run in weniger als 4s).Die Eingabe ist eine Liste, die aus den Ziffern der zu findenden Nummer besteht.
Probieren Sie es online!
quelle
l=4*sum[((-1)**x/(2*x+1))|x<-[0..1e6]]
, aber das dauert 5s und die 7. Ziffer ist bereits falsch. Daher ist es möglicherweise nicht möglich, 200 Stellen zu berechnen. Es war trotzdem eine interessante Übung, also danke!g1_ref
im Abschnitt Schnellere, unbegrenzte Generatoren . Der Code ist Python.Haskell, 230 Bytes
Verwenden Sie Faulheit, um die Zahl irgendwo in den unendlichen Stellen von pi zu finden, nicht nur in den ersten 200 Stellen. Oh ja, und es gibt Ihnen jede (unendlich viele?) Instanz (en) der Nummer zurück, nicht nur die erste.
Beispiele aus der Herausforderung
Credits
'p' ist der unendliche Strom von pi-Ziffern, entnommen aus https://rosettacode.org/wiki/Pi#Haskell
quelle
SmileBASIC,
179164 BytesZiffern von pi werden fest codiert und in die ASCII-Werte von Zeichen gepackt. 14 ->
CHR$(14)
, 15 ->CHR$(15)
, 92 ->\
, 65 ->A
, 35 ->#
.Die Zeichenfolge enthält nicht druckbare Zeichen. Die folgenden Bytes sind hexadezimal geschrieben:
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
In Dezimalschrift sehen Sie die Ziffern von 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
quelle
Rubin ,
37-35BytesProbieren Sie es online!
Nichts Besonderes, nur die eingebaute Bibliothek. Der Ausgang ist 0-indiziert. Die Pi-Zeichenfolge ist wie folgt formatiert:
0.31415...e1
Die ersten drei Zeichen müssen entfernt werden. Dere1
Teil am Ende schadet nicht wirklich, wird aber ebenfalls entfernt, da wir ohnehin einen Wert für das Bereichsende (oder die Slice-Länge) angeben müssen.quelle
Kohle ,
2715 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Funktioniert bis zu fast 1000 Stellen. Erläuterung:
quelle
Japt ,
186177 BytesDa Japt die 15-stellige Pi-Einschränkung und das Shoco von Javascript verwendet, codiert die von Japt verwendete Codierung keine Zahlen. Für die Komprimierung sind einige Spielereien erforderlich.
Kurz erklärt, der Anfang ist die folgende Zeichenfolge in codierter Form:
Welches ist eine Zeichenfolge, in der jeder Buchstabe ist
'm' + corresponding digit of pi
. Ich habe das gesamte Alphabet getestet und dieser Buchstabe bietet die beste Komprimierung um einige Bytes.Backticks weisen Japt an, den String zu dekodieren. Der Rest ist ziemlich einfach:
Gibt den 0-basierten Index des übereinstimmenden Fragments aus.
Noch zwei Bytes weniger dank Oliver .
Probieren Sie es online!
quelle
£X
mit®
und}
mit ersetzenÃ
AWK- M,
131 119117 BytesVerwendet
-M
Flag für willkürliche Präzisionsberechnungen. Demp=k=0
TIO-Link wurden (5 Byte) hinzugefügt , um eine mehrzeilige Eingabe zu ermöglichenProbieren Sie es online!
Erläuterung:
quelle
sprintf
, die Dezimalstellen zu ermitteln. VerwendenCONVFMT
ist auf jeden Fall sauberer.-M
Flagge"Gelee , 24 Bytes
Probieren Sie es online!
Verwenden Sie eine Machin-ähnliche Formel , insbesondere 1/4 pi == tan -1 (1/2) + tan -1 (1/3).Verwenden Sie die Formel pi / 2 == 1 + 1/3 × (1 + 2/5 × (1 + 3/7 × (1 + 4/9 × (...)))
quelle
ØP
M zu erhalten?floor
. Stört es mich, wenn ich das benutze, um als Antwort in M zu posten?Python 2
239238229214 Bytes-9 Bytes aufgrund von @primo
Verwendet den Chudnovsky-Ramanujan - Algorithmus und finden Sie die ersten
1 Million Ziffern50000 Stellen von π (Änderung10**10**5
an10**10**6
für mehr, aber es dauert ewig zu laufen) , und dann sucht sie für die gewünschte Zeichenfolge.quelle
n=10**10**5
dauert ungefähr 10s).10**10**6
dauert ungefähr 7 Minuten auf meinem Computer. Um fair zu sein,10**10**5
gibt es die ersten 50000 Ziffern, also denke ich, ist es auch nicht so schlimm :)gmpy2
,bigfloat
spart aber etwa ein Dutzend Bytes. Die Zuordnung vonk
kann zusammengeführt werden,k=b=0
wenn Siek+=1
zum Start der Iteration wechseln .-(6*k-5)*(2*k-1)*(6*k-1)
kann prägnanter als geschrieben werdenk*(k*(108-72*k)-46)+5
. Wenn Sie Python 2 deklarieren, können die//
Ganzzahlunterteilungen durch ersetzt werden/
, und auch Klammern sind für nicht erforderlichprint
. Leerzeichen können auch in entfernt werdenimport*
. Gültig nur für 50000 Stellen, übrigens.n
insqrt(10005*n)
scheint das Problem zu sein; Es verschiebt den Dezimalpunkt auf die 50000. Stelle. Falls Sie interessiert sind, hier ist meine eigene Chudnovsky-Implementierung: Probieren Sie es online aus!Visual Basic - 114 Bytes
Okay, erste Vorlage. Sei nicht zu streng mit mir!
Feedback erwünscht!
Ich habe mich nicht auf die ersten 256 Teile von PI beschränkt, da die Frage "Das musst du nicht" und nicht "Das solltest du nicht" lautet. Hoffe, ich mache das richtig :)
quelle
Javascript 217 Bytes (200 fest codiert)
quelle
PHP, 27 Bytes
Keine sehr serielle Antwort, es erfordert eine Änderung der php.ini-Einstellungen, da pi () standardmäßig 14 Stellen hat, nicht 200, aber ausnahmsweise ist die PHP-Lösung ziemlich elegant:
quelle
precision
Tag in der php.ini ändert nur die Anzeigegenauigkeit und erhöht die Genauigkeit definierter Konstanten nicht. ZeugeJulia 0,6 , 53 Bytes
Stellen Sie die Genauigkeit für BigFloats hoch genug ein, konvertieren Sie dann
pi
in einen String und suchen Sie. Präzision der9^6
Griffe 159980 Stellen.Probieren Sie es online!
quelle
J, 25 Bytes
Probieren Sie es online!
0-indiziert
Übernimmt die Eingabe als Zeichenfolge, +2 Bytes (
":
), wenn dies nicht zulässig ist.Erklärung schließlich.
quelle
Perl 5 mit
-MMath::BigFloat+bpi
und-n
, 20 BytesProbieren Sie es online!
Ich bin nicht sicher , wo der Gebrauch von
$>
Ständen, da es das ist ,EFFECTIVE_USER_ID
die nicht tragbar ist, sondern auf TIO ist dies 1000 und erfüllt unsere Anforderung, für -1 Byte vs.200
.quelle
Schale , 5 Bytes
Probieren Sie es online!
quelle