これはかなりシンプルです。
できるだけ多くの出力を生成しながら、できるだけ短いプログラムを作成します。
面白くするために、無限の出力を生成するプログラムは失格となります。
勝者は、最大の出力サイズ/コードサイズ比を持つプログラムです。
結果は、私のコンピューターで動作するものに基づいています。これは、Mac OS X 10.7.5を実行し、Intel Core i5と8GBのメモリを搭載したMacです。
\n
これはかなりシンプルです。
できるだけ多くの出力を生成しながら、できるだけ短いプログラムを作成します。
面白くするために、無限の出力を生成するプログラムは失格となります。
勝者は、最大の出力サイズ/コードサイズ比を持つプログラムです。
結果は、私のコンピューターで動作するものに基づいています。これは、Mac OS X 10.7.5を実行し、Intel Core i5と8GBのメモリを搭載したMacです。
\n
回答:
'a'*9**9
さらに**9
sを追加することで、比率を無限大にする傾向があります。
'a'*9**9**9
'a'*9**9**9**9
etc.
例えば:
'a'*9**9**9**9**9**9
これは、比が〜10 10 10 10 10 8.568(想像以上に大きい数)です。
**9
のs を追加すると、最終的にはそうなりInfinity
ませんか?
**9
、出力がになる前に配置できるの最大数を把握することInfinity
です。
したがって、これらはすべて、非常に少ないコードで多くの出力を生成する優れたプログラムですが、どれも実際には短いものではありません ...
brainfuck、5文字、255バイトの出力
-[.-]
これは、brainfuckが本当に優れている唯一の使用例だと思います。これが勝つことはないと思いますが、Pythonの例よりもうまくできるとは思えません。それだけでなく...
ブレインファック、4文字、無限出力
-[.]
これは、最も短い無限出力プログラムだと思います。
実際、ちょっと待ってください。私の仲間は本当に良いものを思いついただけです。
Python、80バイト、不明な量の出力
from datetime import datetime
while datetime.now()!=datetime.max()
print "This will probably get disqualified"
このプログラムは間違いなく最終的に停止しますが、約8,000年後にのみ停止します。出力される文字の正確な数は、コンピューターが文字を生成できる速度によって異なります。
.
です。0文字の無限ストリームを出力します。
print+($]x9e7)x26e7
1.7 GBを超えるメモリを使用せずに、1つの印刷ステートメントで166ペタバイト。
この挑戦をもっと面白くしたいくつかのことが、私が思ったよりもありました。Perlは、1 GBを超えるメモリを単一のリストに割り当てることを拒否しているようです。したがって、内部文字列への4バイトのスカラー参照は、26e7≈2 28回しか繰り返されません。$]
「古いperlバージョン」番号で、文字列として8バイト長で、に似てい5.016002
ます。
より多くのシステムメモリがあれば、より高くなるはずです。完全な8GBが実際に利用可能であると仮定すると、$]x9e8
代わりに1.62エクサバイトを出力する内部文字列に使用できるはずです。
999999**99999
非常に大きな数を別の非常に大きな数の累乗で単純にレイズします。実行には約20秒かかります。数が無限になるので、数を増やすことはできません。
(私はこれを以前に行いました、私は現在さらに長い出力のためのループを作ることに取り組んでいます)
編集:やった!
a=999999**99999;a.times{p a}
(明らかな理由により)未テストですが、最初の数値は約1e599994であり、これに599994を掛けると、約6e599999になります。理論的には機能しますが、コンピュータがクラッシュするかどうかはわかりません。免責事項:コンピュータに何らかの害を及ぼす場合、私は責任を負いません:P
もちろん、続けることができます:
a=999999**99999;a.times{a.times{p a}}
など、しかし、私はどのコンピュータでもそれを処理できるとは思えません:P
無限の入力が許可された場合、
cat /dev/random
そうではないので、
head -99 /dev/random
(25128出力:20入力= 1256.4:1)
私はLinuxボックスを使用していませんが、次のようなことができると思います
timeout 99d cat /dev/random
と巨大な出力を取得します。(GigaWattの応答による)
timeout 99d
。はい、99日間のランタイムです。また、これについては定かではありませんが、最終的にはエントロピープールを空にする/dev/random
とブロックされますので、/dev/urandom
より適切な場合があります。(私はなんとかで40 MB /秒、urandom
128 KB /秒しか得られませんでしたrandom
)
9
実際の文字数はインタープリターによって異なりますが、たぶん10000くらいくらいでしょうか?
for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new WebClient().DownloadString(@"http://bit.ly/dDuoI4"));}
これは、ウィキペディアの米国最高裁判所の法務書記(4344904文字)を18446744073709551615回ダウンロードして印刷するだけです。
for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}
ですか:2147483647文字* 18446744073709551615回= 39614081238685424720914939905/81 =>比率:489062731341795366924875801
'=~~~~,~~~~,~~~~:''=|*<%[%]'=',',',':''&*-~|:'''=|*<%[%]''&',',',':'''&*-~|:''''=|*<%[%]'''&',',',':''''&*-~|:''''&':''=|*<%[%]@~~~~,~~~~,~~:''&*-~|:''&':
動作方法:最初に、'
4 ^ 3または64 ''
に設定'
します。次に、'
^ 4 *に設定する関数を作成します(*は入力です)。'''
次に''
、入力を'
^ 4 として呼び出す関数を作成します。次に、''''
関数呼び出し作られ'''
て'
、それの入力として^ 4。''''
次に、64の入力で呼び出されます。最後に、''
スペースを*回出力する関数に変更されます。次に、これはの入力で呼び出されます'
。
、最終的には、判明し'
ている 64個の4 4 4 64個の、そして私のプログラムの長さがある154。それをWolfram | Alphaにパンチすると、10 10 10 10 10 1.583328920493678が吐き出されます。これは計算する必要さえありません。何桁含まれているのかさえわかりませんが、64 4 4には463が含まれています。単項の明示的な数値のみをサポートし、指数関数を持たない言語には非常に便利です; 3
これをもっと大きくすることもできましたが、やり過ぎです。
for(s=i=61;s=btoa(s),i--;)s
このコードは、61
Base64への入力を61回再帰的にエンコードします。長さの入力n
をBase64にエンコードすると、長さの出力が生成n * 8/6
され、4の倍数に切り上げられます。
これは、Base64エンコード機能をネイティブでサポートするJavaScriptコンソール環境から実行する必要がありますbtoa
。(Node.jsではなく、すべての最新のブラウザー。)注:Chromeはを超えて実行できませんがi=61
、Firefoxはにしか到達できませんi=60
。また、Chromeのコンソールは大きすぎるため、実際には出力を表示できませんが、実行すると結果のサイズを確認できます。
for(s=i=61;s=btoa(s),i--;)s.length
このプログラムは、最大のために実行させた場合i=99
、それはサイズの仮想的な出力生み出す14,566,872,071,840周り5400億(5.39e11)の仮定の割合のために、(14500000000000、14.5e12)文字を。
a=1e99.times;a{a{a{a{a{puts'a'*99}}}}}}}}}}
それほど短くはありませんが、出力ではそれを補正します。これは、まだ測定できていないほどです。
1e127
文字出力に関するものです。とにかく、変数に割り当てると、コードサイズが約半分になります。また、1e99
スペースが少なくて済みます。また、使用map
の代わりにeach
、使用puts
の代わりにprint
、間の余分な空白を削除print
して"ier...
。また、大きな文字列を'a'*999
(または?a*999
)に置き換えることもできます。概要:これはまったくゴルフではありません
(0..1e99).map
変数に代入しないのですか?いいねa=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
a=(0...1e99).map
。あなたはそれを少し後退させたいかもしれません。0..1e9
約4GBを使用します。
以下はMathematica入力の画像です。私はそれをSEでレンダリングする方法を理解していません。
以下は、出力の桁数を示すスクリーンショットです。IntegerDigits
出力を数字のリストに変換します。Length
桁数を数えます。
入力するキーストローク:9、ctrl6、9、ctrl6、9、ctrl6、9、ctrl6、9....
Befungeのスタックは理論的には無限ですが、スタックに格納される数は、符号なし長整数(ここでは32ビットと想定)のサイズに制限されています。したがって、Befungeインタープリターにとって、(x + 1)> xはxの適切な値に対してfalseです。この事実を使用して、最初にすべての値をゼロから最大まで(2回、3分の1ごとに1)プッシュし、次にスタックの各値について出力してデクリメントし、ゼロに達したときにポップします。最終的にスタックが空になり、プログラムが終了します。私は出力サイズが少しずれているかもしれませんが、それはその球場のどこかにあるはずです。
>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@
main(){for(int i=1<<31;i<~0;)puts("!");main();}
65090は正確ではなく、スタックサイズに依存することに注意してください。プログラムは、クラッシュすると最終的に停止します。また、私はputs()にますます長い文字列を入れて配給量を無限大に近づけることができましたが、それはかなり奇妙に思われます。
編集:ymbirttは私にそれを打ち負かしました._。
私はこれが実際に短いわけではなく、他のPythonの回答がはるかに長いことを知っていますが、これを試してみることにしました。
プログラムは約8000年実行されますが、ご存知のとおり、かなり長い時間です。
それが行うことは、datetime.datetime.now()
関数を使用して現在の時刻を継続的に取得し、それをと比較すること9999-12-31 24:59:59.999999
です。これは、Pythonの最大日付がわかっている限りです。
ある場合で等しい、プログラムが停止します。そうでない場合は、を継続的に出力しますa
。
import datetime
while 1:
if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
else:print("a")