Jeder weiß , pi die mathematische Konstante, das Verhältnis eines Kreisumfangs zu seinem Durchmesser.
3.14159265358979323846264338327950288419716939937510...
Sie wissen wahrscheinlich auch E die mathematische Konstante, die Basis eines natürlichen Logarithmus.
2.71828182845904523536028747135266249775724709369996...
Aber ... kennst du Kuchen ? Es ist eine der wichtigsten Konstanten (für mich). Es sind die Ziffern von pi und e verschachtelt.
32.1741185298216852385485997094352233854366206248373...
Als dezimale Erweiterung:
3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2...
Dies ist die OEIS-Sequenz A001355 .
STICHWORT: nonn, Base, stumm , einfach
Es ist eine sehr dumme Sequenz.
Herausforderung
Schreiben Sie ein Programm / eine Funktion , die eine nicht negative ganze Zahl n annimmt und die n-te Stelle des Kreises ausgibt .
Spezifikationen
- Standard I / O - Regeln gelten .
- Standardlücken sind verboten .
- Ihre Lösung muss für mindestens 50 Stellen jeder Konstante funktionieren, was bedeutet, dass sie für mindestens 100 Terme der Sequenz funktionieren sollte (bitte versuchen Sie nicht, P hart zu codieren).
- Die Ausgabe für 2 oder 3 ist kein Dezimalpunkt .
- Ihre Lösung kann entweder 0-indiziert oder 1-indiziert sein. Bitte geben Sie an, welche.
- Bei dieser Herausforderung geht es nicht darum, den kürzesten Ansatz in allen Sprachen zu finden, sondern darum, den kürzesten Ansatz in jeder Sprache zu finden .
- Ihr Code wird in Bytes bewertet , normalerweise in der Codierung UTF-8, sofern nicht anders angegeben.
- Eingebaute Funktionen, die diese Sequenz berechnen, sind zulässig, es wird jedoch empfohlen, eine Lösung zu verwenden, die nicht auf einer eingebauten basiert.
- Erklärungen, auch für "praktische" Sprachen, sind erwünscht .
Testfälle
Diese sind 0-indiziert.
Input Output
1 2
2 1
11 8
14 6
21 4
24 9
31 5
In ein paar besseren Formaten:
1 2 11 14 21 24 31
1, 2, 11, 14, 21, 24, 31
2 3 12 15 22 25 32
2, 3, 12, 15, 22, 25, 32
dumb
bedeutet das Schlüsselwort einfach uninteressant ohne spezielle Eigenschaften.pei
nichtpie
Antworten:
Mathematica, 50 Bytes
1-indiziert
quelle
Riffle
, aber meine Lösung ist um ein Byte kürzer:RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]
&Taxi , 749 Bytes
Probieren Sie es online!
Der Versuch, pi oder e programmatisch in Taxi zu berechnen, wäre ein Albtraum, obwohl ich mir sicher bin, dass dies möglich ist. Daher ist es viel kürzer, nur die ersten 100 Stellen in der Sequenz fest zu codieren. Es fühlt sich ziemlich billig an, aber es ist definitiv der kürzeste Taxicode, der der Herausforderung gerecht wird.
Die Sequenz wird als Zeichenfolge fest codiert, aufgenommen
n
, dann nachn
unten durchlaufen und jedes Mal das erste Zeichen in der Zeichenfolge entfernt. Wannn=0
wird das erste Zeichen ausgegeben. Dies ist einindexiert.Nicht golfen / formatiert:
quelle
Haskell,
154147146 Byte, KEINE HARDCODIERUNG ODER VERWENDUNG VON EINGEBAUTEN KONSTANTENDiese Lösung berechnet e und pi mit unendlichen Reihen und speichert sie in Festkommazahlen mit willkürlicher Genauigkeit (Haskells eingebauter
Integer
Typ und seineRational
Erweiterung).Ungolfed:
0-indiziert. Genau für Eingabe 0-99, ungenau für Eingabe 100-101, sonst außerhalb der Grenzen.
Erläuterung:
Berechnet pi mit dieser unendlichen Reihe . Berechnet e mit der klassischen inversen Fakultätsreihe . Theoretisch sind dies nicht die idealen Formeln, da sie in Bezug auf den Bytecount nicht sehr knapp sind, aber ich konnte feststellen, dass sie als einzige schnell genug konvergierten, um die Überprüfung der Genauigkeit durchführbar zu machen (andere Summen erforderten Hunderttausende, wenn nicht Millionen von Begriffen). In der Golfversion wird e mit einer viel höheren Genauigkeit berechnet, als zur Minimierung des Bytecount erforderlich ist. Beide Konstanten werden mit etwas mehr Stellen als erforderlich berechnet, um Rundungsfehler zu vermeiden (die für das unangenehme Ende falscher Werte verantwortlich sind).
Die Konstanten werden als ganzzahlige Verhältnisse (
Rational
) mit beliebiger Genauigkeit berechnet und dann mit 10 ^ 50 multipliziert, sodass alle erforderlichen Ziffern erhalten bleiben, wenn das Verhältnis in eine ganzzahlige Zahl (Integer
) mit beliebiger Genauigkeit konvertiert wird . Dies vermeidet auch das Problem des Vermeidens des Dezimalpunkts in den Zeichenfolgendarstellungen der Zahlen, aus denen die Funktion alternativ Zeichen zeichnet.quelle
Python 2 , 88 Bytes
-4 Bytes dank der Grundkonvertierungsidee von @EriktheOutgolfer .
Probieren Sie es online!
Python 2 + Sympy , 92 Bytes
0-indiziert. Vielen Dank an Rod, der mich daran erinnert hat, zu wechseln
from sympy import*
, was ich früher vergessen habe.Probieren Sie es online!
Python 2 , 114 Bytes
Ich denke ehrlich, die kürzeste Lösung ist die Hardcodierung, da Python keine nützlichen integrierten Funktionen hat.Probieren Sie es online!
Python 2 , 114 Bytes
Äquivalente Lösung von @totallyhuman .
Probieren Sie es online!
quelle
05AB1E , 10 Bytes
Erläuterung:
0-indiziert.
Probieren Sie es online!
quelle
žt
damals noch keine unendliche Liste, weshalb Okx die ersten 100 Stellen von e in seinem Programm verwendet. Das Ändern auf die neue Version von 05AB1E (wobei sowohl pi als auch e eine unendliche Liste sind) würde in Ihrer aktuellen Version immer noch nicht funktionieren, da der zip PaareJ
erzeugen würde und das oin diese Paare anstelle von allem verbinden würde. 9 Bytes sind immer noch möglich , durch den AustauschJ
mitS
jedoch in der neuen Version, woS
es eine abgeflachte Liste von Zeichen / Ziffern machtPython 3 ,
8380 Bytes0-indiziert.
Probieren Sie es online!
Es gibt einige nicht druckbare Zeichen, die in einem Browser nicht richtig angezeigt werden.
Dies funktioniert, indem das Tupel
(32, 17, 41, 18, 52, ...)
aus den ASCII-Codes der Zeichen im fest codierten Bytestring erstellt wird. Das Tupel wird in die Zeichenfolge konvertiert'3217411852...'
, aus der wir die richtige Ziffer auswählen.quelle
Mehrsprachig, 108 Bytes
Arbeitet in:
Ich denke, dies ist die kürzeste Zeit, die Sie in C # machen können, da es 252 Bytes sind, um die N-te Dezimalstelle von pi zu finden .
quelle
Java 8,
420417413404 (berechnet) &115110 (fest codiert) BytesBerechnet (
420417413404 ):Hardcoded: ( 115 Bytes ):
0-indiziert
-9 und -5 Bytes dank @Nevay .
Du hast danach gefragt ..;)
Java ist eingebaut
Math.PI
undMath.E
es handelt sich um Double-Werte, die eine maximale Genauigkeit von nur 16 haben. Daher müssen wir beide Werte selbst mitjava.math.BigInteger
und / oder berechnenjava.math.BigDecimal
.Da ich PI bereits in einer anderen Challenge berechnet habe , habe ich denselben Code mit verwendet
BigInteger
. Der Algorithmus für Eulers Nummer verwendetBigDecimal
jedoch.Die resultierenden
p
unde
sind daher:31415...
und2.718...
.Könnte es wahrscheinlich nur mit Golf spielen
BigDecimal
, gab aber einige falsche Antworten für PI, so dass ich jetzt beideBigDecimal
und benutzeBigInteger
.Erläuterung:
Probieren Sie es hier aus.
Beweisen Sie, dass das Ergebnis für die erforderlichen 100 Elemente korrekt ist.
quelle
(d+=2)
zu++d
undreturn p%10+1
nur wechseln müssen, damit es für diese Frage richtig funktioniertreturn p%10
.You've asked for it.. ;)
Hey, ich mag dein erstes besser. Ich habe weitaus mehr hardcodierte Antworten erhalten, als ich erwartet hatte ...charAt(n+1>>1)
und 5 Bytes in Ihrer fest codierten Version mit einer Methodenreferenz speichern"..."::charAt
.Seed , 6015 Bytes
Der Same entspricht meiner Befunge-Antwort. Wie ich dort erwähnte, funktioniert das Befunge-Programm, das diese Ausgaben ausgeben, nicht mit TIO, da TIO einen Zeilenumbruch von 80 Zeichen zu haben scheint.
quelle
Excel, 113 Bytes
1-indiziert
PI()
ist nur bis zu 15 Stellen genau. Ähnliches gilt fürEXP(1)
.6042-Byte-Lösung, die für die Eingabe funktioniert<=30
(-18 Byte dank @Adam)quelle
if(...)
Aussage:=MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1)
.Can't die Unschärfen erhält herumpi()
undexp()
, obwohl05AB1E , 13 Bytes
Probieren Sie es online!
Ähnlich wie die Antwort von Magic, aber irgendwie anders.
Erläuterung:
quelle
Python 2 + SymPy ,
7063 BytesProbieren Sie es online!
quelle
Japt , 55 Bytes
Online testen! Enthält einige nicht druckbare Elemente.
Ersetzt jedes Zeichen in der Zeichenfolge durch seinen Zeichencode und gibt die Ziffer am richtigen Index zurück. Die Zeichenfolge wurde von diesem Programm generiert:
Online testen!
quelle
Seed,
58525794Basierend auf der Antwort von TehPers Befunge.
quelle
Malbolge Unshackled (20-Trit-Rotationsvariante), 3,64E6 Bytes
Die Größe dieser Antwort überschreitet die maximal verfügbare Programmgröße (eh), sodass sich der Code in meinem GitHub-Repository befindet (Hinweis: Kopieren Sie den Code nicht mit STRG + A und STRG + C, sondern klicken Sie mit der rechten Maustaste und klicken Sie auf "Zielelement speichern unter". .. ").
Wie führe ich das aus?
Dies könnte ein schwieriger Teil sein, da naive Haskell-Interpreter eine Ewigkeit brauchen, um dies auszuführen. TIO hat einen anständigen Malbogle Unshackled-Interpreter, aber leider kann ich ihn nicht verwenden (Einschränkungen).
Das Beste, was ich finden konnte, ist die Variante mit fester Rotationsbreite von 20 Trit, die sehr gut funktioniert und (fast ) sofort berechnet .
Um den Dolmetscher ein bisschen schneller zu machen, habe ich alle Checks von Matthias Lutters Malbolge Unshackled-Dolmetscher entfernt.
quelle
05AB1E , 14 Bytes
Probieren Sie es online!
Diese Antwort ist 0-indiziert.
quelle
'.K
zuþ
und entfernen Sie das<
. (Ich bin mir nicht sicher, warum Sie das überhaupt angegeben haben<
, da Ihre Antwort mit 0 indexiert ist. Ihre aktuelle Antwort ist mit 1 indexiert<
.),
da die Zip dies implizit tut, aber ich sehe, es ist fast genau das gleiche wie die andere 10-Byte-Antwort ..Python 3 + SymPy , 109 Bytes
0-indiziert Probieren Sie es online!
Schlage die Hardcodierung um 5 Bytes !! Könnte aber wohl besser sein. Aber wenn ich hartcodiere, fühle ich mich gut :)
quelle
Pyth, 35 Bytes
Testsuite
Da in Pyth keine pi- und e-Konstanten mit willkürlicher Genauigkeit eingebaut sind, berechne ich sie direkt.
Pi berechnen:
Dies verwendet die folgende Wiederholung fortgesetzt Fraktion zu berechnen pi:
2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))
. Ich habe es von einer anderen PPCG Antwort . Es wird in Gleichungen 23-25 hier .Ich berechne es von innen nach außen und lasse alle Terme über 1024 hinaus unberücksichtigt, da die späteren Terme nur geringe Auswirkungen auf die Zahl haben. Außerdem behalte ich eine Genauigkeit von 99 Stellen bei, um sicherzustellen, dass die ersten 50 korrekt sind.
Berechnung e:
Ich summiere die Kehrwerte der ersten 1024 Zahlen mit einer Genauigkeit von 99 Stellen.
Dann konvertiere ich beide Zahlen in Strings, verschachtele sie und indexiere sie.
quelle
MATLAB, 93 Bytes
Eine einfache Erklärung ist, dass dies zuerst e und pi in Zeichenfolgen konvertiert und dann eine for-Schleife durchläuft, die die Ziffern verkettet. Hier ist c pie, p ist pi und e ist e.
Ich habe dies zur besseren Lesbarkeit auch in mehrere Zeilen unterteilt, aber der eigentliche Code befindet sich in einer Zeile mit minimalem Abstand.
quelle
n
dienth
Ziffer der Tortenfolge ergibt . Sie können Ihr Bytecount auch reduzieren, indem Sie Ihre Variablennamen auf ein einzelnes Zeichen reduziereninput('')
anstelle voninput('n')
Julia, 63 Bytes
1-indiziert
Konvertiert pi oder e in eine Zeichenfolge, entfernt die Dezimalstelle und ruft dann die entsprechende Ziffer auf. Gibt eine Zeichendarstellung der Ziffer zurück.
quelle
C # + BigDecimal ,
377372 Bytes5 Bytes dank @Kevin Cruijssen gespeichert.
Kein TIO-Link wegen der externen Bibliothek, leider hat C # keine eingebaute
BigDecimal
Klasse, daher muss diese externe Klasse dies tun. Möglicherweise ist Golfspielen noch möglich, aber momentan ist keine Zeit.Voll / Formatierte Version:
quelle
x[j++]/e
beic=(x[j++]/e)*n
-2 Bytes weglassen. Ich denke auch, dass Sie beide+""
bei den beiden return-Anweisungen entfernen und einen int anstelle von string zurückgeben und dann-48
bei der zweiten return-Anweisung hinzufügen können , um char in int-Ausgabe umzuwandeln (für -1 Byte).Python 2 , 82 Bytes
Probieren Sie es online!
Enthält einige nicht druckbare ASCII-Zeichen. Flornquake sparte zwei Bytes.
quelle
lambda n:('%02d'%ord('...'[n/2]))[n%2]
, obwohl es wahrscheinlich etwas Besseres gibt.Neim , 45 Bytes
neim ist nicht für Dezimalzahlen gemacht
Probieren Sie es online!
quelle
Befunge , 105 Bytes
Funktioniert nicht mit TIO, da es aus irgendeinem Grund scheint, dass Zeilen intern mit 80 Zeichen umbrochen werden. Sie können bekommen sie , indem sie jede Ziffer in einer neuen Zeile auf TIO zu arbeiten, und die, die
&0g,@
nach dem3
in der ersten Zeile.quelle
JavaScript (ES6) + mathjs , 78 Bytes
Null indiziert und arbeitet bis zu 128 Nummern (max Eingabe von 127).
Testschnipsel
quelle
MATLAB (mit Symbolic Toolbox),
8982 BytesMithilfe der Symbolic Toolbox liefert diese Antwort eine Ausgabe, ohne die Werte von pi und e fest zu codieren.
Als Spaßbonus kann dieser Code als Eingabe entweder einen einzelnen Index oder ein Array von Indizes annehmen und gleichzeitig den Ausgabewert für alle angegebenen Indexwerte bereitstellen (z. B. wenn 1:10 angegeben wird, werden die ersten 10 Werte ausgegeben).
(Neue Zeilen für die Lesbarkeit hinzugefügt, für die Ausführung nicht erforderlich, daher nicht in der Byteanzahl enthalten)
Leider unterstützt die von TIO verwendete Octave-Version keine symbolischen Eingaben für die
vpa
Funktion und kann daher bei TIO-Link nicht bereitgestellt werden.In MATLAB ist die Indizierung einer Funktion in den Rückgabevektor nicht wie bei Octave möglich. Dies bedeutet, dass es sich um ein vollständiges Programm und nicht nur um eine anonyme Funktion handelt. Das Programm fordert
n
während der Ausführung zur Eingabe auf - dies ist ein indizierter Wert, für den ein Element erforderlich ist. Am Ende des Programms wird der Wert implizit gedruckt.Für das Programm verwenden wir die
vpa
Funktion, die auf 51 Dezimalstellen den Wert vonpi
undexp(1)
(e) liefert . Dies geschieht symbolisch, um theoretisch eine unendliche Präzision zu ermöglichen. Erhöhen Sie zum Erweitern auf mehr als 100 Elemente einfach den Wert51
im Code, um den Bereich zu vergrößern.Einwickeln
vpa
inchar
(dhchar(vpa(...))
) ist notwendig , um die Ausgabe der Funktion in eine Zeichenfolge , anstatt einen symbolischen Wert zu konvertieren. Die resultierende Ausgabe ist die Zeichenfolge:Dies schließt sowohl e als auch pi mit 51 Dezimalstellen ein - genug, um 100 Stellen unserer Ausgabe zuzulassen (wir müssen etwas mehr dp als erforderlich tun, um das Ausdrucken gerundeter Werte zu vermeiden).
Um dieses Durcheinander zu erkennen, müssen wir zumindest die Dezimalstellen entfernen, damit beide Ziffernfolgen zusammenhängend sind. Ursprünglich habe ich einen einfachen Regex-Ersatz für alles verwendet, was keine Ziffer mit nichts ist. Ich kann jedoch 7 Bytes einsparen, indem ich nur den Dezimalpunkt mit dem folgenden Code entferne:
Die resultierende Zeichenfolge lautet jetzt:
Dies enthält alle Ziffern, die wir für pi- und e-Chunks in aufeinanderfolgenden Indizes benötigen.
Wir können dann den bereitgestellten Index so konvertieren, dass ungerade Zahlen auf den Pi-Chunk und gerade Zahlen auf den E-Chunk zugreifen.
Wenn Sie auf diesen (jene) Index (Indizes) in der obigen Zeichenfolge zugreifen, erhalten Sie die richtige Ausgabe.
quelle
Axiom, 148 Bytes
0-basiertes Array. Ergebnisse
quelle
Google Sheets, 47 Bytes
Anonyme Arbeitsblattfunktion, die Eingaben von der Zelle entgegennimmt
A1
und diese Ziffer von Pie an die aufrufende Zelle ausgibtHardcoded Version, 112 Bytes
Diese Version entspricht voll und ganz der Programmspezifikation, macht aber im Allgemeinen keinen Spaß.
Anonyme Arbeitsblattfunktion, die die n-te Ziffer in der 1-indizierten Liste des Kreises zurückgibt
quelle
BFASM , 142 Bytes
Nimmt Eingaben als ASCII-Zeichen, gibt Ausgaben in Form von Ziffern aus.
quelle
Brainfuck , 5971 Bytes
Direkte Übersetzung meiner anderen bfasm Antwort.
Probieren Sie es online!
quelle