無限の出力を生成する最短コード


121

無限の出力を生成できる最短のコードを記述します。

それで全部です。コードは、ある時点で出力の生成を停止した場合にのみ失格となります。いつものようにコードゴルフでは、最短のコードが勝ちます。

以下は、本当に賢いと思う答えのリストです。

リーダーボード


118
失格すべての答えがあるため、いくつかの点で地球が太陽に飲み込まされ、いくつかの点で宇宙は死んでしまう:P
ドアノブの

17
「コンピューターがクラッシュするまで無限」はカウントされますか?<_ <
イズカタ

5
Pietで書いた場合、他のプログラムが使用したテキストのピクセルをカウントできますか?Pietプログラムの可能な最小の繰り返しは6ピクセルだと思います。「オフ」ピクセルがまだカウントされている場合、Befungeに勝ちます。
DampeS8N

9
@Izkataしたがって、コンピューターをクラッシュさせる回答も許可されます。D
ɐɔıʇǝɥʇuʎs14年

7
@Doorknob本当に問題なのは、有限の時間で無限の出力を生成することです。簡単に聞こえます。
-Sanchises

回答:


212

Befunge(1)

.

0永遠に出力します。Befungeでは行が折り返さ0れ、空のスタックからポップすると取得できますので、それは機能します。


6
勝者はいると思います。
primo

96
私はここのどこかに短いJavaクラスがあったことを誓います。+1
l0b0

56
この1つの点は、次の2つの答えを合わせたものよりも評判になりました。
マリヌス

3
ああ...それは公平ではありません:)このようにしましょう:その画像のサイズを数ピクセル減らし、非常に小さく表示します。でもそれを呼び出す?:)
ベンジャミンポッズン14年

4
なぜこれが受け入れられた答えではないのですか?
クラウディウ14

101

x86 .COM実行可能ファイル、7

16進数で:

b8 21 0e cd 10 eb fc

他のシステムには、キロバイト以上のシステムライブラリとランタイムが必要です。基本に立ち返って:

$ echo -ne '\xb8!\xe\xcd\x10\xeb\xfc' > A.COM
$ dosbox A.COM

出力

2番目のバイト(0x21、または!)を変更して、出力を変更できます。

出力にBIOS割り込みを使用します。DOSは必要ありませんが、QEMUをセットアップしていません。


説明

マシンコードは次のアセンブリに対応しています:

        mov     ax, 0x0e21
again:  int     0x10
        jmp     again

出力はすべてint呼び出し内にあります。この参照によると、AHの0x0eを含むint 0x10はALのバイトを画面に出力します。

レジスタAXが上位バイトのAHと下位バイトのALで構成される16ビットワードであることを知っているので、それらを一緒にロードすることで余分な負荷(したがってマシンコードのバイト)を節約できます。


2
ワオ。それは本当に良いです
tbodt 14年

46
マシンコードの長さを短くすることは、高水準言語よりも多くのポイントに値します。
14年

12
これは、本当の意味で最も短いコードです。
ミクロ

4
動作するだけでなく、他のすべてのエントリより高速に動作します。:)
ターネブリムホール14

14
もちろんにより、最も重要な基準はどれ@ThaneBrimhall はるかに無限ループのための私のコンピュータがハングアップする場合は...、私はそれが最も効率的な方法でそれをやってみたいです!
クラテンコ14

91

Windowsバッチファイル、2文字

%0

自分自身を無限に呼び出します。


12
2番目の場所、男を閉じます。よくやった。Batchが勝った1つの答えを見たことがあります。
unclemeat

本当に素晴らしい!!!
Qwertiy

これはすごい!
パトリックパーセル

動作方法:%0はを持たない@ため、常にのようなものを出力します...> %0。ただし、これは再帰的であるため、RAM全体を使い果たす可能性があります。
エリックアウトゴルファー

2
@EriktheOutgolfer かもしれない?無限再帰が原因で、ある時点でどのようにクラッシュしないのでしょうか?私はこれが複数時間続くことがわかりません
phil294

68

Befunge 98-2

,"

永遠の出力「、、、、、、、、、、、、」。


2
実際にはいくらか賢い。
tbodt 14

ありがとうございました。奇妙なのは、 "、バージョンが最も一般的なb98実装を使用してスペースを出力する(または"。出力32 32 32))。どこから入手したのかわかりません。
AndoDaan 14

1
82,395件の本当にくだらない回答に埋もれているのは残念です。
tbodt 14

7
@tbodtまあ、仕様によると、私の小さなプログラムはその道を切り開く永遠のすべてを持っています。だから... ...指が交差...
AndoDaan

@AndoDaan:」、コンマとINT_MAX-2のスペースの文字列を作成し、最後のスペースを印刷し、スタックはコンマINT_MAX-3のスペースではなく、本当に効率的に自身を記入しますので。。
YoYoYonnY

62

sh、3バイト

yes

y連続出力


10
しかしyesバッシュの一部(厳密に)外部バイナリではなく、。
ボブ

55
bashでは、(ほぼ)すべてが外部バイナリです。
ヨハネ

5
通常、エイリアスy=yesはなく、システムが難解でない場合は、それyesが自分にあると見なすことができます$PATHGNU Core Utilitiesを参照)。ロジックを使用すると、すべてのソリューションで奇妙な星座を推測できます。
klingt.net

5
右が、これはないだけbashの能力:I'ts POSIXシェルの基本的な部分コアutilsの。(すなわち:shのタイトルを変更してください:3文字 ;-)
F. Hauri 14年

2
テクノサウルスが言うように、busyboxではビルトインですが、shではそうではないので、代わりにsh + coreutilsと言う必要があります。
エリックアウトゴルファー

42

Haskell:8文字

古いスレッドですが、楽しいものは

 fix show

Haskellでは、印刷します

\\\\\\\\\\\\\....

基本的に実行されているので永遠に

 let x = show x in x

それxは文字列であることを知っているので、最初の文字は"であるため、これはでエスケープする必要がありますが、などでエスケープする必要\"があることを知ってい\ます\\\x


... ワオ。今、私はfix$showもっと美学だったのだろうかと思います:
ジョンドヴォルザーク

7
これにはが必要import Data.Functionであり、文字列を出力するのではなく返すため、文字カウントの公平性に疑問があります。また、文字列は実際には「\」\\\ "\\\\\\\" \\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\\\\\…"
Anders Kaseorg

36

Windowsバッチファイル、8文字

:a
goto a

1
これは無限の出力を生成しませんか?
ドアノブ

38
それはありません... @echoせずにオフに、あなたはそれを閉じるまで、それは「後藤A」印刷します
パトリック・パーセル

11
私たちは、この辺りのMOR BATを必要とする
Einacio

35
私は、10個の文字を数える::a\r\ngoto aWindowsはCRLFを使用しているため
wchargin

1
@WChargin 16進エディタを使用してチェックしました。3a 61 0a 67 6f 74 6f 20私のWindows 8で動作します...:P
YoYoYonnY

32

Brainfuck、4

+[.]

あるいは、

-[.]

8
印刷可能な文字で\x01\xFFありません。私はそれが必要条件ではなかったと思います、しかし: - /
ジョン・ドヴォルザーク

印刷可能な文字を出力する方法は、+をに置き換えることです。ただし、入力が必要です
-Prismo

31

Java、54文字

Javaでの最善の試み:

class A{static{for(int i=0;i<1;)System.out.print(1);}}

7
機能的、ルールに準拠、ゴルフ。なぜ投票されたのか疑問に思う。
マナトワーク

14
Javaは古典的なfor(;;)パターンを禁止していますか?どうwhile(true)
-CodesInChaos

17
@ CodesInChaos、Javaは通常これらのパターンを許可しません。通常、これらのパターンはよりクリーンで慣用的なものと考えます。ここでは、コンパイラーを通過する無限ループをこっそりしようとしています(これらの形式は、コンパイラーが静的{}ブロックが終了しないことを訴えます)。
リッチスミス

2
はい@Mechanicalsnail、静的ブロックは、Java 7以降でのみ実行することができません
Fabinout

1
@OliverNiしかし、staticブロックを使用することはできません。
Okx

30

バッシュ、4バイト

$0&$

./forever2.sh: line 1: $: command not found継続的に出力します。

$0バックグラウンドであるため、各親は無効なコマンドの後に死に、$スタック/メモリは食い尽くされず、これは無期限に続くはずです。

奇妙なことに、出力は時間の経過とともに徐々に遅くなります。 topシステムのCPU使用率は100%に近いが、メモリまたはCPUホグプロセスが存在することを報告します。おそらく、カーネル内の一部のリソース割り当てはますます効率が低下します。


2
STDOUTまたは類似のかもしれない行動...
masterX244

1
リソースの解放は、プロセスの分岐と競合します/ PIDが停止する方法のみを変更するため、プロセスを強制終了することはできませ$0ん。
エマニュエル

29

LOLCODE(36)

HAI IZ 1<2? VISIBLE "0" KTHX KTHXBYE 

LOLCODEを試してみると、驚くほど大量の機能があります。


2
stdioについて尋ねる必要はありません。

LOLCODEのrepl.itのバージョンでは、必要としないHAIKTHXBYE
MilkyWay90

24

JavaScript:14

警告:あなたは本当にあなたのブラウザでこれを実行したくない

for(;;)alert()

31
[このサイトが他のダイアログを開かないようにする]をオンにします。
ヨハネ

1
@JohannesKuhnはこれをチェックせず、再起動が必要です
イリヤ

8
または、何もしないで、それ以上出力を表示しません。
ヨハネ

実行するだけでalert()このエラーが発生しますError: Not enough arguments [nsIDOMWindow.alert]
クライドロボ14年

3
プロセスがブロックされ、ヒューマノイドの相互作用まで実行が停止した場合、それは本当に無限の出力ですか?
モーテンバーグフォール

24

チューリングマシン-6文字:

#s->1Rs

ここ#で、空白記号(デフォルトではテープ上)は、s既存の(開始)状態のみを表し、1数字を印刷します。Rつまり、右にシフトsし、最後は同じ状態のままです。


3
7文字を数えます!?
F.ハウリ

9
おそらく最も一般的な5タプル表記法では、これは単に5文字s#1Rs(現在の状態、現在のシンボル、シンボルから書き込み、方向からシフト、次の状態)として記述されます。
解像度

19

ハスケル、10

print[1..]

これが最短のコードだと思います

  1. 何かを印刷します。
  2. 無限のShow:ableデータ構造を作成します。

興味がある人のために、それは印刷します:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,...

4
マジックナンバー32を選んだ理由はありますか?
ike

12
それはまた、次の行を必要とせずに可能な限りコードブロックスペースを埋めたので、素敵で丸いように見えました。
塩奈

2
マシンのメモリが有限の場合、整数が大きくなりすぎてメモリに保持できなくなると終了する可能性がありますか?
ジェッペスティグニールセン

3
@JeppeStigNielsenはい。ただし、1メガバイトのメモリさえ満たす整数は2 ^(2 ^ 20)、または約6.7 * 10 ^ 315652です。ギガバイトまでのメモリと、その数は2 ^(2 ^ 30)になります。これは、ほぼ5億桁のモンスターです。シリーズを印刷しようとすると、記憶が尽きる前に宇宙の熱死が私たちに打撃を与えると確信しています。そして、その前のHDD障害の方法。
塩奈

5
OPの下のコメントでは、「コンピューターがクラッシュするまで無限」もカウントされることが言及されています。
11684

19

マーベラス 4

24MB

ここでマーベラスは驚くほどうまくやっています。これにより、無限のドル記号がポストさ$れますが、スタックの制限にかなり早く達します。

使い方。

24は言語リテラルで、ボードから外れて、対応するASCII文字としてSTDOUTに出力されます。MBはメインボードに暗黙的に付けられた名前です。メインボードには入力がないため、すべてのティックが発生します。また、セルは左から右に評価されるため、リテラルは常に次の再帰呼び出しの前に出力されます。

したがって、これはこの擬似コードとほぼ同じです。

MB() {
    print('$');
    while(true) MB();
}

無限再帰のないソリューション11

24@0
@0/\..

これは2つのポータル間でリテラルをループさせることで機能します@0。24が下部@0に当たるたびに、上部の下のセルに転送され@0ます。/\クローンオペレーターであるに着陸し、左側(ポータルに戻る)に大理石(文字)のコピーを1つ、右側に別のコピーを配置します。このクーピーはボードから落ち(..空のセルであるため)、STDOUTに出力されます。擬似コードでは、これは次のように変換されます。

MB() {
    while(true) print '$'
}

無限再帰のない短いソリューション9

24
\\/\..

これは、クローナーとディフレクターの間で大理石を絶えず投げ、一番右のセルにコピーを1枚置き、ボードから落とします。擬似コードでは、次のようになります。

MB() {
    List charlist = ['$'];
    while(true) {
        charlist.add(charlist[0];
        charlist.add(charlist[0];
        charlist.pop();
        print(charlist.pop());
        // Wait, what?
    }
}

注意

..ビー玉が他のボードをオフ着陸あろう(そして廃棄される)ので、細胞は、2枚の最後の基板に必要です。少しおもしろくするために、24大理石をで置き換え、FF空の..セルをで置き換えます??。これにより、ドロップする前に、0から現在の値までの大理石になります。STDOUTでどのように見えるかを推測します。


「/ \ / \」「\\ / \」を作成して、左端から余分な大理石が生成されないようにしますか?純粋に審美的な改善。
スパー

@Sparr、要点、私は投稿を編集しました。
オーバーアクター

5
このソリューションは25165824バイト(24MB)にすべきではありませんか?; P
HyperNeutrino

18

C、23文字

これまでの最高のC / C ++の答えよりもわずかに短い。空行を無限に出力します(ただし、最適化なしでコンパイルされた場合、スタックをオーバーフローさせます)。

main(){main(puts(""));}

1
22文字:(putc(0)または1、2、...、または9)。それはうまくいくでしょうか?
CompuChip 14年

@ CompuChip、putc2つのパラメーターが必要です。
ウゴレン14年

10
@tdbot、これが受け入れられた答えであることに注意してください。私は賛辞を感謝しますが、理由を理解できません。明らかにあります短い答えは
ugoren

@ tbodt、tdbotではありません。ftfy
nyuszika7h 14

5
@ nyuszika7h、このように、私は15人の担当者を保持しながら、私がどれほど謙虚であるかを示すことができました。
ウゴレン14

14

Python 3:15、17、または18文字

mdeitrickの答えはPython 3でより長く、printステートメントを関数呼び出し(15文字)に置き換えます:

while 1:print()

これは、私がPython 3で見つけた中で最も短いものです。しかし、数文字だけ長い無限ループで印刷する、より興味深い方法がいくつかあります。

  • print()None!= 9を返し、無限ループになります。これ8は、pass(18文字)に代わるノーオペレーションです:

    while print()!=9:8
    
  • iter(print, 9)print()等しいまでの出力を返す反復可能オブジェクトを定義します9(これは決して起こりません)。any反復可能な入力を消費して真の値を探しprint()ますNone。これは常にを返すため、到着することはありません。(set同じ効果を使用することもできます。)

    any(iter(print,9))
    
  • または、反復可能オブジェクトに8(17文字)が含まれているかどうかをテストすることで、反復可能オブジェクトを使用できます。

    8in iter(print,9)
    
  • または、splat演算子を使用して展開します

    *_,=iter(print,9)
    
  • 私が考えた最も奇妙な方法は、関数呼び出し内でスプラット破壊を使用することfunction(*iterable)です。Pythonは、関数呼び出しが偽であったとしても、関数呼び出しを試みる前に反復可能オブジェクト全体を消費しようとするようです。これは、反復可能型が使い果たされた(つまり、決して)後にのみ型エラーがスローされるため、実際の関数さえ必要ないことを意味します。

    8(*iter(print,9))
    

*iter(print,1),動作し、15文字しかありませんが、かなりのメモリを消費します。
ivzem


14

x86 .COM実行可能ファイル、5バイト

エンドレスASCII文字セット出力

16進数で:

40 CD 29 FF E6

asmで:

inc ax
int 0x29
jmp si

説明:

inc axレジスタAXを1インクリメントします。int 0x29MSDOSの「高速書き込み文字」ルーチンで、AL(AXの低い部分)に値を出力し、カーソルを1つ進めます。jmp siレジスタSIは、ほぼすべてのDOSのようなオペレーティングシステムで0x100であり、.comプログラムが開始する場所でもあるため、先頭に戻るには奇妙な方法です;)代わりにショートジャンプを行うことも可能です2バイトを使用します。

ソース:

MSDOSの開始値

サイズコーディングWIKI


13

Bitxtreme、0.25バイト

バイナリ表現:

00

ドキュメントから:

各ペアの最初のビットは、アキュムレータから減算する値を保持するメモリ位置へのポインタです。結果は、オペランドが指す同じメモリ位置に格納されます。結果が負の場合(ビットが2の補数表現である場合)、ペアの2番目のビットが現在のPCにモジュロ2で加算されます。

プログラムカウンタとアキュムレータはゼロに初期化されます。次に、メモリ位置0の内容がアキュムレータから減算されます。これはたまたま0であり、アキュムレータはゼロのままです。キャリーがなかったため、2番目のビットはプログラムカウンターに追加されません。

その後、プログラムカウンタは2モジュロ2ずつ増加し、最初に戻され、無限ループが発生します。各ステップで、特別なメモリー位置0が変更され、その内容(a 0)が出力に書き込まれます。

Pythonの公式インタープリターはゼロパディングを必要とするため、このプログラムは1バイトとしてスコア付けする必要があると主張できます。ただし、ゼロパディングは実際にはコードではないと思います


12

要約:Ruby-9、Golfscript-6、> <>-2、空白-19、Perl-2

私が知っている1つの言語と、これまでに使用したことがない2つの言語:D
編集:Perl

ルビー、9

loop{p 1}

1を別々の行に継続的に印刷するだけです。

また、多くの選択肢:

loop{p''} # prints [ "" ]  on separate lines continually
loop{p p} # prints [ nil ] on separate lines continually

10文字のソリューション:

p 1while 1

私は実際に最初1との間のスペースを削除できることに驚いたwhileが、どうやらそれはうまくいく

Golfscript、6

{1p}do

私の最初のGolfscriptプログラム!:P

> <>()、2

1n

ホワイトスペース、19

lssslssstltlsslslsl

ここsで、スペース、tタブ、およびl改行を表します。


11
「Perlを持っていない」という言葉を誰かがタイプするたびに、神は子猫を殺します。
プリモ

2
@primo:Pまあ、少なくとも今はそうです。
ドアノブ

2
これはコードゴルフです。提出ごとに1つの回答を作成してください。
JB

21
@primo良い、私は猫が嫌いです。そして、私にはPerlがありません。
SQB 14年

5
GSプログラムは、doがexec-pop-testシーケンスであり、テストがtrueの場合にのみ継続するため、{1p}do印刷1と終了のみを行います。(入力がないため、スタックは最初になり""、そのexecの1p後にポップされ、テストがfalseになります。)dupを追加するだけで、つまり{1.p}do(7バイトで)動作します。
解像度14年

12

C、25 24

main(){main(puts("1"));}

4
s/while/main/
ウゴレン

2
Cにstackoverflow例外があるかどうかはわかりませんが、メモリが不足すると何か悪いことが起こります。
イリヤガスマン

9
テールコール最適化ftw。
ヨハネ

4
@JohannesKuhn:それはテールコールではありません。もしそうなら、それはreturn main(puts("1"))テールコールでした。
マリヌス

4
@psgivens。caでは、パラメーターなしの関数は、任意の量のパラメーターを取ることができます。のシグネチャのみがmethodName(void)正確にゼロのパラメータを受け入れます。
ジェームズウェブスター14年


11

perl、10文字

いくつかの異なるトレードオフを持つ別の10文字perlソリューションを次に示します。具体的には、開始するために-nフラグまたはユーザー入力を必要としません。ただし、メモリを無限に消費し続けます。

warn;do$0

ファイルに保存し、そのファイルを実行すると、次のようになります:

Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.

say代わりに(どこからでも引数を見つけられなくても常に改行を出力する)を使用して、これを短くできませんでしたwarnか?(これには、を使用した最新のPerlバリアントを選択する必要があり-M5.010ますが、文字数にはカウントされません。)


10

VBA:12

オーディオが出力されますよね?

do:beep:loop

それを「お気に入り」の同僚のお気に入りのマクロ対応MS Officeファイルに入れて、「楽しい」ものにしてください!

Private Sub Workbook_Open()
    Do:Beep:Loop
End Sub

ヘッドフォンを使用している場合のボーナスポイント。


ダン、私は答えを見て、誰かがまだベルチャーを印刷することを考えていたかどうかを見ていました。+1
mbomb007

9

シード、4バイト

99 5

オンラインでお試しください!11無限に出力

次のBefunge-98プログラムを生成します。

[glzgx"Lz^v*M7TW!4:wi/l-[, s44~s;|Sa3zb|u<B/-&<Y a@=nN>Nc%}"gq!kCW $1{2hyzABRj*glr#z(@Zx@xT=>1'.b
/

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


関連する部分はこれだけです:

[>1'.b
/

b11スタックにプッシュして.印刷します。1また49、スタックにプッシュされますが、実際には印刷されません。

実行中のコードのアニメーション:

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


1
値がポップされずにスタックに継続的にプッシュされると、これは最終的にメモリ不足になりませんか?
コイアリンガーアーイング

8

C、26 25 24(再帰なし)

main(){for(;;puts(""));}

無限の'\n'文字を印刷します。これはCの最短回答よりも1バイト長くなりますが、スタックのオーバーフローを回避するためにテールコールの最適化に依存しません。


2
for(;;)while(!
アレックスGittemeier

1
いいえ!、出力を続けているため\n
l4m2


7

PowerShell 2.0:17 11 8

私の最初の解決策:

while(1 -eq 1){1}

resに感謝します。

while(1){1}

ここでダンコ・ドゥルビッチが勝者だと思う。なぜこれが機能するのかはわかりませんが、機能するので、これより短いものは考えられません。

for(){1}

1
試してくださいwhile(1){1}
解像度

@res私はそれを2倍に減らすつもりでしたwhile($true){1}が、あなたのソリューションは間違いなく勝ちます-PowerShellでそれを忘れていました$true -eq 1。それを回答として投稿してください。投票をします。
イッツィ

必要に応じて自由に編集してください。
解像度

6
試してくださいfor(){1}
ダンコドゥル

@DankoDurbićそれがなぜ機能するの説明できますか?よくわかりません。私にはエラーが発生するようです。
イッツィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.