Ihr Ziel ist es, mit nur zehn Zeichen Code die größtmögliche Anzahl (auf die Standardausgabe) zu drucken.
- Sie können alle Funktionen Ihrer Sprache außer den integrierten Exponentiationsfunktionen verwenden.
- Ebenso können Sie keine wissenschaftliche Notation verwenden, um eine Zahl einzugeben. (Also nein
9e+99
.)
- Ebenso können Sie keine wissenschaftliche Notation verwenden, um eine Zahl einzugeben. (Also nein
- Das Programm muss die Nummer ohne Benutzereingabe ausdrucken. Ebenso kein Lesen aus anderen Dateien oder aus dem Web und so weiter.
- Ihr Programm muss eine einzelne Zahl berechnen und ausdrucken. Sie können weder eine Zeichenfolge drucken, noch können Sie die gleiche Ziffer tausende Male drucken.
- Sie können jeden Code, der zum Drucken eines Objekts erforderlich ist, von der Beschränkung auf 10 Zeichen ausschließen. In Python 2, das die
print x
Syntax verwendet, können Sie beispielsweise bis zu 16 Zeichen für Ihr Programm verwenden. - Das Programm muss in der Ausgabe tatsächlich erfolgreich sein. Wenn die Ausführung auf dem schnellsten Computer der Welt länger als eine Stunde dauert, ist sie ungültig.
- Die Ausgabe kann in jedem Format gesendet werden (so können Sie drucken
999
,5e+100
etc.) - Unendlichkeit ist ein abstrakter Begriff , keine Zahl. Es ist also keine gültige Ausgabe.
code-challenge
number
busy-beaver
Ypnypn
quelle
quelle
If it takes longer than an hour to run on any computer in the world, it's invalid.
ist nicht objektiv. Ich könnte (theoretisch) einen Computer herstellen, der eine Stunde braucht, um einen T-Zustand zu ändern* 2^x
?Antworten:
Wolfram-Sprache
ack (9!, 9!) =
Die Ausgabe erfolgt in Pfeilnotation.
quelle
ack(99!,9)
ist viel, viel größer.Perl,> 1,96835797883262e + 18
Könnte nicht die größte Antwort sein ... heute! Aber warte genug Jahrtausende und es wird sein!
Bearbeiten:
Um auf einige der Kommentare mit "genug Jahrtausende" einzugehen, meine ich in der Tat n Hunderte von Jahren.
Um fair zu sein, wenn der große Frost / Hitzetod des Universums das Ende des Universums ist (geschätzte Dauer: ~ 10 100 Jahre), würde der "endgültige" Wert ~ 10 214 betragen , was mit Sicherheit viel weniger ist als bei einigen anderen andere Antworten (obwohl "zufällige Quantenfluktuationen oder Quantentunneln einen weiteren Urknall in 10 10 56 Jahren hervorrufen können "). Wenn wir optimistischer vorgehen (z. B. ein zyklisches oder ein Multiversum-Modell), wird die Zeit unendlich lang, und daher würde die Antwort eines Tages in einem Universum auf einer High-Bit-Architektur einige der anderen übertreffen.
Andererseits ist, wie bereits erwähnt,
time
tatsächlich die Größe von Integer / Long begrenzt, so dass in der Realität so etwas wie~0
immer eine größere Anzahl alstime
(dh dietime
von der Architektur unterstützte maximale Anzahl ) produzieren würde.Dies war nicht die ernsthafteste Antwort, aber ich hoffe es hat euch gefallen!
quelle
time
irgendwann eine kleine Zahl zurückgeben? Kommt darauf an, ob es sich um 32-Bit- oder 64-Bit-Perl handeltWolfram ≅ 2,003529930 × 10 19728
Ja, es ist eine Sprache! Es steuert das Back-End der beliebten Wolfram Alpha-Site. Es ist die einzige Sprache, die ich gefunden habe, in der die Ackermann-Funktion integriert und auf weniger als 6 Zeichen abgekürzt ist.
In acht Zeichen:
Oder 2,003529930 × 10 19728
ack(4,3)
,ack(5,2)
Usw. sind viel größer, aber zu groß.ack(4,2)
ist wahrscheinlich die größte Ackermann-Zahl, die in weniger als einer Stunde vollständig berechnet werden kann.Größere Zahlen werden symbolisch dargestellt, zB:
Die Regeln besagen, dass jedes Ausgabeformat zulässig ist, dies kann also gültig sein. Dies ist größer als 10 10 19727 , was mit Ausnahme der wiederholten Fakultät größer als alle anderen Einträge hier ist.
Jedoch,
ist größer als die wiederholte Fakultät. Die größte Zahl, die ich in zehn Zeichen bekommen kann, ist:
Das ist wahnsinnig groß. Das Universum ist nicht groß genug, um einen signifikanten Teil seiner Ziffern darzustellen, selbst wenn Sie die Zahl wiederholt protokolliert haben.
quelle
ack(4,2)+1
Lösung nicht gewachsen.ack(4,2)
ist die Eingabe ungültig. Die Eingabe in der natürlichen Sprache von W | A sollte nicht einmal als Programmiersprache gelten. Es ist nicht vollständig und Sie können nicht einmal grundlegende Programme wie Euclids Algorithmus darin schreiben. Aus diesem Grund denke ich nicht, dass dies eine gültige Antwort ist, genauso wenig wie eine Google-Anfrage.Python2-Shell mit 3.010.301 Ziffern
Berechnung der Länge: Python fügt diesen langen Zahlen ein "L" hinzu, sodass 1 Zeichen mehr als das Ergebnis Ziffern enthält.
Erste und letzte 20 Ziffern:
quelle
9 * 2**9999999
, also könnte man argumentieren, dass es Potenzierung verwendet.***built-in*** exponentiation functions
sind nicht so erlaubt dies könnte nach den Regeln rutschen. +1floor(log10(9 * 2**9999999))+1
CJam, 2 × 10 268,435,457
Dies berechnet b , wie folgt definiert:
a 0 = 10
a n = a n - 1 2
b = 20 × a 28
Hintergrund
Dies folgt der gleichen Idee wie Claudius Antwort , aber es basiert nicht darauf. Ich hatte eine ähnliche Idee, die ich nur wenige Minuten nachdem er seine veröffentlicht hatte , veröffentlicht hatte , aber ich habe sie verworfen, da sie nicht annähernd zeitlich begrenzt war.
Der Vorschlag von Aditsu , auf Java 8 zu aktualisieren, und meine Idee , Potenzen von 10 zu verwenden, ermöglichten es CJam, Zahlen zu berechnen, die außerhalb der Reichweite von GolfScript liegen. Dies scheint auf einige Fehler / Einschränkungen von Ruby's Bignum zurückzuführen zu sein.
Wie es funktioniert
CJam, 8,1 × 10 1,826,751
Dauert auf meinem Computer weniger als fünf Minuten, sodass noch Verbesserungspotenzial besteht.
Dies berechnet eine 20 , die wie folgt definiert ist:
a 0 = 20
a n = (n × a n - 1 ) 2
Wie es funktioniert
quelle
Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18,100,795,813
9 * 2 ^ (2 ^ 35)> 10 ^ 10,343,311,894Bearbeiten: Meine neue Antwort lautet:
Alte Antwort für die Nachwelt:
Genau zehn Zeichen.
Ich drucke die Nummer in hex und
Daher lautet mein aktueller Code:
Beweisen Sie, dass es in der angegebenen Zeit ausgeführt wird und eine Nummer der angegebenen Größe generiert:
Meine Nummer> 10 ^ (15032385538 * log (16))> 10 ^ 18100795813
3 Hexadezimalziffern weniger als der obige WC-Ausdruck wegen der Initiale
0x9
.Python 3 ist notwendig, da es in Python 2
7<<33
eine lange<<
dauern würde und keine langen Eingaben erfordert.Ich kann stattdessen nicht 9 << (1 << 36) verwenden, weil:
Dies ist also die größtmögliche Anzahl des Formulars
a<<(b<<cd)
auf meinem Computer gedruckt werden können.Höchstwahrscheinlich verfügt die schnellste Maschine der Welt über mehr Speicher als ich. Meine alternative Antwort lautet daher:
9 * 2 ^ (9 * 2 ^ 99)> 10 ^ (1.7172038461 * 10 ^ 30)
Meine derzeitige Antwort ist jedoch die größte, die je eingereicht wurde. Sie ist also wahrscheinlich gut genug. Dies alles unter der Annahme, dass eine Bitverschiebung zulässig ist. Es scheint, aus den anderen Antworten zu sein, die es verwenden.
quelle
Jede Sprache mit ausreichend kurzen konstanten Namen, ca. 18 Stellen.
Ich würde dies als PHP-Antwort posten, aber leider
M_PI
macht dies nur ein wenig zu lang! PHP liefert dafür aber 8.0839634798317E + 17. Grundsätzlich wird der Mangel an absoluter Präzision in PI: p ausgenutztquelle
(/ 99(sin pi))
(14 Zeichen). Fehler in TI-83:99/sin(π
(8 Zeichen) verursacht Division durch Null. Arbeiten in Libreoffice Calc :=99/SIN(PI(
(10 Zeichen, nicht mitgerechnet=
) berechnet 808423047055000000. Libre auto-Einsätzen die letzten beiden))
in=99/SIN(PI())
.99/sin(π
aber fünf Bytes oder acht? Ich weiß, dass TI-BASIC eine Reihe von Befehlen als einzelne Bytes speichert. istsin(
einer von ihnen?Haskell
Ohne Tricks:
Wohl ohne etwas zu berechnen:
Anpassung von Niets Antwort :
quelle
floor(infinity)
ist eine endliche Zahl? Was zum Teufel, Haskell?isInfinite $ 1 / 0 -- True
. Soweit ich das beurteilen kann, wird IEEE 7541 / 0
als unendlich definiert .1 / 0 == Infinity
.Powershell - 1.12947668480335E + 42
Multipliziert 99 Pebibyte mal 9.000.000.000 Pebibyte.
quelle
J (
((((((((9)!)!)!)!)!)!)!)!
)Ja, das ist viel.
10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))
nicht sehr genau zu sein.quelle
!!9x
habe ich nichts zum Screenen gedruckt. Ich bezweifle sehr , dass!!!!!!!!9x
wird immer berechnet werden.!!9x
schließlich auf dem Bildschirm gedruckt. Ich bin beeindruckt, dass es den Wert tatsächlich berechnet hat, aber trotzdem Punkt 5 komplett verfehlt.K / Kona :
8.977649e2611.774896e308!170
Erstellt einen Vektor mit Zahlen von 0 bis 1691.6+
addiert eins zu jedem Element des Vektors und konvertiert in reelle Werte (Bereich ist 1,6 bis 170,6)*/
multipliziert jedes Element des ArraysWenn Kona Quad-Präzision unterstützen würde, könnte ich
*/9.+!999
1e2584 erreichen. Leider nicht und ich bin auf doppelte Präzision beschränkt.alte Methode
!99
Erstellt einen Vektor mit Zahlen von 0 bis 989+
fügt 9 zu jedem Element des Vektors hinzu (jetzt reicht 9 bis 107)9.*
multipliziert jedes Element mit 9.0 (implizit konvertiert in Real, also 81.0 bis 963.0)*/
multipliziert jedes Element des Vektorsquelle
HTML, 9999999999
.. geschafft.
quelle
9^9999
druckt9^9999
. Ich sag bloß :)PHP_INT_MAX
ist 11Python - Variiert bis zu 13916486568675240 (bisher)
Nicht ganz ernst, aber ich dachte, es würde ein bisschen Spaß machen.
Von all den Dingen, die ich ausprobierte,
len
bekam ich am konsequentesten große Ausweise.Auf meinem Computer wurden 13916486568675240 (17 Stellen) und auf dieser Site 13842722750490216 (ebenfalls 17 Stellen) ausgegeben . Ich nehme an, es ist möglich, dass dies so niedrig wie 0 ist, aber es könnte auch höher gehen.
quelle
calculate
nichts.*99
Teil eine Berechnung aufruft.id(id)
oder"id(0j)
, können Sie "999
vars
gibt konsequent den höchsten Wert (aber 4 Zeichen) , gefolgt vonsum
. Verwenden Sieprint(sorted([(id(x),x)for x in[id,len,max,min,str,int,ord,chr,sum,map,abs,all,any,bin,bool,eval,oct,vars,iter,list,set,repr,round,zip,type,pow,dict,dir,hex]])[::-1])
zu überprüfen.Golfscript, 1e + 33.554.432
Berechnet
10 ^ (2 ^ 25)
ohne Verwendung von Exponenten 96 Sekunden:Es kann bis zu berechnen
9 ^ (2 ^ 9999)
, wenn nur genügend Zeit zur Verfügung steht, aber das Inkrementieren des inneren Exponenten um eins nimmt das ~ Dreifache der Zeit in Anspruch, sodass das 1-Stunden-Limit ziemlich bald erreicht wird.Erklärung :
Verwenden einer früheren Version mit derselben Idee:
Brechen sie ab:
Der Stapel am Anfang jedes Blocks besteht aus einer Nummer, der aktuellen Nummer. Dies beginnt mit
8
. Dann:So sieht der Stack Schritt für Schritt aus:
... usw. Geschrieben in mathematischer Notation ist der Fortschritt:
quelle
wc
. Ich werde bearbeiten, um es klarer zu machenwc -c
, um die Ausgabe klarer zu machen10{.*}25
liefert 33.554.434 Ziffern und endet in 90 Sekunden auf meinem Computer. Ich weiß nicht warum,10{.*}26*
druckt aber nichts.wxMaxima ~ 3x10 49.948 (oder 10 8.565.705.514 )
Ausgabe ist
Ich bin mir nicht sicher, ob es den Spezifikationen (insbesondere dem Ausgabeformat 1) entspricht, aber ich kann noch größere Treffer erzielen:
Ausgabe ist
Das sind ungefähr 10 8.565.705.514, was deutlich mehr ist als die meisten Top-Antworten und in ungefähr 2 Sekunden berechnet wurde. Die
bfloat
Funktion gibt eine beliebige Genauigkeit .quelle
Haskell, 4950
Oh Mann, das ist nicht viel! 10 Zeichen beginnen nach dem Dollarzeichen.
quelle
print
? Auch9/0.000001
ist größer alssum[1..99]
.Mathematica, 2.174188391646043 * 10 ^ 20686623745
Genau zehn Zeichen.
quelle
Python-Shell,
649539999890001Beats Haskell, keine ernsthafte Antwort.
quelle
calculate
die Antwort.9**9**9**9
richtig, da es sich um einen arithmetischen Operator handelt (keine eingebaute Funktion).Wolfram Alpha (zählt eine Website als Sprache)?
Ausgänge
Danke an Cory für den Tipp, dass Räume genauso gut funktionieren wie Parens.
quelle
((99!)!)! > 4
kehrt nie zurück.Befunge-93 (1.853.020.188.851.841)
Ich bin froh, dass noch niemand Befunge gemacht hat (das ist meine Nische), aber verdammt, ich kann keinen cleveren Trick finden, um die Zahl zu erhöhen.
Es ist also 9 ^ 16.
Grundsätzlich multipliziert sich der Wert am oberen Rand des Stapels mit sich selbst. Der Wert oben auf dem Stapel lautet also:
und
Gibt den Endwert aus. Es würde mich interessieren, ob jemand bessere Ideen hat.
quelle
Ich würde dies lieber als Kommentar oben posten, aber anscheinend kann ich nicht, da ich ein Noob bin.
Python:
9<<(2<<29)
Ich würde mit einer größeren Bitverschiebung arbeiten, aber Python scheint zu wollen, dass der richtige Operand einer Verschiebung eine nicht lange Ganzzahl ist. Ich denke, das kommt dem theoretischen Maximum näher:
9<<(7<<27)
Das einzige Problem bei diesen ist, dass sie möglicherweise Regel 5 nicht erfüllen.
quelle
Matlab (1.7977e + 308)
Matlab speichert den Wert der größten Gleitkommazahl (doppelte Genauigkeit) in einer Variablen namens
realmax
. Das Aufrufen im Befehlsfenster (oder in der Befehlszeile) gibt den Wert aus:quelle
realmax+1
. Ich habe es aus Spaß versucht und bin überrascht, dass es genau dieselbe Zahl zurückgibt wie Sie (dann habe ich gelacht, als ich merkte ...eps(realmax)=1.99584030953472e+292
).Python, ca. 1,26e1388
Gibt:
quelle
Mindestens Python 3.5.0 (64-Bit), mehr als 10 ^ 242944768872896860
In einer idealen Welt wäre das so
9<<(1<<63)-1
, aber es gibt nicht genug Bytes dafür. Diese Zahl ist so groß, dass sie fast 1 EiB Speicher benötigt, was ein bisschen mehr ist, als ich auf meinem Computer habe. Zum Glück müssen Sie nur etwa 0,2% des weltweiten Speicherplatzes als Swap verwenden, um ihn zu speichern. Dem binären Wert1001
folgen 8070450532247928832 Nullen.Wenn Python für 128-Bit-Computer
9<<(9<<99)
verfügbar ist , ist dies das Maximum , das weniger als 1 MiYiB Speicher benötigt. Dies ist gut, da Sie noch genügend adressierbaren Speicherplatz haben, um den Python-Interpreter und das Betriebssystem zu speichern.quelle
Cubix , 9.670457478596419e + 147 (nicht konkurrierend)
Nicht konkurrierend, da Cubix neuer als diese Herausforderung ist. Sie können es hier online testen. Beachten Sie jedoch, dass die Nummer nicht gedruckt wird. Sie müssen das Programm nach den letzten beiden anhalten
*
Sekunden ausgeführt wurden, um den Wert auf dem Stapel zu sehen.Wie es funktioniert
Cubix ist ein zweidimensionaler Esolang, bei dem der Code um einen Würfel gewickelt wird. Dieser Code entspricht genau dem folgenden Würfelnetz, in dem
.
es sich um ein No-Op handelt:Dann wird der Code ausgeführt, wobei der Anweisungszeiger (IP) in der oberen linken Ecke der äußersten linken Seite beginnt und nach rechts zeigt.
"
Aktiviert den Zeichenkettenmodus, in dem alle Zeichen, die bis zum nächsten Mal vorkommen"
, ihre Zeichencodes auf den Stapel schreiben. Die IP umschließt den Code vollständig und drückt drei/
s (47), zwei*
s (42) und zwei.
Sekunden (46) auf den Stapel, bevor der Zeichenfolgenmodus wieder beendet wird.Hier wird es interessant. Der erste Spiegel
/
reflektiert die IP und zeigt nach oben. es dreht sich dann um den Würfel und trifft diese Zeichen:Die drei
*
s multiplizieren die beiden obersten Gegenstände auf dem Stapel. Im Gegensatz zu den meisten stapelbasierten Sprachen, in denen arithmetische Operatoren ihre Argumente einfügen, belässt Cubix die vorherigen Werte im Stapel. Das heißt also, dies berechnet46*46 = 2116, 46*2116 = 97336, 2116*97336 = 205962976
.Wenn die IP die
/
wieder erreicht, wird sie nach rechts gedreht. Es trifft dann auf den nächsten Spiegel und folgt diesem Pfad:Die beiden Sternchen multiplizieren die beiden obersten Elemente noch einmal. Dann leitet der Spiegel die IP wieder nach rechts und der dritte Spiegel wiederholt den Vorgang noch einmal:
Schließlich verlässt das IP den Spiegelabschnitt in Richtung Osten. Die beiden letzten Sternchen multiplizieren sich noch zweimal, sodass 9.670457478596419e + 147 auf dem Stapel verbleiben. Dies könnte mit gedruckt werden
O
, aber es gibt keine einfache Möglichkeit, dies zu tun, da praktisch jeder Punkt auf dem Würfel bereits verwendet wird.quelle
Scala, 2 63 & ndash; 1
Arme, arme Scala. Benötigt mindestens 8 Zeichen, um einen
BigInt
Wert zu erhalten, der nicht genügend Platz lässt, um ihn tatsächlich groß zu machen.Mit nur 7 Zeichen (gezähltem) Code können wir jedoch das größtmögliche Positiv drucken
Long
:quelle
Brainf ** k 256 - 2147483647
Wenn Sie die Tatsache ignorieren, dass die meisten Compiler und Interpreter Daten als ASCII-Äquivalent ausgeben (seien Sie leanient, es ist, was es ist;)) , wird der maximale Wert des Datentyps des Interpreters / Compilers zurückgegeben.
Auf einigen Systemen sind dies nur 256, auf einigen (z. B. meinem) ist dies der Maximalwert einer 32-Bit-Ganzzahl, dh 2 147 483 647.
Bearbeiten:
Gibt dasselbe in viel weniger Zeichen aus
quelle
-1
auf Dolmetschern gedruckt , die signierte Werte für das Band verwendenPerl, nicht konkurrierend
Ich benutze dies, um eine kleine bekannte Ecke von Perl hervorzuheben.
Perl kann hier nicht wirklich mithalten, da es keine eingebauten Bignums hat (natürlich können Sie eine Bignum-Bibliothek laden).
Aber was jeder weiß, ist nicht ganz wahr. Eine Kernfunktion kann tatsächlich mit großen Zahlen umgehen.
Das
pack
Formatw
kann tatsächlich eine beliebige natürliche Zahl zwischen Basis10
und Basis konvertieren128
. Die Ganzzahl der Basis 128 wird jedoch als Zeichenfolgenbytes dargestellt. Die Bitfolge wirdxxxxxxxyyyyyyyzzzzzzz
zu den Bytes:1xxxxxxx 1yyyyyyy 0zzzzzzz
(Jedes Byte beginnt mit 1, mit Ausnahme des letzten). Und Sie können eine solche Zeichenfolge mit Unpack auf Basis 10 konvertieren. So können Sie Code wie folgt schreiben:was gibt:
Sie können die
4**4
Werte durch größere Werte ersetzen , bis Sie das Gefühl haben, dass dies zu lange dauert oder zu viel Speicher benötigt.Leider ist dies viel zu lang für das Limit dieser Herausforderung, und Sie können argumentieren, dass das Ergebnis der Basis 10 in eine Zeichenfolge konvertiert wird, bevor es zum Ergebnis wird, sodass der Ausdruck nicht wirklich eine Zahl ergibt. Aber intern erledigt Perl wirklich die nötige Arithmetik, um die Eingabe in Basis 10 umzuwandeln, was ich immer für ziemlich ordentlich hielt.
quelle
TI-36 (nicht 84, 36), 10 Bytes, ca. 9.999985426E99
Ältere Rechner können ebenfalls in gewissem Umfang programmiert werden;)
69!58.4376
Dies liegt sehr nahe an der maximalen Reichweite, die ein TI-Rechner anzeigen kann:
-1E100<x<1E100
quelle
Perl 6 , 456.574 Stellen
Kein TIO, da die Ausführung 2 Minuten dauert.
quelle