Khinchin Konstante ist eine merkwürdige mathematische Konstante, die nach Wolfram MathWold , ist „notorisch schwierig zu hohen Genauigkeit zu berechnen“ .
Hier ist es zu 100 Stellen:
2.685452001065306445309714835481795693820382293994462953051152345557218859537152002801141174931847697 ...
Schreiben Sie ein Programm mit 64 Bytes oder weniger, das die Khinchin-Konstante mit der maximalen Anzahl korrekter Dezimalstellen ausgibt.
- Sie dürfen keine eingebauten Bibliothekskonstanten oder Funktionen verwenden, die in direktem Zusammenhang mit der Khinchin-Konstante stehen. (zB Math.Khinchin (Präzision) ist definitiv nicht erlaubt.)
- Sie können Mathematikbibliotheken verwenden, um Logarithmen, Summierungen usw. zu berechnen.
- Sie können Ihre Antwort ganz oder teilweise fest codieren.
- Ihr Programm muss eine endliche Ausgabe erzeugen und auf einem einigermaßen modernen Computer (wie den hier aufgeführten ) in weniger als einer Stunde ausgeführt werden .
- Sie müssen auf stdout ausgeben. Es erfolgt keine Eingabe.
- Sie können beliebige Zeichen verwenden, solange http://mothereff.in/byte-counter 64 Byte oder weniger registriert.
Wertung
Ihre Punktzahl ist die Anzahl der aufeinanderfolgenden Stellen in Khinchins Konstante, die Ihr Programm korrekt ausgibt, beginnend mit 2,68 ... Sie können falsche Stellen ausgeben, aber nur die letzte richtige Stelle wird für Ihre Punktzahl gezählt.
Zum Beispiel eine Ausgabe von
2.68545200 2 06530644530971483548179569382038229399446295305115234555721
würde 9 Punkte erzielen. Eine für jede der Ziffern, 2 6 8 5 4 5 2 0 0
aber nichts nach der 2 , die eine 1 sein sollte.
quelle
Antworten:
Ahorn, 200+
Der folgende Maple- Befehl berechnet die Khinchin-Konstante mit der angeforderten Genauigkeit (hier 200 Stellen):
Dieser Code sollte funktionieren, wenn Sie ihn in die grafische Oberfläche von Maple kopieren und einfügen. Das
ζ
dauert zwei Bytes in UTF-8 und die∞
drei für insgesamt 62 Bytes.Das Ausschreiben der ASCII-Versionen dieser Symbole, auch mit dem Trick der Verwendung
min()
anstelle voninfinity
, leider, bringt die Byteanzahl auf 66:Die Anzahl der berechneten Stellen kann einfach angepasst werden, indem Sie die Zahl in eckigen Klammern nach ändern
evalf
. Auf meinem ziemlich alten Computer scheinen 200 Stellen in ungefähr einer halben Stunde fertig zu sein; Ihr könnte zu mehr fähig sein. Beachten Sie, dass Maple das Ergebnis auf die angeforderte Genauigkeit rundet, anstatt es abzuschneiden, sodass die tatsächliche Anzahl der übereinstimmenden Stellen möglicherweise etwas geringer ist.Diese Methode zur Berechnung der Konstanten basiert auf der Formel (9) von der MathWorld-Seite , die dort an Gosper (1996, pers. Comm.) Zitiert wurde:
Dies war die effizienteste Methode, die ich (kaum) in 64 Bytes oder weniger komprimieren konnte.
quelle
CJam - 118
Versuchen Sie es unter http://cjam.aditsu.net/
Da stackexchange einige der Zeichen zerstört, ist hier ein Programm, das das obige Programm generiert. Führe es zuerst aus und dann die Ausgabe aus:
Erläuterung:
2
pushes 2'.
pushes Der Punkt"…"
ist eine Zeichenfolge, die die restlichen Ziffern in codierter Form enthält.128b
Die Zeichenfolge wird in eine Zahl umgewandelt, wobei die Zeichen als Ziffern in der Basis 128 behandelt werden (über ihren ASCII-Code).quelle
Kona 63
Einfache, fest codierte Antwort:
quelle
Haskell, 5
Nun, da niemand eine Lösung unter Verwendung der tatsächlichen Mathematik veröffentlicht hat, entschied ich, dass ich es tun würde, obwohl es nicht annähernd so nah ist wie die anderen Antworten.
Dies berechnet
2.6854453689859192
satte 5 Zeichen der Konstante. Wolfram hatte Recht, als sie sagten, es sei "schwierig, mit hoher Präzision zu rechnen".quelle
9
, aber mein Computer könnte das nicht verarbeiten, und selbst wenn dies möglich wäre, bin ich mir nicht sicher, ob es zu einer weiteren genauen Ziffer führen würde.2.685451312659854
: tio.run/##KypNqvz/P9vWkEvDUE/…Mathematica, 6
gibt
und verwendet nur 50 Bytes, so gibt es etwas Raum, um etwas besseres zu finden als
Pi
und einen größeren fortgesetzten Bruch zu verwenden, aber ich bin nicht sicher, ob es mit einer Laufzeit von einer Stunde viel besser wird. (Zumal die Suche nach einer besseren Kombination wahrscheinlich mehrere Tage dauern würde, wenn ich nur rohe Gewalt anwenden würde.)(Natürlich waren Sie klug genug, um zu verbieten
Khinchin~N~2000
, wo2000
Sie durch eine beliebige Zahl ersetzt werden könnten, die Ihnen innerhalb einer Stunde ein Ergebnis liefert;).quelle
wxMaxima 3
Eine tatsächlich berechnete Methode!
Nach ungefähr 25 Minuten kehrte es zurück
Jetzt verstehe ich, warum dies auf der Mathematica-Seite angegeben wurde. Ich habe 6 Charaktere zum Spielen, aber ich kann mir nicht vorstellen, 6 Nullen hinzuzufügen, die (a) in weniger als 60 Minuten ablaufen und (b) mir eine genauere Lösung bieten.
quelle
GNU BC , 5-stellig (54-Byte-Programm)
Ein Versuch, tatsächlich zu berechnen. GNU BC ist schrecklich langsam. Dies dauerte 53 Minuten auf einer Ubuntu 14.04-VM, die Mitte 2012 auf einem MacBook Pro Retina ausgeführt wurde. Seltsamerweise läuft es in der VM schneller als in OSX Bare Metal - vermutlich ist die GNU-Version besser für diese Aufgabe optimiert als die BSD-Version.
Ausgabe:
Hinweis:
bc -l
muss füre()
undl()
Funktionen verwendet werden (und Skala = 20 einstellen).quelle
CJam Gleitkommaberechnung - 6
Es passt in die ursprünglichen 32 Bytes :)
Läuft es mit dem Java Interpreter unter Verwendung von Java 8, gibt es dies nach ungefähr einer Minute auf meinem Laptop aus:
Der Online-Dolmetscher würde wahrscheinlich zu lange dauern.
quelle
Python,
6466Ausgänge:
quelle
print
, um ein anderes Zeichen einzupressen.Rubin - 73
Leider können Sie mit
to_i
Ruby nur bis zur Basis 36 konvertieren :was zurückkehrt
quelle
RPL / 2, 7 berechnete Stellen, 61 Bytes
kehrt in einer Minute auf meinem alten (Intel Core2) Laptop 2.68545210493822 zurück.
Ich kenne keine Zeta-Funktion in RPL / 2, deshalb habe ich die Integration verwendet (Formel 15 von der Mathworld-Seite). Im Prinzip könnte man die Genauigkeit verbessern, indem man 1e-9 und 1e-7 durch eine kleinere Zahl ersetzt, aber mir fehlte anscheinend der Speicher dafür.
Natürlich greift man auf das unendliche Produkt zurück, um diesen Punkt zu lösen, wie es aussieht
und soll funktionieren wie auf einem HP RPL calc, aber es stellt sich heraus, dass es zwei Größenordnungen langsamer ist (auf dem Laptop, habe ich nicht auf meinem HP ausprobiert!) und gibt nur 6 Ziffern.
Der Integrationsalgorithmus in RPL / 2 leistet also wirklich gute Arbeit.
quelle
Viele Antwortsprachen, 61
Entschuldigung, habe keine bessere Lösung gefunden.
Die Regeln besagen nicht, dass der korrekten Zahlenfolge keine Anführungszeichen vorangestellt werden können, daher verwende ich diese. Wenn Sie dies beispielsweise in einer JS-Konsole ausführen, erhalten Sie dieselbe Zeichenfolge, einschließlich der Anführungszeichen.
quelle
Python (5)
Output: 2.6854396408091694
(Die Ausgabe dauert ca. 2 Sekunden.)
In Übereinstimmung mit den anderen mathematischen Lösungen gebe ich eine noch schlechter konvergierende Lösung an, die das geometrische Mittel der ersten Million fortgesetzter Bruchkoeffizienten einer einzelnen willkürlichen irrationalen Zahl berechnet, von der nicht bekannt ist, dass sie nicht funktioniert. Eigentlich habe ich diese Zahl manipuliert, indem ich ein paar ausprobiert habe, bis ich eine bekommen habe, die mit einer zusätzlichen Ziffer übereinstimmt.
Komische: fror ich meinen Computer und hatte eine harte Abschaltung zu tun , nach dem Versuch , diesen Code mit dem Python Golf Trick zu verkürzen , zu ersetzen ,
for _ in[1]*10**6:code
mitexec("code"*10**6)
.quelle
ES7, 56
quelle