印刷可能な最大数


113

あなたの目標は、数字を印刷するプログラムを書くことです。数値が大きいほど、より多くのポイントを獲得できます。しかし、注意してください!スコアリング機能では、コードの長さが制限されており、かなりの重みがあります。印刷された数値は、ソリューションに使用したバイト数のキューブで除算されます

したがって、印刷10000000したコードが100バイト長であるとします。最終スコアはになります10000000 / 100^3 = 10

この挑戦を少し難しくするために、従うべき他のルールがあります。

  • コードで数字を使用することはできません(0123456789)。
  • あなたはできるなど/物理/数学を使用します。定数、しかし、彼らはしている場合にのみ、10未満(あなたが使用することができます例えばパイ〜= 3.14が、あなたが使用することはできませんアボガドロ定数 = 6e23)
  • 再帰は許可されます、生成された数は有限である必要があります(そのため、無限は解として受け入れられません。プログラムは、時間とメモリの制限なしで正しく終了し、要求された出力を生成する必要があります);
  • 操作*(乗算)、/(除算)、^(電力)、またはそれらを示す他の方法を使用すること2 div 2はできません(たとえば、許可されていません)。
  • プログラムは、必要に応じて複数の数値を出力できます。最高のものだけが得点にカウントされます。
  • ただし、文字列連結することはできます。つまり、隣接する数字のシーケンスはすべて単一の数字と見なされます。
  • コードはそのまま実行されます。これは、エンドユーザーがコードの行を編集することも、数字やその他のものを入力することもできないことを意味します。
  • 最大コード長は100バイトです。

リーダーボード

  1. スティーブンH.、Pyth ≈Fの φ(1,0,0)+7(256 26)/ 1000000 [1]
  2. 単に美しいアート、ルビー ≈F φ 121(ω)(126) [1]
  3. ピーター・テイラー、GolfScript ≈F ε 0 +ω+ 1(17)/ 1000 [1]
  4. RES、GolfScript ≈F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(126))))))))) [1]
  5. 単に美しいアート、ルビー ≈F ω ω2 +1(1983)
  6. eaglgenes101、ジュリア ≈Fの ω3(127)
  7. col6y、Python 3、 ≈(127→126→...→2→1)/ 99 3 [1] [3]
  8. Toeofdoom、ハスケル、 20(1)/ 99 3 [1]
  9. Fraxtil、dc、 ≈15↑¹⁶⁶⁶⁶⁶⁵15/100 3 [3]
  10. マゼンタ、パイソン、 ≈ACK(126126)/ 100 3 ↑≈10 124 129
  11. ケンドールフレイ、ECMAスクリプト6、 ≈10 3↑ 4 3 /100 3 [1]
  12. ILMARI Karonen、GolfScript、 ≈10↑ 3 10 377 /18 3 [1]
  13. BlackCap、Haskell、 ≈10↑↑65503/100 3
  14. 再帰、パイソン、 ≈2↑↑95分の11 3 ≈10↑↑8.63297 [1]〜[3]
  15. NM、ハスケル、 ≈2↑↑100分の7 3 ≈10↑↑4.63297 [1]
  16. デビッド・ヨー、C、 ≈10 10 、4×10 22 /83 3 ≈10↑↑4.11821 [2]
  17. プリモ、Perlの、 ≈10(12750684161!)5×2 27 /100 3 ≈10↑↑4.11369
  18. アート、C、 ≈10 10 2×10 6 /98 3 ≈10↑↑3.80587
  19. ロバートSørlie、x86の、 ≈10 2 2 19 +32 / 100 3 ≈10↑↑3.71585
  20. トビア、APL、 ≈10 10 353 /100 3 ≈10↑↑3.40616
  21. ダレン石、C、 ≈10 10 97.61735 / 98 3 ≈10↑↑3.29875
  22. ecksemmess、C、 ≈10 2 320 /100 3 ≈10↑↑3.29749
  23. アダムスパイツ、vb.net、 ≈10 5000×(2 644 /100 3 ≈10↑↑3.28039
  24. ジョシュアは、bash、 ≈10 10 15 /86 3 ≈10↑↑3.07282

脚注

  1. 宇宙のすべての電子がキュービットであり、そのすべての重ね合わせが情報を格納するために有益に使用できる場合(これは、実際に格納されているものを知る必要がない限り、理論的には可能です)、このプログラムは必要以上のメモリを必要とします存在する可能性があり、したがって実行することはできません-現在、または将来の任意の考えられる時点で。著者が≈3↑↑3.28より大きい値を一度に印刷することを意図した場合、この条件が適用されます。
  2. このプログラムは現在存在するよりも多くのメモリを必要としますが、理論的には少ない数のキュービットに格納できないほど多くないため、このプログラムを実行できるコンピューターがいつか存在する可能性があります。
  3. 現在利用可能なすべてのインタープリターはランタイムエラーを発行します。そうでない場合、プログラムは作成者の意図したとおりに実行できません。
  4. このプログラムを実行すると、システムに修復不可能な損傷が発生します。

@primoの編集:スコアボードの一部を更新しました。比較しやすい表記法を使用し、小数部を使用して次の高次への対数距離を示します。例10↑↑2.5 = 10のために10 √10。また、ユーザーの分析に誤りがあると思われる場合は、いくつかのスコアを変更しました。これらのいずれかについては気軽に異議を申し立ててください。

この表記の説明:

の場合0 ≤ b < 1、その後。a↑↑b = ab

の場合b ≥ 1、その後。a↑↑b = aa↑↑(b-1)

の場合b < 0、その後。a↑↑b = loga(a↑↑(b+1))


16
誰かが明示的に「ベース10」と言いましたか?
ケシュラム

1
12e10(12 * 10 ^ 10)と言う場合、大きな数はカウントされ12*10^10ますか?
hichris123 14年

4
私の代わりに*、/禁止のより良い制約を考えると、^、してきたでしょう許可のみ線形操作は、例えば +、 - 、++、 - 、+ =、 - =、などそれ以外の場合は、プログラマーが利用することができますKnuthの上向き矢印/アッカーマンライブラリ関数が、選択した言語で利用可能になっている場合、不正行為のように見えます。
アンドリューチョン14年

14
私はまだ誰かが脚注を獲得するのを待っています[4]。
ブライアンミントン

1
プログラムが印刷する場合、500bこれは無効ですか?つまり、プログラムが出力する数値以外のものをすべて無視できますか?もしそうなら、何かのように50r7カウントし507ますか?
単に美しいアート

回答:


20

GolfScript; fε_0+ω+ 1(17)/ 1000 以上のスコア

この質問にワーム寿命の回答を使用するというresの提案に続いて、ハワードのソリューションの派生を大幅に改善する2つのプログラムを紹介します。

関数名を法とする共通のプレフィックスを共有します:

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g

計算g(g(1)) = g(5)場合g(x) = worm_lifetime(x, [x])、Fとほぼ成長ε 0(ノートをRES「関数で急成長している階層に大別グッドスタイン関数と同じ速度を成長」)。

分析がやや簡単(!)

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{.{.{.{.{.{.{.{.{.{g}*}*}*}*}*}*}*}*}*}*

.{foo}*にマップxfoo^x xます。

,:z){[]+z\{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{g}*

したがって、与えるg^(g(5)) ( g(5) ); さらに8レベルの反復は、矢印チェーンに似ています。単純な用語で表現する場合:if h_0 = gh_{i+1} (x) = h_i^x (x)thenを計算しh_10 (g(5))ます。

この2番目のプログラムのスコアはほぼ間違いなく優れていると思います。今回gは、機能に割り当てられたラベルは改行(sic)です。

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:
~
{.['.{
}*'n/]*zip n*~}:^~^^^^^^^^^^^^^^^^

今回^は、別の関数としてより有効に活用します。

.['.{
}*'n/]*zip n*~

かかるxスタック上に、そして葉x含む文字列が続くxのコピー.{が続くg続くxのコピーを}*。次に、文字列を評価します。予備のキャラクターを焼き付けるのに適した場所があったので、最初にj_0 = g; 場合はj_{i+1} (x) = j_i^x (x)、その後の最初の評価^を計算j_{g(5)} (g(5))(私はかなり確信している、すでに前のプログラムを打ちます)。その後、^さらに16回実行します。のでk_0 = g(5)k_{i+1} = j_{k_i} (k_i)それから計算しk_17ます。k_i>> fε_0+ω+ 1(i)を推定してくれたresに感謝します。


私が間違っていなければ、プログラムが計算する数(nと呼ぶ)はn = f ^ 9(g(3))と書くことができます。ここで、f(x)= g ^(4x)(x)とg( x)は、ワーム[x]の寿命です。gを急速に成長する階層でf_eps_0とほぼ同じものとして扱うと、「エンベロープの後ろ」計算では、f_(eps_0 + 2)(9)<n <f_(eps_0 + 2)(10 )。もちろん、現在の勝者です。
解像度14年

@res、それはそれをかなり過小評価していると思います。.{foo}*にマップxfoo^x (x)ます。取得しh_0 (x) = g^4 (x)h_{i+1} (x) = h_i^x (x)計算された値がである場合h_9 (g(3))。あなたのf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
ピーターテイラー14年

(これはあなたの元のプログラムに関係します-あなたがいくつかの編集をしたことを見ました。)ああ...私はその*仕組みを誤解しました。h_0(x)= g ^ 4(x)>> f_eps_0(x);と言っても安全です。したがって、リレーションh_ {i + 1}(x)= h_i ^ x(x)は、h_i(x)>> f_(eps_0 + i)(x)のような「加速された」急成長階層を効果的に定義します。すなわち、計算された数h_9(g(3))は確かにf_(eps_0 + 9)(g(3))よりもはるかに大きくなります。g(3)に関しては、Grahamの数(g_64)を定義するために使用されるg_iシーケンスの4番目の数であるg_4よりも大きいことを示すことができると思います。
解像度14年

@res、だからj_i ~ f_{eps_0 + i}; それは作りk_i ~ f_{eps_0 + i omega + i^2}ますか?
ピーターテイラー14年

あなたが書いたことを考えると、私は得るk_i ~ f_{ε_0 + ω}^i (k_0)。理由は次のとおりです。k_ {i + 1} = j_ {k_i}(k_i)=j_ω(k_i)〜f_ {ε_0+ω}(k_i)〜f_ {ε_0+ω} ^ 2(k_ {i-1}) ...〜f_ {ε_0+ω} ^ {i + 1}(k_0)、したがってk_i〜f_ {ε_0+ω} ^ i(k_0)。急速に成長する階層に関して完全にk_iの非常に保守的な下限は、 k_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)です。
解像度14年

91

Windows 2000-Windows 8(3907172 /23³= 321)

注:これを実行しないでください!

以下をバッチファイルに保存し、管理者として実行します。

CD|Format D:/FS:FAT/V/Q

4TBドライブで実行すると、最初に印刷された数字が太字で出力されます。

ドライブDに新しいディスクを挿入し
、準備ができたらEnterキーを押します...ファイルシステムの種類はNTFSです。
新しいファイルシステムはFATです。
QuickFormatting 3907172M
ボリュームはFAT16 / 12には大きすぎます。


19
純粋な天才!
WallyWest 14年

7
私は、スコアとして約321を得る解の長さを3乗することになっていると思いますYour printed number will be divided for the number of bytes you used for your solution^3.
ランチャー

1
77の賛成票、まだ...スコアは321であることに注意してください...
単に美しいアート

3
@SimplyBeautifulArt、それはスコアではなく、旅です。:-D
Hand-E-Food

4
どうやら、多くの大笑いを与えたもの。これがリーダーボードに到達することができれば...誰かが「回復不可能なダメージ」タグを獲得する必要があります;)
単に美しいアート

87

GolfScript、スコア:方法が多すぎる

わかりました、GolfScriptのいくつかの文字でいくつの数字を印刷できますか?

次のコードから始めましょう(ありがとう、Ben!126

'~'(

次に、それを126回繰り返して、約1.26126×10 377に等しい数を与えます。

'~'(.`*

(これは乗算ではなく文字列の繰り返しであるため、ルールの下では問題ありません。)

それでは、その 378桁の数字を10 377回少し繰り返しみましょう。

'~'(.`*.~*

それは約10で数を計算しようとするので、あなたが実際に、このプログラムの仕上がりを見ることは決してないだろう380 ≈2 1140桁。これまでに構築されたコンピューターは、これほど大きな数を格納することも、既知の物理学を使用してそのようなコンピューターを構築することもできませんでした。観察可能な宇宙の中の原子の数は約10と推定されている80ので、私たちは何とか使用できる場合でも、宇宙のすべての問題を、この膨大な数を格納するために、我々はまだ何とか詰め込む必要があるだろう、約10 380 /10 80 = 各アトムに 10 300

しかし、このような計算を実行できる神の独自のGolfScriptインタープリターがあり、まだ満足していないと仮定しましょう。OK、もう一度やりましょう!

'~'(.`*.~*.~*

このプログラムの出力は、完了できた場合、約10 10 383桁になるため、約10 10 10 383になります。

ちょっと待って!そのプログラムは一種の反復的なものになっています...なぜループに変えてみませんか?

'~'(.`*.{.~*}*

ここでは、ループ本体は、約10実行します377私たちに約10からなる理論的な出力を与える、回を10⋰ 10 377のタワー桁ほど、反復力 10のは約10である377ステップの長を。(実際には、繰り返される数も毎回長くなるという事実を無視しているため、これはかなり過小評価されていますが、比較的言えばそれは小さな問題です。)

しかし、まだ完了していません。別のループを追加しましょう!

'~'(.`*.{.{.~*}*}*

そのような数値の近似値を適切に書き留めるには、難解な数学表記が必要です。たとえば、クヌースの上向き矢印表記では、上記のプログラムによって(理論的に)出力される数値は約10↑ 3 10 377であり、数学が正しかったと仮定して、10のべき乗(または10 377)を与えたり受けたりします。

このような数字は、「信じられないほど巨大」なものを超えて、「想像もできない」領域に到達します。同様に、そのような数までカウントアップしたり、書き留めたりすることが不可能であるだけでなく(上記の3番目の例で既にそのポイントを超えた)、抽象数学以外では文字通り考えられる使用や存在はありません。私たちは、から、証明することができます数学の公理、我々は上記のプログラムは、GolfScript仕様から証明できると同じように、そのような数が存在すること、でしょう)現実と利用可能なストレージ容量の限界が介入しなかった場合は、それらを計算しますが、文字通りありません何もでは、あらゆる意味でそれらを使用して数えたり測定したりできる物理的な宇宙。

それでも、数学者は時々さらに大きな数を利用します。(理論的に)大きな数値計算するには、少し多くの作業が必要です。ループを1つずつネストするだけでなく、再帰を使用してネストされたループの深さを伸縮する必要があります。それでも、原則として、短いGolfScriptプログラム(100バイトをはるかに下回ると思います)を記述して、(理論的には)Conwayチェーン矢印表記で表現可能な任意の数を計算することが可能です。詳細は演習として残します。;-)


9
"...No computer ever built could store a number that big...私が間違っている場合は修正しますが、ここでは当てはまりません。最終結果を保存する必要がないので、一度に3桁の数字を「保存」して印刷するだけではありませんか(?)。
ケビンフェガン14年

12
@KevinFegan:それは本当です-数は非常に反復的であるため、圧縮するのは簡単です。しかし、その後、実際には数値自体を保存するのではなく、理論的には数値を計算するための抽象的な数式を保存しています。実際、このような最もコンパクトな式の1つは、おそらくそれを生成する上記のGolfScriptプログラムです。また、次のプログラムに一歩進んだ場合、数字を破棄する前に一度に1つずつ「印刷」することも実用的ではありません。宇宙で古典的な計算の多くのステップを実行する既知の方法はありません。
イルマリカロネン14年

@IlmariKaronenのGolfScriptは、Googolを食い物にしたばかりです!
WallyWest

5
これを実際に限界まで押してみてください。GolfScriptで100文字以内でどれだけ正確に作成できるかを確認してください。現状では、結果はGrahamの数(私のHaskellソリューションが「近似」している)よりも少ないですが、おっしゃるようにGolfScriptはおそらくさらに先に進むことができます。
反時計回りに14年

3
@leftaroundabout:80文字のGolfScriptでConway矢印表記エバリュエーターを作成しましたが、このチャレンジのすべての要件を満たしていません(数値定数と算術演算子を使用します)。それはおそらく改善される可能性がありますが、私はそれを新しい挑戦として提起するかもしれないと思いました。
イルマリカロネン14年

42

JavaScript 44文字

これは少しずるいように見えるかもしれません:

alert((Math.PI+''+Math.E).replace(/\./g,""))

スコア= 31415926535897932718281828459045/44 ^ 3≈3.688007904758867e + 26≈10↑↑2.1536134004


9
曲げられるルールはありません:;)* 0123456789は使用できません[チェック] *数字が有効な文字である言語を使用してください。[チェック] *数学/物理/などを使用できます。定数<10。[check、used 2] *再帰は許可されますが、生成される数は有限である必要があります。[チェック、再帰なし] *、/、^は使用できません。[チェック]プログラムは複数の数値を出力できます。[チェック]文字列を連結できます。[チェック]コードはそのまま実行されます。[チェック]最大コード長:100バイト。[確認] / I 5秒wを終了する必要がある[確認]
WallyWest


1
@gengkev残念ながら、.replace( "。"、 "")のみを使用すると、最初のが削除されるだけです。キャラクター; 私が持っている世界は、すべてを置き換えるために置き換える使用します。文字列から文字...
WallyWest

あなたは行うことができますm=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))あなたのスコアは、3100627668029981620085536923187664/63 ^ 3 = 1.240017943838551e + 28で、代わりに
AMK

1
1については@Coryは、私が...第二に、私は本当に二番目の引数を持っていない...そう、誰もがそれを使用することになり、定数を繰り返すつもりはない
WallyWest

28

C、スコア= 10 10 97.61735 / 98 3 ≈10↑↑2.29874984

unsigned long a,b,c,d,e;main(){while(++a)while(++b)while(++c)while(++d)while(++e)printf("%lu",a);}

得点の助けに感謝します。洞察や修正を歓迎します。私の方法は次のとおりです。

n = 1から2 64 -1 まですべての数値の連結(2 64 -1)を4回繰り返します。最初に、1〜2 64 -1(「サブシーケンス」)の累積桁数を(低)推定する方法を次に示します。サブシーケンスシーケンスの最終数は2 64 -1 = 1844674407370955161520桁です。したがって、サブシーケンスの数字の90%以上(1..で始まるもの9)は19桁です。残りの10%が平均10桁であると仮定しましょう。それはそれよりもはるかに多くなりますが、これは簡単な数学と不正行為のための低い推定値です。そのサブシーケンスは4回(2 64 -1)繰り返されるため、長さはNあろう少なくとも(0.9×(2 64 -1)19 + 0.1×(2× 64 ×(2 -1)×10)64 -1)4 = 3.86613×10 97桁。以下のコメントでは、@ primoはnの長さが4.1433x10 97であることを確認しています。したがって、n自体は10の10乗、つまり10 10 97.61735になります。

l = 98文字のコード

スコア = n / l 3 = 10 10 97.61735 / 98 3

要件:64ビットコンピューターで実行する必要がありsizeof(long) == 8ます。MacとLinuxがそれを行います。


2
Cでは、'z'は定数値122です。右?
プリモ14年

1
printf("%d",n)数がもっと大きくなると思います。たとえば、Windowsは限りLLP64モデルを使用するためにも、64ビットコンピュータでは、64ビットのlongを意味するものではありません、まだ32ビットです
phuclv

3
それは問題ではありません。符号付き整数オーバーフローはCでは未定義の動作であるため、コードの実行時に何が起こるかを予測することは不可能です。有限の要件に違反する可能性があります。
デニス

1
分析は少しずれていると思います。の連結0..2^64-1は、正確に357823770363079921190桁の長さです。繰り返し(2^64-1)^4回数は4.1433x10 ^ 97です。10を10乗すると、10^10^97.61735約10↑↑3.29875になります。持っていない10の累乗を主張していると思います(どこに3.866×10^97なっ3.866^10^97たかに注意してください。
primo14年

2
こんにちは@primo。これを確認する時間を設けてくれてありがとう。感謝します。あなたの言っていることがわかります。私の最後の指数は間違っています。の2.0代わりになり97ます。 10^10^10^2.00= 10^10^97.6。これをスコアに反映させます。
ダレンストーン14年

19

Python 3-99文字-(ほとんどの場合)Grahamの数よりも大幅に大きい

アッカーマン関数の拡張に基づいて、より急速に増加する関数を考え出しました。

A=lambda a,b,*c:A(~-a,A(a,~-b,*c)if b else a,*c)if a else(A(b,*c)if c else-~b);A(*range(ord('~')))

http://fora.xkcd.com/viewtopic.php?f=17&t=31598に触発されましたが、私の番号を理解するためにそこを見る必要はありません。

これが、分析で使用するackermann関数の修正バージョンです。

A(b)=b+1
A(0,b,...)=A(b,...)
A(a,0,...)=A(a-1,1,...)
A(a,b,...)=A(a-1,A(a,b-1,...),...)

A上記のコードの私の機能は技術的には同じではありませんが、実際にはより強力であり、上記の定義の3行目を置き換える次のステートメントがあります。

A(a,0,...)=A(a-1,a,...)

(aは少なくとも1でなければならないため、より強くなければなりません)

しかし、私の目的のために、アッカーマン関数の解析はすでに部分的に行われているため、2つの引数がある場合、この関数の解析は単純なものと同じであると想定します。

私の関数は、引数の削除、最初の引数のデクリメント、または同じ最初の引数の保持と2番目の引数のデクリメントのいずれかであるため、最終的に再帰を停止することが保証されています。

サイズの分析

グラハムの数であるAFAIKは、次のものG(64)を使用して表すことができます。

G(n) = g^n(4)
g(n) = 3 ↑^(n) 3

ここで、↑^(n)a bはクヌースの上矢印表記です。

同じように:

A(a,b) = 2 ↑^(a-2) (b+3) - 3
A(a,0) ≈ 2 ↑^(a-2) 3
g(n) ≈ A(n+2,0) // although it will be somewhat smaller due to using 2 instead of 3. Using a number larger than 0 should resolve this.
g(n) ≈ A(n+2,100) // this should be good enough for my purposes.

g(g(n)) ≈ A(A(n+2,100),100)

A(1,a+1,100) ≈ A(0,A(1,a,100),100) = A(A(1,a,100),100)

g^k(n) ≈ A(A(A(A(...(A(n+2,100)+2)...,100)+2,100)+2,100)+2,100) // where there are k instances of A(_,100)
A(1,a,100) ≈ A(A(A(A(...(A(100+2),100)...,100),100),100),100)

g^k(100) ≈ A(1,k,100)
g^k(4) < A(1,k,100) // in general
g^64(4) < A(1,64,100)

上記のプログラムで表現されている数はA(0,1,2,3,4,...,123,124,125)です。

以来はg^64(4)グラハムの数であり、私の数学と仮定すると、それはより少ない正しいですA(1,64,100)私の電話番号があり、大幅にグラハムの数よりも多いです。

私の数学の間違いを指摘してください-ない場合、これはこの質問に答えるためにこれまでに計算された最大数でなければなりません。


4
素晴らしく見える; 明らかに、あなたの「修正されたアッカーマン」はまさにコンウェイチェーンの評価者です。
反時計回りに

1
@leftaroundabout完全ではありませんが、ほぼ同じ再帰強度を持っていると思います。また、ゼロはチェーンでは有効ではないため、スコアリストのConwayチェーンからゼロを削除する必要があります。
セルスケッグス

1
どうしてやったのrange(ord('~'))range(125)少ないバイト数でやったことはありませんrange(A(9,9,9))か?
エソランジングフルーツ

1
@ Challenger5:ルール1が言う「あなたはあなたのコードに数字を使用することはできません(0123456789)」
セル画Skeggs

@CelSkeggs:ああ、私はそれを忘れていました。
エソランジングフルーツ

18

Perl-スコア≈10↑↑4.1

$_=$^Fx($]<<-$]),/(?<R>(((((((((((((((((((.(?&R))*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

再びperlの正規表現エンジンを悪用して、想像を絶する量の組み合わせをグラインドします。今回は再帰降下を使用します。

式の内側のほとんどには、.無限再帰を防ぐためのベアがあり、したがって、再帰のレベルを文字列の長さに制限しています。

最終的には次のようになります。

/((((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*/
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                    .                                      \
                       .
                       .

... 671088640回繰り返され、合計で12750684161のネスティングが行われました。これは、23回のネスティングの私の以前の試みを恥ずべきことです。驚くべきことに、perlはこれを抑制しさえしません(再び、メモリ使用量は約1.3GBで安定しています)が、最初のprintステートメントが発行されるまでにかなり時間がかかります。

以下の私の以前の分析から、数字出力の数の順になることを結論付けることができる(!12750684161)671088640kは!ある左階乗K(参照A003422を)。これを(k-1)として近似できます、これは厳密に小さくなりますが、大きさは同じです。

そして、wolframalpha尋ねると

...私のスコアはほとんど変わりません。少なくとも10↑↑5になると確信していました。10↑↑410↑↑4.1の違いは、あなたが思っているよりもはるかに大きいと思います。


Perl-スコア≈10↑↑4

$_=$^Fx($]<<-$]),/((((((((((((((((((((((.*.*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

Perlの正規表現エンジンを乱用して、いくつかの組み合わせを行います。埋め込みコードブロック
(??{print})は、その結果を正規表現に直接挿入します。以来$_完全に構成されており2、S(との結果がprint常にある1)、これは一致していない、とかなりの数がありますそれらのすべての可能な組み合わせを介して、紡績Perlを送信しないことができます。

使用される定数

  • $^F-最大システムファイルハンドル、通常は2
  • $]-perlのバージョン番号5.016002

$_この場合、6710886402繰り返される数字を含む文字列です。メモリ使用量は約1.3GBで一定で、出力はすぐに開始されます。

分析

P k(n)をprintステートメントの実行回数として定義してみましょう。ここで、kはネストの数、nは文字列の長さに1を加えたものです(n + 1を書く気がしないからです)どこにでも)。

(.*.*)*
P 2(n) = [ 2、8、28、96、328、1120、3824、13056、... ]

((.*.*)*)*
P 3(n) = [ 3、18、123、900、6693、49926、372615、2781192、... ]

(((.*.*)*)*)*
P 4(n) = [ 4、56、1044、20272、394940、7696008、149970676、2922453344、... ]

((((.*.*)*)*)*)*
P 5(n) = [ 5、250、16695、1126580、76039585、5132387790、346417023515、23381856413800、... ]

(((((.*.*)*)*)*)*)*
P 6(n) = [ 6、1452、445698、137050584、42142941390、12958920156996、... ]

((((((.*.*)*)*)*)*)*)*
P 7(n) = [ 7、10094、17634981、30817120348、53852913389555、... ]

一般に、式は次のように一般化できます。

どこ

つまり、左階乗k個未満のすべての階乗の合計すなわち、K(参照A003422を)。


閉じたフォームを判別できませんでした D kE kのが、それを観察すれば、それほど重要ではありません。

そして

23のネスティングにより、次のようなおおよそのスコアが得られます。

これは実際にはほぼ正確なはずです。

ただし、これを視覚化が少し簡単な表記法にするには、内部指数の基数を概算できます。

そして、指数自体:

そして、wolframalphaに尋ねます

10↑↑4を呼び出して終了することもできます。


1
だから、これはバージョン番号が10よりも低い限り有効な解決策になりますか?
ミスターリスター

3
@MrListerはい。幸いなことに、何のメジャーバージョンよりも高い6が存在しない、とさえそれは、もともと2000年に発表されたにも関わらず、完全に「準備」であると考えられていない
PRIMO

@primo Perlのバージョン番号が10を超えると、この答えを修正する必要があることを理解していますか?;)
WallyWest 14年

3
@ Eliseod'Annunzioその日が来てもまだ生きていれば-もしあれば-戻って修正することを約束します。
primo 14年

2
10↑↑4を超える実行中のソリューション。それが印象的です。ブラボー!
トビア14年

16

Javascript、10↑↑↑↑210

100文字:

z=~~Math.E+'';o={get f(){for(i=z;i--;)z+=i}};o.f;for(i=z;i--;)for(j=z;j--;)for(k=z;k--;)o.f;alert(z)

最大限に反復することfが最適な方法であるという観察に基づいて、13 回のf呼び出しをf、を呼び出すzたびに(f増加を続けながらz)呼び出す3レベルのネストされたループに置き換えました。

私は一枚の紙で分析的にスコアを推定しました。誰かがそれを見たいと思ったら入力します。


改善されたスコア:10↑↑13

再び100文字のJavascript

z=~~Math.E+'';__defineGetter__('f',function(){for(i=z;i--;)z+=i});f;f;f;f;f;f;f;f;f;f;f;f;f;alert(z)

これにより、元の回答が3つの方法で改善されます。

  1. zグローバルスコープで定義することで、o.z毎回入力する必要がなくなります。

  2. グローバルスコープ(ウィンドウ)でゲッターを定義し、のf代わりに入力することができo.fます。

  3. より多くの反復を行うことfは、より大きな数で開始するよりも価値があります。したがって、(Math.E+'').replace('.','')(= 2718281828459045、27文字)の代わりに(= 2、11 ~~Math.E+''文字)を使用し、回収された文字を使用してfより多くの呼び出しを行います。

以下でさらに分析されるように、各反復は、大きさMのオーダーの数から、大きさ10 Mのオーダーのより大きな数を生成するため、このコードは各反復後に生成します

  1. 210〜O(10 2
  2. O(10 10 2)〜O(10↑↑2)
  3. O(10 10↑↑2)= O(10↑↑3)
  4. O(10 10↑↑3)= O(10↑↑4)
  5. O(10 10↑↑4)= O(10↑↑5)
  6. O(10 10↑↑5)= O(10↑↑6)
  7. O(10 10↑↑6)= O(10↑↑7)
  8. O(10 10↑↑7)= O(10↑↑8)
  9. O(10 10↑↑8)= O(10↑↑9)
  10. O(10 10↑↑9)= O(10↑↑10)
  11. O(10 10↑↑10)= O(10↑↑11)
  12. O(10 10↑↑11)= O(10↑↑12)
  13. O(10 10↑↑12)= O(10↑↑13)

スコア:~10 10 10 10 10 16 ≈10↑↑6.080669764

正確に100文字のJavascript:

o={'z':(Math.E+'').replace('.',''),get f(){i=o.z;while(i--){o.z+=i}}};o.f;o.f;o.f;o.f;o.f;alert(o.z)

それぞれo.fがwhileループを起動し、合計5ループになります。最初の反復のみの後、スコアはすでに10 42381398144233621を超えています。2回目の反復までに、Mathematicaは結果の桁数さえ計算できませんでした。

コードのウォークスルーは次のとおりです。

初期化

から小数点を削除して、2718281828459045から始めMath.Eます。

反復1

数字の減少シーケンスを連結し、

  • 2718281828459045
  • 2718281828459044
  • 2718281828459043
  • ...
  • 3
  • 2
  • 1
  • 0

新しい(巨大な)番号を作成するには、

  • 271828182845904527182818284590442718281828459043 ... 9876543210。

この数字には何桁ありますか?まあ、それはの連結です

  • 1718281828459046 16桁の数字
  • 900000000000000 15桁の数字
  • 90000000000000 14桁の数字、
  • 9000000000000 13桁の数字
  • ...
  • 900 3桁の数字
  • 90 2桁の数字
  • 10桁の1桁の数字

Mathematicaでは、

In[1]:= 1718281828459046*16+Sum[9*10^i*(i+1),{i,-1,14}]+1
Out[1]= 42381398144233626

つまり、2.72⋅1042381398144233625 です

唯一の最初の反復の後、私のスコアを作る2.72⋅10 42381398144233619

反復2

しかし、それはほんの始まりに過ぎません。今、巨大な数字から始めて、手順を繰り返します!つまり、数字の減少するシーケンスを連結し、

  • 271828182845904527182818284590442718281828459043 ... 9876543210
  • 271828182845904527182818284590442718281828459043 ... 9876543209
  • 271828182845904527182818284590442718281828459043 ... 9876543208
  • ...
  • 3
  • 2
  • 1
  • 0

だから、私の新しいスコア、Mathematicaは何ですか?

In[2]:= 1.718281828459046*10^42381398144233624*42381398144233625 + Sum[9*10^i*(i + 1), {i, -1, 42381398144233623}] + 1

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

Out[2]= Overflow[]

反復3

繰り返す。

反復4

繰り返す。

反復5

繰り返す。


分析スコア

最初の反復では、2718281828459045から始まる減少シーケンスの連結の桁数を計算しました。

  • 1718281828459046 16桁の数字
  • 900000000000000 15桁の数字
  • 90000000000000 14桁の数字、
  • 9000000000000 13桁の数字
  • ...
  • 900 3桁の数字
  • 90 2桁の数字
  • 10桁の1桁の数字

この合計は、式で表すことができます。

        ここに画像の説明を入力してください

ここで、Zは、開始番号を示す(例えば、 2718281828459045)とO Zは、大きさの順序を表す(例えば 15、以降Zは〜10 15)。有限和の等価性を使用すると、上記は明示的に次のように表現できます。

        ここに画像の説明を入力してください

9≈10を取ると、さらに減少します

        ここに画像の説明を入力してください

そして、最後に、用語を展開し、大きさの順序を減らして順序付けすると、

        ここに画像の説明を入力してください

私たちは、結果の大きさの順にだけ興味があるので、今、、の代用させZを「の大きさの順に番号をO Z、」すなわち 10 O Z -

        ここに画像の説明を入力してください

最後に、2番目と3番目の用語はキャンセルされ、最後の2つの用語は削除できます(サイズは簡単です)。

        ここに画像の説明を入力してください

そこから最初の用語が勝ちます。

再表示、fの大きさの順に番号をとりMとの大きさの順に約番号を生成するM(10 M)。

最初の反復は、手で簡単に確認できます。2718281828459045は15桁のf数値です。したがって、15(10 15)〜10 16の桁の数値を生成する必要があります。実際、生産数は、以前から、2.72⋅10 42381398144233625 -つまりは、10ある42381398144233625〜10 10 16

MM(10 M)の重要な要素ではないことに注意して、各反復の結果の大きさの順序は、単純な四分割のパターンに従います。

  1. 10 16
  2. 10 10 16
  3. 10 10 10 16
  4. 10 10 10 10 16
  5. 10 10 10 10 10 16

LaTeXソース

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\sum_{k=0}^{\mathcal{O}_Z-1}{(9\cdot10^k(k+1))}+1

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\frac{10-\mathcal{O}_Z10^{\mathcal{O}_Z}+(\mathcal{O}_Z-1)10^{\mathcal{O}_Z+1}}{9}+10^{\mathcal{O}_Z}

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+1

Z\mathcal{O}_Z+Z-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}+10^{\mathcal{O}_Z}-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}

あなたのスコアについての私の推測はf、数字zをそれ自体の力にするようなことをする観察に基づいています。のようなものです↑↑↑。もちろん、スコアがありません 2↑↑↑2、申し訳ありません...もっとのような、2↑↑↑5+1それはそうです。あなたはそれに同意しますか、それをリーダーボードに入れるべきですか?
反時計回りに14年

@leftaroundabout-もう一度調べてくれてありがとう。私はあなたの提案が正しいかどうかを言うのに上向きの記法に十分に満足していませんが、それでリーダーボードを更新したい場合は私のスコアの大きさの順序を計算しました(編集を参照)。
アンドリューチョン14年

優れた!私も、上向きの矢印を使用しているわけではありません。ですから、実際にはあなたは「唯一」の力の塔を持っています。ランキングで2つ順位を下げているのではないかと思います。結果を適切に分析することに対する称賛。私の見積りにはおそらくさらに多くの欠陥がありますが、少なくとも誰かが答えに何らかの順序をつけようとするべきだと感じました。
反時計回りに14年

1
あなたのスコアが間違っています。ループは整数変数に基づいており、インタープリターのワードサイズに応じて、表現可能な最大の整数よりも大きい文字列を含むため、ループを開始するたびにi=o.z;while(i--)...ループo.z時間を実行しませんo.z。インタープリターがそのような文字列をintに変換することを妨げないという利点のために、i毎回、現在の値ではなく、表現可能な最大の整数値、たとえば2 ^ 63で開始しo.zます。
トビア14年

2
@ acheong87自分自身を削除しないでください。ループ変数を2 ^ 63などに制限して、スコアを再計算するだけです。PS:分析スコアをここに残しておいてください。とても有益です!
トビア14年

14

APL、10↑↑3.4

ここに私の修正された試みがあります:

{⍞←⎕D}⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⊢n←⍎⎕D

完了までに非常に長い時間がかかりますが、現在のハードウェアで実行される100文字/バイト*プログラム(無視できる量のメモリと通常の32ビットint変数を使用)。

実際にAPLインタープリターで実行すると、数字の印刷が開始されます。完了できる場合、10×123456789 44桁の数字が印刷されます。

したがって、スコアは10である10×123456789 44 /100 3 ≈10 10 353 ≈10↑↑3.406161

説明

  • ⎕D に事前定義された定数文字列です '0123456789'
  • n←⍎⎕Dnをその文字列で表される数値に定義します:123456789(<2 31であり、したがってループ制御変数として使用できます)
  • {⍞←⎕D} 改行なしで、10桁を標準出力に出力します
  • {⍞←⎕D}⍣nn回実行します(「パワーオペレータ」です。*、/、^でもありません。数学演算ではないため、一種のループです)
  • {⍞←n}⍣n⍣n前の操作をn回繰り返すので、10桁の数字をn 2回印刷します
  • {⍞←n}⍣n⍣n⍣nそれを行いますnは3
  • ⍣nそこに44 を収めることができたので、文字列のn 44倍を印刷します'0123456789'

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*:APLは、上位128のバイト値にAPLシンボルをマッピングし、独自の(レガシー)シングルバイト文字セットに書き込むことができます。したがって、スコアリングの目的のために、ASCII文字とAPLシンボルのみを使用する N文字のプログラムは、Nバイト長と見なすことができます。


印刷された数値は、ソリューションに使用したバイト数に分割されます^ 3。、現在100で割っています。
ToastyMallows 14年

2
@ToastyMallows- 100 cubed私には(100 ^ 3)のように見えます。
ケビンフェガン14年

1
私は知っていますが、文字ではなくバイトです。
ToastyMallows 14年

1
@ToastyMallows回答の最後のメモを読んでください。
単に美しいアート

変更{⍞←⎕D}⍞←あなたが1以上を追加するために使用できる3バイト保存する⍣nとmake ⊢n←⍎⎕D⌽⍕n←⍎⎕D80倍の増加のために。での実行を許可する場合は、代わりに⎕PP←17使用して、印刷される桁数をほぼ2倍にします。×⍨⌽⍕
アダム

12

Haskell、スコア:(2 2 2 65536 -3)/ 1000000≈2↑↑7≈10↑↑4.6329710779

o=round$sin pi
i=succ o
q=i+i+i+i
m!n|m==o=n+i
 |n==o=(m-i)!i
 |True=(m-i)!(m!(n-i))
main=print$q!q

このプログラムは、100バイトの純粋なHaskellコードです。4番目のアッカーマン数を出力し、最終的にはプロセスで宇宙のすべての利用可能なエネルギー、物質、時間を消費します(したがって、ソフト制限の5秒をわずかに超えます)。


o=length[]!q最後に余分なものを取得し、その上にバイトを節約します。
Khuldraeseth na'Barya

9

Python、2↑↑11/830584≈10↑↑8.632971(クヌース上矢印表記)

print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))

おそらく、これを正常に実行するのに十分なメモリを備えたコンピューターはありませんが、それは実際にはプログラムのせいではありません。最小システム要件が満たされていれば、機能します。

はい、これはブール値のビットシフトを行っています。 このコンテキストでTrue強制さ1れます。Pythonには任意の長さの整数があります。


コードは実行されません。のみprint True<<(True<<(True<<(True<<True<<True)))で、それは19k文字列を出力します。
ゲイブ14年

その最小システム要件は何ですか?
ダヌビアセーラー14年

8
定義t=Trueしてtからafter を使用して短くすることはできませんか?
ボブ14年

1
さらに良いことに、これらのネスティングを行うループを作成してください。
単に美しいアート

これは私のために失敗します$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
ブライアンミントン

8

GolfScript 3.673e + 374

'~'(.`*

*は、乗算ではなく、文字列の繰り返しを示すため、許可されていると思います。

説明:'~'(スタックに126(ASCII値 "〜")を残します。次に、数値をコピーして文字列に変換し、文字列を126回繰り返します。これにより、126126126126...どちらが約になり1.26 e+377ます。解決策は7文字なので、で割って7^3およそのスコアを求めます3.673e+374


7

Ruby、確率的に無限、54文字

x='a'.ord
x+=x while x.times.map(&:rand).uniq[x/x]
p x

xは97に初期化されます。次に、次の手順を繰り返します。0〜1のx個の乱数を生成します。それらがすべて同じ場合、xを終了して出力します。それ以外の場合は、xを2回繰り返します。Rubyの乱数の精度は17桁であるため、任意のステップで終了する確率は(10e17)^ xの1です。したがって、nステップ内で終了する確率は、x = 1〜nの(1 / 10e17)^(2 ^ n)の合計であり、1 / 10e34に収束します。これは、どんなに大きな数字であっても、このプログラムがより小さな数字を出力することは圧倒的に少ないことを意味します。

今、もちろん、哲学的な問題は、任意のnに対してステップnで終了する可能性が10 ^ 34分の1未満のプログラムは、終了すると言うことができるかどうかです。無限の時間と電力だけでなく、プログラムに、終了の確率が減少する速度を超える速度で増加する速度で実行する能力が与えられていると仮定すると、実際には、任意に1に近い時間tで終了する。


3
これは、ほとんどの言語で同じ数の97倍を生成できない可能性のある数値ジェネレーターに依存します
ラチェットフリーク2014年

1
良い点ですので、絶えず急速に増加する計算能力を想定することに加えて、ランダム性の完全なソースとそれを使用するRuby実装を想定する必要があります。
histocrat

7

GolfScript、≈F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(126)))))))))

これは、@ Howardによる別の回答から恥知らずに改作され、@ Peter Taylorによる提案が組み込まれています。

[[[[[[[[[,:o;'~'(]{o:?~%{(.{[(]{:^o='oo',$o+o=<}{\(@\+}/}{,:^}if;^?):?)*\+.}do;?}:f~]f]f]f]f]f]f]f]f

GolfScriptについての私の理解は限られていますが*^上記のand 演算子はOPで禁止されている算術演算子ではないと考えています。

(@Howardが彼自身のバージョンを提出したい場合、私は喜んでこれを削除します。

このプログラムは、fは約だ数を計算ε 0(fは ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(F ε 0(126)))))) ))) -のFの9倍反復ε 0 - Fのε 0は関数である急成長階層グッドスタイン関数とでほぼ同じ速度を成長させます。( 0フリードマンのn(k)の機能とk倍コンウェイのの成長率は矢もfは非反復1つだけと比較して、事実上重要ではないチェーンほど早く伸びるε 0。)


'',:o;'oo',:t;単に値を代入0するoと、2tです。それが数字の不足を回避するだけであれば、さらに3文字を保存するように書くことができるので、そもそも,:o)):t;削除する理由がないことを除いて、に大幅に短縮することができます。texpr:t;{...}:f;[[[t]f]f]f[[[expr:t]{...}:f~]f]f
ピーターテイラー14年

まだポップする必要はありません o:それ[0 126]fが1より大きい[126]fので、charを保存して出力を増やすと確信しています。あなたはおそらく、物事を壊すそこに空の文字列を、残しているものの:起動する方がよいかもしれません[[,:o'~'=]
ピーター・テイラー

ああ、[あなたはスタックに他に何も持っていないので、不要です。
ピーターテイラー14年

ハ...これらの答えをスクロールして、私はこれを見...そして私は......フム...受け入れ答えに気づく
単純に美しいアート

@SimplyBeautifulArtあなたが何を言っているのか分かりませんが、受け入れられた答えはこれよりもはるかに大きな数を計算します(両方とも主張されていると仮定して)。
res

7

dc、100文字

[lnA A-=ilbA A-=jlaSalbB A--SbLndB A--SnSnlhxlhx]sh[LaLnLb1+sbq]si[LbLnLasbq]sjFsaFsbFFFFFFsnlhxclbp

十分な時間とメモリがあれば、これは15↑¹⁶⁶⁶⁶⁶⁵15前後の数値を計算します。私はもともとハイパーオペレーション機能を実装していましたが、このチャレンジに必要なキャラクターが多すぎたためn = 2, b = 0n >= 3, b = 0条件を削除し、条件をに変えn = 1, b = 0ましたn >= 1, b = 0

ここで使用される算術演算子は、加算と減算のみです。

編集:コメントで約束されているように、ここにこのコードの機能の内訳があります:

[            # start "hyperoperation" macro
lnA A-=i     # if n == 0 call macro i
lbA A-=j     # if b == 0 call macro j
laSa         # push a onto a's stack
lbB A--Sb    # push b-1 onto b's stack
LndB A--SnSn # replace the top value on n with n-1, then push n onto n's stack
lhxlhx       # call macro h twice
]sh          # store this macro in h

[            # start "increment" macro (called when n=0, the operation beneath addition)
LaLnLb       # pop a, b, and n
F+sb         # replace the top value on b with b+15
q            # return
]si          # store this macro in i

[            # start "base case" macro (called when n>0 and b=0)
LbLnLa       # pop b, n, and a
sb           # replace the top value on b with a
q            # return
]sj          # store this macro in j

Fsa          # store F (15) in a
Fsb          # store F (15) in b
FFFFFFsn     # store FFFFFF "base 10" (150000+15000+1500+150+15=1666665) in n
lhx          # load and call macro h
lbp          # load and print b

前述のように、これは、乗算およびそれ以上の基本ケースが加算の基本ケースで置き換えられるという点で、ハイパーオペレーション機能とは異なります。このコードはa*0 = a^0 = a↑0 = a↑↑0 ... = a数学的に正しいa*0 = 0およびの代わりに動作しますa^0 = a↑0 = a↑↑0 ... = 1。結果として、本来あるべき値よりも少し高い値を計算しますが、大きな数字を目指しているので大したことではありません。:)

編集:のインクリメントを実行するマクロで、偶然に数字がコードに滑り込んだことに気付きましたn=0。これを 'F'(15)に置き換えることで削除しました。これは、各増分操作を15でスケーリングする副作用があります。これが最終結果にどの程度影響するかはわかりませんが、おそらくもっと大きくなっています。


私はこのコードが何をするのか見当がつきません...それが正しいと仮定するだけです。おそらくあなたは少し説明できますか?
反時計回りに14年

今晩遅くまで時間があれば、コードを1つずつ説明します。
-Fraxtil

まあ、私はその説明に間隔を空けましたが、今それを追加しました。それが物事をクリアすることを願っています。
Fraxtil

dc-1.06.95-2はすぐに終了し、何も印刷されません。
プリモ14年

1
生成しようとする値の大きさを考えると、既存のマシンで動作するとは思わないでしょう。同じバージョンのdcを使用していますが、数秒後にセグメンテーション違反が発生します。リソース消費の基準がないため、ここでは「理論的に正しい」答えが許可されていると想定しています。
Fraxtil

6

実行時の制限はもうありませんか?OK

プログラムは最新のコンピューターで実行できる必要がありますか?

64ビットを使用する両方のソリューションlongはコンパイルするため、64ビット整数になります。

C:10 (2 64 -1)2 64より大きい、それ自体は10 10 355393490465494856447≈10 ↑↑4.11820744より大きい

long z;void f(long n){long i=z;while(--i){if(n)f(n+~z);printf("%lu",~z);}}main(){f(~z);}

88文字。

これらの数式を簡単にするために、を使用しますt = 2^64-1 = 18446744073709551615

mainf、のパラメータで呼び出しますt。これはt、値を出力するたびに時間をループし、のパラメータでt呼び出しfますt-1

印刷された合計桁数:20 * t

これらの各呼び出しfは、のパラメーターでt-1を繰り返しt、値を出力tし、のパラメーターでfを呼び出しますt-2

印刷された総桁数: 20 * (t + t*t)

3ビット整数に相当するものを使用してこのプログラムを試しました(i = 8メインコールを設定しましたf(7))。printステートメントに6725600回ヒットしました。それでうまくいく7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7ので、これが完全なプログラムの最終カウントだと思います。

印刷された総桁数: 20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))

(2 64 -1)2 64の計算方法がわかりません。その合計は(2 642 64より小さく、この計算を行うには2の累乗が必要です。したがって、(2 642 64 -1を計算します。実際の結果よりも小さいですが、2の累乗なので、他の結果と比較するために10の累乗に変換できます。

誰かがその合計を実行する方法、または(2 64 -1)2 64を10 nに変換する方法を知っていますか?

20 * 2 ^ 64 ^(2 ^ 64-1)
20 * 2 ^ 64 ^ 18446744073709551615
20 * 2 ^(64 * 18446744073709551615)
20 * 2 ^ 1180591620717411303360
10 * 2 ^ 1180591620717411303361
その指数を10の対数底2で除算して、指数の底を10のべき乗に切り替えます。
1180591620717411303361 / 3.321928094887362347870319429489390175864831393024580612054756 = 
355393490465494856446
10 * 10 ^ 355393490465494856446
10 ^ 355393490465494856447

しかし、覚えておいてください、それは印刷された桁数です。整数の値は10の累乗なので、10 ^ 10 ^ 355393490465494856447

このプログラムのスタック深度は2 ^ 64です。これは、ループカウンターを保存するための2 ^ 72バイトのメモリです。これは40億テラバイトのループカウンターです。2 ^ 64レベルの再帰でスタックに追加される他のことは言うまでもありません。

編集:誤字のペアを修正し、log2(10)により正確な値を使用しました。

編集2:ちょっと待って、printfが外にあるループがあります。それを修正しましょう。初期化を追加しましたi

編集3:やめて、前の編集で数学を台無しにしました。一定。


これは最新のコンピューターで実行されますが、すぐには終了しません。

C:10 ^ 10 ^ 136≈10↑↑3.329100567

#define w(q) while(++q)
long a,b,c,d,e,f,g,x;main(){w(a)w(b)w(c)w(d)w(e)w(f)w(g)printf("%lu",~x);}

98文字。

これは、反復ごとに1回、ビット単位のゼロの逆数、2 ^ 64-1を出力します。2 ^ 64-1は20桁の数字です。

桁数= 20 * (2^64-1)^7 = 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500

プログラムの長さを100文字に丸め、スコア=印刷数/ 1,000,000

スコア= 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494


多分。%u64ビットのコンパイルでも32ビットの数値を出力していたのでll、32ビットコンパイラで書くのを習慣にしました。
デビッドヨー14年

%lluはのためlong longであり、%lu正しいと思いますlong
トムロジック14年

一定。Force of habit:%u32ビット%lluとしてコンパイルする場合も64ビットとしてコンパイルする場合も、常に32ビット、常に64ビットです。ただし、ここでのソリューションではlong64ビットである必要があるため、その通りです%lu
デビッドヨー14年

スタック上の変数は、0に初期化されることが保証されていません。2番目のプログラムでは、関数の外に置いてください。最初のものでは、を初期化する必要がありますi
アート14年

また、長いオーバーフローは未定義の動作であり、多くの最新のコンパイラーはそれを検出した場合に最適化するだけなので、おそらく符号なしlongを使用する必要があります。
アート14年

5

R- 49 41文字のコード、4.03624169270483442 * 10 ^ 5928≈10↑↑2.576681348

set.seed(T)
cat(abs(.Random.seed),sep="")

[ここだけを再現して開始]を出力します:

403624169270483442010614603558397222347416148937479386587122217348........

2
投稿に番号を含める必要はないと思います。モバイルでも多くのスペースを占有します。
完全に人間

@totallyhuman同意します。多分最初の100桁、最大
tuskiomi

@totallyhuman OKありがとうございます:)
lebatsnok

catは、最初の引数がであるという点で奇妙な関数です...。だから、最初の名前付き引数は、に行く前に、すべてのもの...(となりますcat理由です「ED)、sepという名前でなければなりませんが-それ以外の一つはとしてそれを短縮することができcat(abs(.Random.seed),,"")
lebatsnok

5

ECMAScript 6-10 ^ 3↑↑↑↑3/884736

(3↑↑↑↑3はG(1)で、G(64)はグラハムの数です)

u=-~[v=+[]+[]]+[];v+=e=v+v+v;D=x=>x.substr(u);K=(n,b)=>b[u]?n?K(D(n),K(n,D(b))):b+b+b:e;u+K(v,e)

出力:10 ^ 3↑↑↑↑3

ヒント:

Gは、G(64)がグラハムの数である関数です。入力は整数です。出力は0で記述された単項文字列です。簡潔にするために削除されました。

KKnuthの上矢印関数a↑ n b(aは暗黙的に3)。入力はn(単項文字列)およびb(単項文字列)です。出力は単項文字列です。

u 「1」です。

v 「0000」、またはG(0)

e 「000」です。


Maximum code length is 100 bytes;それ以外の場合、これはほぼ無敵です
ランチャー

@Cruncher Aaah、私はそれを見逃した
ケンドールフレイ

ああ、今は嫌いだ。グラハムの数字の大きさを推測しようとするたびに、頭が痛い。
ランチャー14年

また、Grahamの数は定数> 10としてカウントされませんか?
serakfalcon

1
さて、私のものがイルマリのものを打ち負かすかどうかを判断します。
ケンドールフレイ14年

5

C

(ダレン・ストーンに謝罪)

long n,o,p,q,r;main(){while(--n){while(--o){while(--p){while(--q){while(--r){putchar('z'-'A');}}}}}}

n = 2 ^ 64桁の数字(9 ...)

l = 100文字のコード

スコア≈1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570570≈10↑↑3.2974890744

[スコア= n ^ 5 / l ^ 3 =(10 ^(2 ^ 320)-1)/(100 ^ 3)=(10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1)/(10 ^ 6)]

私はこの答えに対して容赦なくむち打たれるに値するが、抵抗することはできなかったことに注意してください。明らかな理由から、私と同じようにstackexchangeで行動することはお勧めしません。:-P


編集:次のようなものに行く誘惑に抵抗することはさらに難しいだろう

long n;main(){putchar('z'-'A');putchar('e');putchar('+');while(--n){putchar('z'-'A');}

...しかし、意図されているが不特定のルールは、数字を構成する数字の全体を印刷する必要があるということだと思います。


1
#DEFINE C while(-long n、o、p、q、r、s、t; main(){Cn){Co){Cp){Cq){Cr {Cs {Ct){putchar( 'z' -'A ');}}}}}}}}}
RobAu 14年

@RobAuあなたは天才です!それを答えてください。私はそれが勝者になると確信しています。あなたはカップルを忘れたと思いますが)、それは大丈夫です、あなたは現在96文字しかないからです。
アンドリューラーソン

皮肉を受け取らなかったすべての人のために:さらに良い解決策についてはcodegolf.stackexchange.com/a/18060/7021を参照してください;)
RobAu 14年

5

新ルビー:スコア〜F ω ω2 +1(126 2 2 126

ここで、f α(n)が急成長階層です。

n=?~.ord;H=->a{b,*c=a;eval"b ?H[b==$.?c:[b==~$.?n:b-(b<=>$.)]*n+c]:p(n+=n);"*n};eval"H[~n];".*n*n<<n

オンラインでお試しください!

これら*nは単なる文字列と配列の乗算であるため、問題ありません。

未ゴルフコード:

n = 126
H =-> a {
    b, *c = a
    n.times{
        case b
        when nil
            puts(n += n)
        when 0
            H[c]
        when -1
            H[[n]*n+c]
        else
            H[[b.-b<=>0]*n+c]
        end
    }
}
(n*n<<n).times{H[~n]}

ここでb.-b<=>0は整数を返し1に近い0よりはb


説明:

nのすべての呼び出しの開始時に印刷しHます。

H[[]]doubles nntimes)、つまりn = n<<n

H[[0,a,b,c,...,z]]呼び出しH[[a,b,c,...,z]]n回)。

H[[k+1,a,b,c,...,z]]呼び出しH[[k]*n+[a,b,c,...,z]]n回)、ここで[k]*n = [k,k,...,k]

H[[-1,a,b,c,...,z]]呼び出しH[[n]*n+[a,b,c,...,z]]n回)。

H[[-(k+1),a,b,c,...,z]]呼び出しH[[-k]*n+[a,b,c,...,z]]n回)。

H[k] = H[[k]]

私のプログラムはを初期化してn = 126から、H[-n-1]126 2 2 126回呼び出します。


例:

H[[0]]H[[]]適用するn = n<<nn回)を呼び出します。

H[[0,0]]H[[0]]n回)を呼び出します。

H[[1]]H[[0]*n]n回)を呼び出します。

H[[-1]]H[[n]*n]n回)を呼び出します。

H[[-1,-1]]H[[n]*n+[-1]]n回)を呼び出します。

H[[-3]]H[[-2]*n]n回)を呼び出します。

オンラインでお試しください!


他のクールなものについては改訂版をご覧ください。



実際には103バイトで、末尾に改行があると思います。
Rɪᴋᴇʀ

@Rikerここからコピーして貼り付けたと思います。2行目に印刷できない文字があるため、104バイトであることに注意してください。
単に美しいアート

@SimplyBeautifulArtああ、わかりました。キャラクターをコピーしたと思った。ごめんなさい。
Rɪᴋᴇʀ

@Riker Nah、Stackexchangeのおかげで目に見えないキャラクターをどこにでも隠せないため、そこさえありません。
単に美しいアート

4

Haskell-結果に20回適用されるアッカーマン関数-99文字

これは、ackermann関数に基づいて思いつくことができる最高のhaskellソリューションです。nmのソリューションとの類似点に気付くかもしれません。i= round $ log piはそこからインスピレーションを受け、残りは偶然です:D

i=round$log pi
n?m|m<i=n+i|n<i=i?(m-i)|True=(n-i)?m?(m-i)
a n=n?n
b=a.a.a.a
main=print$b$b$b$b$b$i

ackermann関数をそれ自体で20回実行します。

  • 1、
  • 3、
  • 61、
  • a(61,61)、
  • a(a(61,61)、a(61,61))---これを2(61)または4(1)と呼びます---
  • 3(61)
  • ...
  • 18(61)、または20(1)。これは約g 18であると思います(以下を参照)。

推定に関しては、ウィキペディアは言います:

a(m、n)= 2↑ m-2(n + 3)-3

このことから、a3(1)= a(61,61)= 2↑ 59 64 + 3がわかります。これは、g3 = 3↑ 4 3 より明らかに大きいです。その後、各レベルは次の処理を実行します(nの重要でない定数を破棄します)。

  • g n = 3↑ g n-1 3
  • a n〜 = 2↑ a n-1(a n-1

これらがほぼ等しい場合、20(1)〜= g 18です。a nの最終項(a n-1)は3よりもはるかに大きいため、潜在的にg 18よりも高くなります。1回の反復でそれが後押しされ、レポートが返されるかどうかを判断できるかどうかを確認します。


分析は正しく、g <sub> 18 </ sub>は適切な近似です。
単に美しいアート

length"a"数バイトを節約し、別のバイトを許可します.a
Khuldraeseth na'Barya

4

x86マシンコード-100バイト(MSDOS .comファイルとしてアセンブル)

注:ルールを少し曲げることがあります

このプログラムは、2 (65536 * 8 + 32)ナインを出力し、スコアを (10 2 524320 -1)/ 1000000にします。

カウンタとして、このプログラムはスタック全体(64kiB)と2つの16ビットレジスタを使用します。

アセンブルされたコード:

8A3E61018CD289166101892663018ED331E4BB3A01438A2627
018827A0300130E4FEC4FEC4FEC410E4FEC400E431C95139CC
75FB31D231C931DBCD3F4175F94275F45941750839D4740D59
4174F85131C939D475F9EBDD8B266301A161018ED0C3535858

アセンブリ:

ORG 0x100

SECTION .TEXT
            mov bh, [b_ss]
            mov dx, ss
            mov [b_ss], dx
            mov [b_sp], sp
            mov ss, bx
            xor sp, sp
            mov bx, inthackdst
            inc bx
            mov ah, [inthacksrc]
            mov [bx], ah
            mov al, [nine]
            xor ah, ah
            inc ah
            inc ah
            inc ah
inthacksrc: adc ah, ah
            inc ah
            add ah, ah
            xor cx, cx
fillstack:  push cx
nine:       cmp sp, cx
            jnz fillstack
regloop:    xor dx, dx
dxloop:     xor cx, cx
cxloop:     xor bx, bx
inthackdst: int '?'
            inc cx
            jnz cxloop
            inc dx
            jnz dxloop
            pop cx
            inc cx
            jnz restack
popmore:    cmp sp, dx
            jz end
            pop cx
            inc cx
            jz popmore
restack:    push cx
            xor cx, cx
            cmp sp, dx
            jnz restack
            jmp regloop
end:        mov sp, [b_sp]
            mov ax, [b_ss]
            mov ss, ax
            ret

b_ss:       dw 'SX'
b_sp:       db 'X'

明らかにこれを実行したことはありません。コードを上書きしてクラッシュします。
ジョシュア

4

C

ファイルサイズは45バイトです。

プログラムは次のとおりです。

main(){long d='~~~~~~~~';while(--d)printf("%ld",d);}

そして、生成される数は10 ^(10 ^(10 ^ 1.305451600608433))より大きくなります。

std outにリダイレクトしたファイルは現在16 Gbを超えており、まだ成長しています。

より良いコンピューターがあれば、プログラムは妥当な時間で終了します。

私のスコアは、倍精度浮動小数点では計算できません。


4

GNU Bash、10 ^40964096²/ 80 ^ 3≈10↑↑2.072820169

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C count=$C$C|tr \\$((C-C)) $SHLVL'

合理的なシステムではC = 4096。SHLVLは小さな正の整数です(通常、/ bin / shがbashかどうかに応じて1または2になります)。

64ビットUNIXのみ:

スコア:〜10 ^(40964096409640964096 * 40964096409640964096)/ 88 ^ 3

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C$C$C$C count=$C$C$C$C$C|tr \\$((C-C)) $SHLVL'

SHLVLはsubbashとしてのbashのレベルである:bash -c 'bash -c "echo \$SHLVL"'
F. HAURI

stat --printf動作しません。試してくださいstat -c %s
F.ハウリ

@ F.Hauri:--printfは機能しますが、-cも機能するため、数バイト削ります。ありがとう。
ジョシュア

4

C、10 ^ 10 ^ 2485766≈10↑↑3.805871804

unsigned a['~'<<'\v'],l='~'<<'\v',i,z;main(){while(*a<~z)for(i=l;printf("%u",~z),i--&&!++a[i];);}

258048符号なし整数の配列を作成します。unsigned longは、プログラムが長すぎるため、符号なしlongにはできません。未定義の動作を使用したくないため、これらは署名されていません。このコードは適切なC(main()からの戻りがないことを除く)であり、通常のマシンでコンパイルおよび実行されますが、長時間実行されますが。このサイズは、非ASCII文字を使用せずに法的に表現できる最大のサイズです。

最後の要素から開始して配列をループします。の数字を出力し2^32-1、要素をインクリメントし、要素が0にラップされていない場合はループをドロップします。このようにして(2^32 - 1)^254048 = 2^8257536、ループを行い、毎回10桁を出力します。

以下は、より限られたデータ範囲での原理を示すサンプルコードです。

#include <stdio.h>
unsigned int a[3],l=3,i,f;

int
main(int argc, char *argc){
        while (*a<4) {
        for (i = l; i-- && (a[i] = (a[i] + 1) % 5) == 0;);
            for (f = 0; f < l; f++)
                printf("%lu ", a[f]);
            printf("\n");
        }
}

結果は、およそ10 ^ 10 ^ 2485766を100万で割ったもので、それでもなおおよそ10 ^ 10 ^ 2485766です。


最高のC実装。258048の配列を使用できるのに、なぜ5つの変数を使用するのですか?
プリモ14年

4

Powershell(2.53e107976 /72³= 6.78e107970≈10↑↑1.701853371)

これには、実行に5秒以上かかります。

-join(-split(gci \ -r -EA:SilentlyContinue|select Length))-replace"[^\d]"

現在のドライブ上のすべてのファイルのバイト長を取得して連結します。正規表現は、数字以外の文字を取り除きます。


ルール1では、数字は許可されていません0
カイルカノス14年

くそー、私もやる。文字数が増えます。
ハンドEフード14年

-ea(+'')サイズを小さくするために使用できます(''数値に変換される0の列挙値SilentlyContinue)。\Dと同じ置換正規表現に使用できます[^\d]。そして、%{$_.Length}代わりにselect Length列ヘッダーを削除する代わりに使用できます。そして、あなたはを取り除くことができます-split-replace同様、とあなたを残して-join(gci \ -ea(+'')-r|%{$_.Length})いることは37文字短いです(括弧が原因でとにかく必要とされているので、私はまた、パラメータを並べ替え+'')。
ジョーイ14年

4

Python 3、スコア= ack(126,126)/ 100 ^ 3

g=len('"');i=ord('~');f=lambda m,n:(f(m-g,f(m,n-g))if n else f(m-g,g))if m else n+g
print(f(i,i))

f関数はackermann関数で、呼び出すのにちょうど十分なスペースがあります。

編集:以前は「else n + 1」でしたが、これはチャレンジルールに違反していました。SimplyBeautiful Artへの称賛です。


に変更f(m-g,g)して番号を増やすことができますf(m-g,m)
単に美しいアート

またはf(m-g,i)。また、最初の行の最後に数字を使用します。私はあなたが使用するつもりだったと信じていますn+g、それから私は指摘するn+nでしょうが大きくなります。
単に美しいアート

Trueのlen( '"')を変更することで、数バイトを節約できます
ブライアンミントン

そして、より大きな数値にはord( '^?')(^?はDEL文字、ASCII 127)を使用します。編集は気にしません、それは「印刷可能」ではありません。
ブライアンミントン

@BrianMinton誰がそれが印刷可能でなければならないと言うのですか?
単に美しいアート

4

JavaScript 98文字

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(m.E<<k<<k<<k<<m.E);i+=j)a+=k;alert(a)

2.718e + 239622337≈10↑↑2.9232195202を生成します

2.718e + 239622331≈10↑↑2.9232195197をわずかに上回るスコアの場合

ブラウザがクラッシュすることなく作成できる最大のサイズです。

(console.log(a)は完全な出力を表示します)

これらを実行しないでください:

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(k<<k<<k<<k<<k<<k<<k);i+=j)a+=k;alert(a)

2.718 + e121333054704≈10↑↑3.0189898069(別名2.718 * 10 ^(1.213 * 10 ^ 12)を出力して、長い回答と比較します:

より極端なバージョン、ブラウザがクラッシュしなかった場合:(80文字)

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<k;i+=j)a+=k;alert(a)

e * 10 ^(10 ^ 19)≈10↑↑3.106786869689と同じサイズの数値を作成します

編集:更新されたコードの元のソリューションは2.718e + 464のみを生成しました


3

Python 3:98文字、≈10↑↑256

変数引数関数の使用:

E=lambda n,*C:E(*([~-n][:n]+[int("%d%d"%(k,k))for k in C]))if C else n;print(E(*range(ord('~'))))

事実上、Eは最初の引数をデクリメントし、残りの引数を増やします。ただし、引数に-1を入れる代わりに引数をドロップします。すべてのサイクルが最初の引数を減らすか、引数の数を減らすので、これは終了することが保証されています。使用される増加関数はint( "%d%d"%(k、k))で、k ** 2 + 2 * kと10 * k ** 2 + kの間の結果を返します。私のコードでは*記号を使用していますが、乗算ではありません。規則の明確なポイントはシンボル自体ではなく特定の操作を制限することだったので、可変数の引数を扱うために使用されています。

Eがどれだけ速くなるかのいくつかの例:

E(1,1) = 1111
E(0,1,1) = E(11,11) = (approx) 10^8191
E(1,1,1) = E(1111,1111) = (approx) 10^(10^335)
E(2,1,1) = E(11111111,11111111) = (approx) 10^(10^3344779)

そのうちの最初の2つだけが、妥当な時間内にコンピューターで実行可能です。

次に、EがE(*range(ord('~')))- によって呼び出されます。

E(0,1,2,3,4,5, ... ,121,122,123,124,125)

私はこれがどれほど大きいか完全にはわかりません(私はそれを無駄に近づけようと試みてきました)-しかしそれが〜本当に〜大きいことは明らかです。

例として、約12サイクルで、結果は次のようになります:(技術的にはもう少し)

E(2**27211,2**27211,2**27212,2**27212,2**27212,2**27212,2**27213,2**27213,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636)

結果の推定:

増加するステップをで近似するlambda k: 10 * k**2と、関数は次のように記述できます。

E(n, C₁, C₂, ... Cᵥ) ≈ E(10^(n²/2) ⋅ C₁²ⁿ, 10^(n²/2) ⋅ C₂²ⁿ, ... 10^(n²/2) ⋅ Cᵥ²ⁿ)
                     ≈ E(10^((10^(n²/2) ⋅ C₁²ⁿ)²/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )
                     ≈ E(10^((10^n² ⋅ C₁⁴ⁿ)/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )

ここで行っている関連することは、10の累乗の塔を構築することです。そのため、最終的なスコアは10↑↑256に近似できます。

(部分的ではあるが)より良い結果推定:

これは、10 * k**2他の推定と同じものを使用します。

E(0, b) = 10 * b**2
E(1, b) = 10 * (10 * b**2)**2 = 10 * 100 * b**4 = 10**3 * b**4
E(2, b) = 10 * (10**3 * b**4)**2 = 10 * (10**6 * b**8) = 10**7 * b**8
E(a, b) = 10**(2**(a+1)-1) * b**(2**(a+1))

以前の推定では、次のようになります。

E(a, b) = 10**(a**2/a) * b**(2*a)

それが使用するため、実際の値よりも著しく小さいa**2代わりに2**a10および使用するa*2代わりに2**aBのため。


私はあなたの結果を見積もった。
反時計回りに回転するのをやめた

私はその結果に反対しなければなりません。推論を入力する間。
セルスケッグス2014年

いくよ 更新で述べたように、推定値は実際の値よりもかなり小さいようです。
セルスケッグス14年

十分に公平ですが、このリストの回答をスコアリングリストに含めるには、単一のステップだけでなく、再帰的帰納的/一度の推定が必要です。あなたのスコアは再帰的なものよりも優れていると確信していますが、Ilmari Karonen(これはとにかく非常に拡張可能で、現時点では18文字しか使用していません)よりも良くないので、私の推定は十分に良いと思いますスコアリングの目的。
反時計回りに回転するのをやめた

同意する。私はそれでもっと働けるかどうかを見て、少なくとも結果のより正確な下限を考え出すでしょう。
セルスケッグス14年

3

C(スコア≈10 ^ 20 000 000 000≈10↑↑3.005558275)

  • 最大20 GBの出力
  • 41文字(41 ^ 3は何も意味しない)
main(){for(;rand();printf("%d",rand()));}

rand()出力にもかかわらず、シード関数がないため、決定論的です。


運が悪い場合、プログラムは1回の反復後に停止しrand()、終了条件としての呼び出しにより非決定的になります。さらにrand()、すべての反復で呼び出すと、非常に遅くなります。代わりにLONG_MAX定義されたようなものを使用してくださいlimits.h
klingt.net 14年

non deterministicあなたが書いたような種がないので、私は後ろを取ります。
klingt.net 14年

1
どの程度~' 'の代わりにrand()、と印刷されましたか%u?ソースが2バイト少なく、値が大きい。
MSalters
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.