無限の非定期的な出力を生成する最短のコード


8

これはだめだ。この質問は、永久にカウントアップすることを具体的に要求しますが、この質問は他の多くのアプローチを可能にします。

無限の時間とメモリを与えられ、無限の非周期的な出力を出力するプログラムまたは関数を記述します。

明確化

  • 「無限」とは、ソリューションが、プログラムまたは関数を正常に開始した後、それ以上の入力や操作なしで何かを出力し続けることを意味します。
  • 「非周期的」とは、出力が最終的に同じセクションを永久に繰り返す可能性がないことを意味します(その期間の長さに関係なく)。有効な解決策の例は、無理数の数字を印刷することです。
  • ランダムソリューションは、要件に適合していることを証明できない限り、カウントされません。日付/時刻ベースのソリューションは、任意の精度で格納されていない場合も無効になる可能性があります。

勝者

最短コード(バイト単位)が優先されます。


1
非循環に関しては1\n12\n123無効ですか?
— アタコ2017

4
だまされない。1つの方法は永久にカウントアップすることですが、ここでの問題は、一意の数値を永久に出力することであり、特に永久にカウントアップすることではありません。人々がどのように質問に答えるかは、正確には問題ではありません。
— Matthew Roh

@ no1xsyzy質問を再開するために投票しました。
— Julian Lachniet 2017

わかりやすくするために投稿を編集しました。同意しない変更は元に戻してください。
— マーティンエンダー2017

それで、無限の精度が必要ですか?質問では、これは明確にされていません。
— mbomb007 2017

回答:


12

ヘキサゴニー、2バイト

(!

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

展開されたソースコードは次のようになります。

 ( !
. . .
 . .

これは、デクリメント(()および印刷(!)の2つのコマンドをループで実行するだけです。したがって、出力は次のようになります。

-1-2-3-4-5-6-7-8-9-10-11-12...

プログラムが確実に最初の行にループバックするようにするには、インクリメントではなくデクリメントを使用する必要があります(メモリ値が正の場合、Hexagonyは2行目と3行目の間でループし、何もせずに無限ループになります)。


1
Hexagonyが表現可能な最小の整数に達するとどうなりますか?
— アダム2017

1
@AdámHexagonyは、任意精度の整数を使用します。
— マーティンエンダー2017

13

Python 2、23バイト

while 1:print id;id=id,

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

プリント

<built-in function id>
(<built-in function id>,)
((<built-in function id>,),)
(((<built-in function id>,),),)
((((<built-in function id>,),),),)

等々。組み込み関数から始まりますid、最初に初期化された最短の変数名から、繰り返しそれをそれ自体のタプルに変えます。

Python 3では、このソリューションはのために1バイト長くなりprint()ますが、バイトはprint出力から回復できますNone。

while 1:id=print(id),id

または

while[print(id)]:id=id,

5

ラビリンス、3バイト

#:!

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

セパレータなしのすべての負でない偶数の整数を出力します。

024681012141618202224262830323436384042...

IPはコード上で前後にバウンスするため、これは実際#:!:にはループにあります。

#  Push stack depth.
:  Duplicate.
!  Print.
:  Duplicate.

選択肢の束:

:#!     Prints all positive odd integers.
:)!     Prints all positive integers.
):!     Prints all positive integers.
:(!     Prints all negative integers.
(:!     Prints all negative integers.

5

Brachylog、2バイト

ẉ⊥

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

これは、大きさ順に並べられたすべての整数を出力します。Brachylogはデフォルトで無制限の整数を使用するため、これがオーバーフローしてすでに見られた整数を出力することはありません。

説明

ẉ      Writeln: the Input is anything, so we label it implicitely to an integer and write it
 ⊥     False: backtrack and try another integer value for the Input

2

> <>、3バイト

l:n

0からカウントして、数値のストリームを出力します。

数字の増加は循環しないと思います...

説明:

l スタック長をスタックにプッシュします

: スタックの一番上のスタック値を複製します

n 数値を値として出力します

行が終了すると、最初に戻るので、もう一度実行しますが、スタックが長くなりました...

オンライン


2

PHP、20バイト

for(;;)echo$argc.=0;

これを出力します:

101001000100001000001000000100000001000000001000000000...

コマンドライン引数が指定されている場合、出力は異なりますが、非周期的です。

ドキュメントを理解している限り、言語自体は文字列の長さを制限しません。


2

JavaScript、26 22 20バイト

for(;;)alert(Date())

(警告:それは悪です)


1
このコードが実行オプションを持たないようにすることをお勧めします。
— fəˈnɛtɪk 2017

あなたは、最初と最後のセミコロンの両方を取り除くことができます:for(n=0;;)alert(n++)
— アルノー

3
それはオーバーフローしませんが、それは最終的に= 9007199254740992. 2 ^ 53で永遠にはまります@Ahemone
— アルノー

5
@Arnauldしたがって、この回答は非周期的ではありません ...
— kennytm

2
あなたはちょうどfor(;;)alert(Date())20バイトのために行うことができます。
— ETHproductions 2017


2

Brainfuck、13バイト、上限はないが出力mod 256を想定

+[[->+++.<]>]

出力文字コード2 2 4 6 2 4 6 8 10 12 14 16 18 ...

申し訳ありませんが、古いコードの印刷ループ0 2 4 6 ... 254、

Brainfuck、13 12バイト(Jo Kingから-1)

+[[>.]<[<]+]

出力文字コード0 1 0 1 1 0 1 1 1 0 ...


なぜないコンバイン[.>].に[>.]?+[[>.]<[<]+]010110111011110 ...
— Jo King

Thanks
— l4m2

この非定期的な作成に必要な仕様を満たすインタープリターはいますか?
— アドホックガーフハンター2017

esoteric.sange.fi/brainfuck/impl/interp/i.htmlにコード+[[>.]<[<],]を入力し、入力バーに'\1'
— l4m2

@WheatWizard最初のものについてはわかりませんが、2番目のTIOでは、1の正方形と0の空白が表示されます
— Jo King


1

MATL、4バイト

`@tD

このソリューションは、whileループのインデックスをスタックにプッシュし、それを複製して値を出力し、ループインデックスがゼロ以外であることを確認して再度繰り返すループを作成します。

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


1

RProgN 2、13バイト

2{22.`2=2p2}:

出力には多くの2つがあり、次第に細かい改行で区切られます。

2{22.`2=2p2}:
2               # Push a two to the stack
 {         }:   # While the top of the stack is truthy
  22.           # Push the value of "2" twice, and concatenate them together.
     `2=        # Set the value of "2" to this.
        2p      # Print the value of "2"
          2     # And push the value of "2"

これは2 ^ n 2sを出力し、その後に反復ごとに改行が続きます。

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


Stackedは冗長すぎると言ったのを覚えていますか?;)
— Conor O'Brien

1

Befunge、4バイト

1+:.

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

Befungeでは、スタックはボトムレスで無限のゼロを持っています。それは言った:

1+ スタックの一番上に1を追加します

: スタックのトップを複製します

. スタックの先頭のASCII値を数値として出力します

そして、@実行を停止する必要がないため、それは無限に続きます。これは実際にはbefungeの動作によって解決が容易になった問題の1つです。


1
任意精度の整数を使用するBefungeインタープリターはありますか?
— マーティンエンダー2017

1
@MartinEnder厳密に仕様に準拠しているわけではありませんが、BefungeeとPyFungeの両方がスタックセルに任意の精度の整数を使用すると確信しています。
— Jamesホルダーネス、2017

@MartinEnderすみません、元の応答でそれを指摘しておくべきでした。Pyfungeは任意精度の整数を使用していると思いますが、家に帰ったらそれを確認します
— osuka_

1

APL(Dyalog APL)、8バイト

{∇⎕←0⍵}1

{emsp;無名関数...

 ∇ 再帰する

 ⎕ ← STDOUTへの出力

 0 ⍵ ゼロと引数で構成される2つの要素のリスト

} ナンバーワンに適用

この出力(別の行に)[0,1]、[0,[0,1]]、[0,[0,[0,1]]]、等


1

処理中、30 29バイト

millis()代わりに使用するためのQwerpDerpのおかげで1バイトが節約されましたframeRate

void draw(){print(millis());}

プログラムの開始からのミリ秒数を継続的に出力します。

出力例:

3573743914054244404574734925085205375585755916...

1

C(gcc)、83 81バイト

*p,*t,*g;f(){for(t=p=malloc(1),g=--t;t<p?putchar(55):(t=g,*p++,putchar(9));t++);}

最初にヒープ上にポインタを割り当て、関数は次にsegfaultが発生するまで先のメモリアドレスにカウントします *p++。したがって、使用されたデータタイプではなく、システムのメモリ量によって制限されます。無限のアドレッシング機能を備えた無限のメモリを考えると、それは永遠に続きます。

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


「1分前にAhemoneが答えた」とのことで、Cの答えだとすぐにわかって興奮しました。
— アルバートレンショー2017

@AlbertRenshaw楽しんでいただけてうれしいです。しかし、私は気づきました、私はp++私の主張をするために逆参照するべきです。
— アヘモネ2017


1

7、2つのバイト

このプログラムを構成する文字は次のとおりです。

240223

エディターでファイルを表示すると、ASCIIとして解釈しようとする可能性が高く、その場合は次のようになります。

P$

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

プログラムは入力を受け取ります。ここでは、入力がEOFであると想定しています。入力すると、クラッシュする可能性があります。

説明

ゼロ回目の反復

240223
240223 240223を一番上のスタック要素に追加します

ここでのプログラム全体はパッシブであるため、上部のスタック要素(最初は空)にアクティブバージョンを追加します。プログラムは暗黙的なループにあり、反復ごとに(スタックに残したまま)最上位のスタック要素を評価します。したがって、アクティブなバージョンが実行されます。(ほとんどすべての7つのプログラムはこのように始まります。)

最初の反復

240223 
2        一番上のスタック要素をコピーします
  40      2番目のスタック要素をエスケープし、一番上に入れ替えます
    2     一番上のスタック要素をコピーします23一番上のスタック要素を
       出力します

出力コマンドの前に、スタックには2つのコピー240223(つまり、パッシブ)が含まれています。一番上のものは出力を取得し(出力形式2、「数値」を選択する以外に観察可能な影響はありません)、下のものが残り、次の反復のプログラムになります。

2回目の反復

240223
240223 240223を一番上のスタック要素に追加します

ゼロ回目の繰り返しと同じですよね?結構です。スタックの内容が異なりました。スタックは240223下にあります。240223240223

3回目の反復

240223 240223 
240223         追加240223上部スタック素子に
       2        コピー上部スタック素子
       40は、      上部にそれをスワップ、第2積層体を脱出
          2     コピー上部スタック素子
           23を   の出力のトップスタック要素

これにより、7と1の場合よりも3と6が多いスタック要素が出力されます。出力フォーマット2は、これを数値の入力要求として解釈します。EOFを読み取ると、スタックの次の要素が長さ0の文字列に削減されます。ただし、バグが原因で(やや有用と思われ、機能に昇格する可能性がありますか?)、これは実行開始後にのみ発生します。スタックには、240223以下の2つの要素がありますが、この最上位の要素のエスケープバージョンが実行されています。24022324022324022372402236240223240223

4回目の反復

7 240223 6 240223240223
 7 240223 6 240223240223 240223 240223240223をスタックの一番上に
 追加

スタックの先頭は長さ0の文字列だったので、基本的にはそこに到達したプログラムをエスケープしません。

5回目の反復

240223 240223240223 
240223               アペンド240223トップスタック要素に
       2              トップスタック要素のコピー
       40は、            トップにそれを交換する、第二のスタック要素をエスケープ
          2           トップスタック要素のコピー
           23         の出力のトップスタック要素
       2        コピーのトップスタック要素
       40は、      第二のエスケープスタック要素、それを一番上に入れ替える
          2     一番上のスタック要素をコピーする    23一番上のスタック要素を
         出力する

これは3回目の反復と非常によく似ています。ただし、2つの変更があります。まず、1と7に比べて0と6が4つ多いため、数字ではなく標準入力から文字を入力してみます。ただし、依然としてEOFを取得しているため、結果としてスタックの先頭が長さ0の文字列になっています。次に、削減後に実行されるコードがあるため、次の反復はすぐには開始されません。むしろ、その長さゼロの要素に対して一連の操作を行い、結果として長さゼロの要素が3つになります。1つを出力し、他の2つは消えます(反復の終わりなので)。基本的には、3番目の反復の終わりにあった場所に行き着きます。

6回目の反復

スタックの一番上からコピーしたプログラムは今です。最初の出力命令(最初の)に到達するまで、前の反復と同様にすべてが機能します。これにより、1と7に比べて0と6が5つ多くなり、次の出力命令が出力形式を変更する要求として解釈されるモードが設定されます。これは、振る舞いの顕著な変化にもつながります。入力リクエストがなかったため、EOFを読み取らず、EOFを読み取った結果(新しい最上部のスタックエレメントがブランクになっている)をトリガーしなかったため、元のスタックエレメントのエスケープバージョンはそのままではなく、削除されました。つまり、次の240223240223240223240223232402もはやノーオペレーションではなく、エスケープされたスタック要素の2つのエスケープされたコピーを作成します(つまり、それらは現在ダブルエスケープされています)。1つを出力し、出力フォーマットを7に設定します(「入力と同じ」)。この出力形式にはI / Oコマンドがなく、形式を変更するコマンドもないため、プログラムの残りの部分ではそのままにしておきます。また、724022362402232402232402232402236(入力と同じエンコーディングで)標準出力に出力します。

とにかく、この時点からプログラムが何をするのかはかなり明確です。それは、さまざまなエスケープのさまざまな数のコピーを240223スタックの一番上に追加し、スタックの一番上をエスケープし、一番上のコピーを出力することの組み合わせです。スタック。この時点以降は、(EOFを読み取ったことがないため)一番上のスタック要素がクリアされることはないため、成長するだけです。定期的なエスケープにより、出力が繰り返されないことが保証されます(これは、各反復で、最初の出力は7、前の反復で実行されたものより少なくとも1つ多いことから始まります)。


1

オーム、4バイト(CP437)

¼,¡∞

カウンター変数を出力し、インクリメントして、無限ループに入ります!十分に単純です。

編集(Mar 1 '17):(この回答を投稿した後)他の更新を行っている最中に、の動作を変更しました∞。更新された答えはになります∞^,。


1

「モダン」DC、9バイト

無限の記憶?
その後、継続的に成長するスタックは大丈夫ですか?
] :-)

[zprdx]dx

コメント:

[         # start string constant
 z        #   push current stack depth
  p       #   print TOS without removing
   r      #   swap TOS and NOS
    d     #   duplicate TOS
     x    #   pop TOS and interprete it
      ]   # end string constant, push it
       d  # duplicate TOS
        x # pop TOS and interprete it

rコマンドを使用しているため、これは一部のDCで実行されません。


0

Ruby、21 12バイト

loop{p$.+=1}

すべての自然数を出力します。問題の説明を理解している限り、これで問題ありません。


0

PHP、21バイト

for(;;)echo uniqid();

使用法: php -r "for(;;)echo uniqid();"

マイクロ秒単位の現在の時刻に基づいて一意のIDを出力します。 58b3e065e4b4c58b3e065e4b6358b3e065e4b7b58b3e065e4b9458b3e065e4bac58b3e065e4bc458b3e065e4bdc58b3e065e4bf558b3e065e4c0e58b3e065e4c2658b3e065e4c3e58b3e065e4c5658b3e065e4c6f58b3e065e4c8758b3e065e4c9f...

連続したシーケンスとして: 58b3e09390617 58b3e09390651 58b3e0939068a 58b3e093906c3 58b3e093906fc ...


可能性は非常に低いですが、その数値が循環した後で、まったく同じタイミングで値をたどった場合にループが発生することは不可能ではありません。課題は、出力が定期的である可能性がまったくないはずであることは非常に明確です。
— マーティンエンダー2017

@MartinEnderマイクロタイムが2つの出力で同じになる場合、スクリプトが2つの同じ連続値を出力する可能性があることを意味しますか?(非常に高速な実行)
— マリオ

いいえ、出力はuniqid固定長であるという印象を受けました。したがって、プログラムを十分に長く実行させると、その文字列はオーバーフローして最初から開始されます。その後、ある時点で最初のタイミングに達し、原理的にはまったく同じIDシーケンスを再び出力できます。つまり、長さが固定されていないことを示すことができれば、これで問題ありません。
— マーティンエンダー2017

@MartinEnder´uniqid´は、現在の時刻に基づいたIDを次の形式で出力する必要があります。最初の8文字はUNIX時間で、最後の5文字はマイクロ秒なので、文字列のオーバーフローや重複なしに、ほぼいつまでも続くと思います。それとも私は明白な何かを見逃していますか?(ただし、私はコンピュータサイエンティストではありません...)
— マリオ

1
長さが13文字に固定されている場合、それは持っている可能性のある値の唯一の有限数があるため、いくつかの点でオーバーフローします。
— マーティンエンダー2017


0

Python 2、24バイト

2の累乗ごとに9回印刷します。

n=9
while 1:print n;n+=n

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


2の9乗?あなたはできるだけ奇妙なことをしようとしていますか?もしそうなら、私はお勧めしwhile n:ます。
— CalculatorFeline

@CalculatorFelineこれは出力を変更しません。しかし、はい、すべての正の整数を出力したくありませんでした。この方法は、出力が急速に増加するため、整数が必要に応じて任意の精度であることを示しています。
— mbomb007






0

GNU sed、13バイト

これは、単項の任意精度カウンターです。これ0は、パターンスペースに1つ追加して、すべての反復(無限ループ)でそれを出力するという、格好のいい方法です。

:
s:0*:&0:p
b

しばらくすると、通常はメモリ割り当てエラーが発生し、印刷が停止します。これは、増え続けるパターンスペースを格納できなくなるためです。メモリは無限であると想定されているため、これはこの課題にとって問題ではありません。

オンラインでお試しください!(このインタープリターは、使用可能なリソースを設計によりさらに制限します)

出力プレビュー:最初の5行のみ

me@LCARS:/PPCG$ echo | sed -f infinite_non_periodic.sed | head -5
0
00
000
0000
00000

0

Sesos、2バイト

SASM

set numout
jmp, put, add 1

SBIN

00000000: c40a                                              ..

すべての負でない整数を順番に出力します。

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


これは最大整数に達してオーバーフローしますか、それともsesosはarbpreintsを使用しますか?
— FlipTack 2017

set maskディレクティブがない場合、Sesosは任意精度の整数を使用します。
— Dennis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.