Hintergrund:
Pi ( π
) ist eine transzendentale Zahl und hat daher eine nicht terminierende Dezimaldarstellung. Ebenso wird die Darstellung nicht beendet, wenn sie in eine andere Ganzzahlbasis geschrieben wird. Aber was ist, wenn wir es in Base geschrieben haben π
?
Dezimalstellen stehen für Potenzen von 10, also:
π = 3.14… = (3 * 10^0) + (1 * 10^-1) + (4 * 10^-2) + …
In der Basis π
würden die Ziffern also Potenzen darstellen von π
:
π = 10 = (1 * π^1) + (0 * π^0)
In dieser neuen Basis haben Ganzzahlen jetzt nicht terminierende Darstellungen. Aus 10 Dezimalstellen wird nun Folgendes:
10 => 100.01022… = (1 * π^2) + (0 * π^1) + (0 * π^0) + (0 * π^-1) + (1 * π^-2) + …
Beachten Sie, dass in der Basis π
die verwendeten Ziffern 0,1,2,3 sind, da dies die Ziffern sind, die kleiner als sind π
.
Herausforderung:
Bei einer nicht negativen Ganzzahl x
entweder:
Ausgabe (ohne anzuhalten) seiner Darstellung in der Basis
π
. Wenn die Zahl eine endliche Darstellung hat (0, 1, 2, 3), wird das Programm möglicherweise angehalten, anstatt unendliche Nullen zu drucken.Nehmen Sie eine beliebig große Ganzzahl
n
und geben Sie die erstenn
Ziffern vonx
in base ausπ
.
Regeln:
- Da eine Zahl mehrere mögliche Darstellungen hat, müssen Sie diejenige ausgeben, die am größten erscheint (normalisiert). Genau wie
1.0 = 0.9999…
bei Dezimalstellen besteht dieses Problem auch in dieser Basis. In der Basisπ
ist man noch1.0
, könnte aber auch so geschrieben werden wie0.3011…
zum Beispiel. Ebenso ist zehn100.01022…
, könnte aber auch als30.121…
oder geschrieben werden23.202…
. - Dies ist Code-Golf, also gewinnen die wenigsten Bytes. Programm oder Funktion.
- Keine Einbauten ( ich sehe dich an , Mathematica )
Ergebnisse:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 10.220122021121110301000010110010010230011111021101…
5 = 11.220122021121110301000010110010010230011111021101…
6 = 12.220122021121110301000010110010010230011111021101…
7 = 20.202112002100000030020121222100030110023011000212…
8 = 21.202112002100000030020121222100030110023011000212…
9 = 22.202112002100000030020121222100030110023011000212…
10 = 100.01022122221121122001111210201201022120211001112…
42 = 1101.0102020121020101001210220211111200202102010100…
1337 = 1102021.0222210102022212121030030010230102200221212…
9999 = 100120030.02001010222211020202010210021200221221010…
Erste 10.000 Zehnerstellen in Basis Pi
Nachprüfung:
Sie können jede gewünschte Ausgabe mit dem Mathematica-Code hier überprüfen . Der erste Parameter ist x
, der dritte ist n
. Wenn die Zeit n
abgelaufen ist , wählen Sie eine kleine aus und lassen Sie sie laufen. Klicken Sie dann auf "In Code öffnen", um ein neues Mathematica-Arbeitsblatt mit dem Programm zu öffnen. Dort gibt es keine zeitliche Begrenzung.
Konvertieren Sie die resultierende Ausgabe zu einer Reihe hier .
Verbunden:
quelle
n
, würde ich vermuten, dass Pi mindestensn
Ziffern mit Genauigkeit haben muss.Antworten:
Julia 0,6 , 81 Bytes
Druckt Ziffern aus (und die., Die mich 14 Byte gekostet haben), bis der Stapel bei TIO mit etwa 22.000 Ziffern überläuft. Wenn ich die Eingabe als übergeben
BigFloat
darf, kann ich 5 Bytes schneiden. Verwendet die eingebaute willkürliche Genauigkeit konstantπ
. Aber es ist ein bisschen cooler als das, es ist tatsächlich eine adaptive Präzisionskonstante,π*1.0
eine 64-Bit-Gleitkommazahlπ*big(1.0)
(auch bekannt als multipliziert mit einer höheren Präzisionszahl), dieπ
bei jeder eingestellten Genauigkeit angegeben wird.Probieren Sie es online aus!
quelle
Python 3 ,
471317310 Bytes7 Bytes dank Caird Coinheringaahing.
Sicher gibt es Golf, die ich verpasst habe. Fühlen Sie sich frei, sie in den Kommentaren darauf hinzuweisen.
Probieren Sie es online aus!
Ungolfed Version:
Probieren Sie es online aus!
quelle
`i`
.Ruby
-rbigdecimal/math
,11110397 BytesProbieren Sie es online aus!
Nimmt die Eingabenummer als
x
und die gewünschte Genauigkeit alsn
. Ausgaben durch Drucken. Verwendet die integrierte BigDecimal-Bibliothek für einen beliebigen PI-Wert.quelle
Python 3 + Sympy, 144 Bytes
Probieren Sie es online aus!
Eigentlich ziemlich langsam.
quelle