すべての行のクイン


30

あなたの目標は、各行の後に新しい行を付けて、無期限に印刷するプログラムを作成することです。したがって、プログラムが1行の場合、出力のすべての行で繰り返されます。

プログラム:

A

出力:

A
A
A
...

ルール

  • スニペットや関数ではなく、完全なプログラムでなければなりません。
  • プログラムは、スタックオーバーフローまたは再帰制限エラーなしで永久にループする必要があります。
  • 出力はstdoutまたは最も近い代替です。
  • プログラム入力は受け入れられません。
  • プログラムのファイルを開く、外部リソースにアクセスするなど、標準的な抜け穴は許可されません。空のプログラムは標準の抜け穴として許可されていません。
  • プログラムのコードが末尾の改行で終わる場合、これはクイン間の必要な改行としてカウントされず、別の改行を印刷する必要があります。
  • 最短コードが勝ちます!

タイトルは、1行のプログラムのみが対象となるように見えますか?
パエロエベルマン

@PaŭloEbermannその後、問題の説明を読んでください。それは韻を踏むので機知に富んだタイトルです。有効な複数行プログラムの例は次のとおりです:codegolf.stackexchange.com/a/57985/34718 タイトルを読むだけでは、チャレンジに関するすべてを知ることは期待できません。
mbomb007

@PaŭloEbermannそれはただwhile(1)println(your_code)です;
マシュー

回答:


19

核分裂、7バイト

'!+!NR"

私がこれまでに見つけた最短の核分裂クインのかなり単純な修正:私は単に改行の!代わりに非破壊を使用し、改行Oを追加しNています。

全体として、ここにそれがどのように機能するかがあります:制御フローはR、右向きのアトムから始まります。"文字列モードを切り替えます。これは、次"が出力されるまですべてを意味します:この場合'!+!NR。これにより"、改行が印刷されます。'!原子の質量を33に+設定し、それを34(の文字コード")に!増やして、引用符を出力します。N改行を出力しますが、Rこの場合は何もしないので、ループは最初からやり直します。

次の7バイトソリューションも機能します。

"NR'!+!

9

> <>、16バイト

'ard3*o50l2)?.~~

従来の> <>クインではos が多すぎるため、印刷にはループを使用します。各ジャンプの前に5と0(ジャンプ先の座標)をプッシュし、その後.、印刷するものがある場合はジャンプするか、で上位2つの値をポップし~~ます。

(スタックオーバーフロールールを忘れていたため、16バージョンに戻しました。)


代替手段は"ar00go50l2)?.[、そうですか?
mbomb007

3
@ mbomb007私は推測するが、私は好むd3*ので、g独自のソースコードを読み取る
SP3000

8

CJam、13バイト

{_o"_g
"o1}_g

オンラインインタープリターは、プログラムが終了するまで何も出力しないため、Javaインタープリターでこれをテストする必要があります。

説明

最後にで終わらない一般化されたCJamクイン_~

{_o"_g
"o1}

これは単にブロックをプッシュするだけです。_gスタックの最上位が真実である間、ブロックを複製して繰り返し実行します(条件を破棄します)。

これでブロック内に、ブロックのもう1つのコピーがまだスタック上にあります。複製し_oてそれを印刷し、次に_g改行を続けて印刷します(クイン間に必要な追加の改行)"_g\n"o。最後に1、ループが繰り返されるようにスタックにプッシュします。残念なことに、CJamではブロックは真実(または偽)ではありません。


7

Python 2、39

whileループを通常のクインに追加するのは簡単なので、Pythonでのタスクはそれほど興味深いものではありません。

c='while 2:print"c=%r;exec c"%c';exec c

これはスタックを爆破しませんか?
ジェサンファフォン

1
@JesanFafonいいえ、あなたがそれを試してみたら、そうではないことがわかるでしょう。再帰はありません。
feersum

6

Perl 5.10以降、40 37バイト

$_=q{say"\$_=q{$_};eval"while 1};eval

または(37バイトも)

$_=q{{say"\$_=q{$_};eval";redo}};eval

-M5.010または-Eコマンドラインフラグを使用して呼び出します。たとえば、

$ perl -E '$_=q{say"\$_=q{$_};eval"while 1};eval'
$_=q{say"\$_=q{$_};eval"while 1};eval
$_=q{say"\$_=q{$_};eval"while 1};eval
$_=q{say"\$_=q{$_};eval"while 1};eval
...

元のソリューションから3バイトを削除したIlmari Karonenに感謝します。

eval while$_=q{say"eval while\$_=q{$_}"}

これは、上記の短い37バイトのソリューションと同様に、以下のクインのすべての単純なバリエーションであり、Ilmariの他の投稿の 1つで最初に見ました。

$_=q{say"\$_=q{$_};eval"};eval

元のソリューションに追加したのはwhileループだけだったので、彼はほとんどの功績に値します。:-)


素晴らしい、そしてクレジットに感謝します。:-)オリジナルのクインは私自身のデザインですが、他の誰かが以前に独自に発見した可能性があります。ところで、$_=q{say"\$_=q{$_};eval"while 1};evalまたは$_=q{{say"\$_=q{$_};eval";redo}};eval数バイト短くなります。($_=q{say"\$_=q{$_};eval";eval};evalさらに短くなりますが、最終的にはスタックが
なくなると思い

私はあなたが現れることを望んでいた!より短い解決策をありがとう、私はあなたがより良い何かを思い付くと思った。しかし、リンク先の回答でそれを見て驚いたので、自分で試してみました。:)正直に言うと、私はまだ頭をクリンにくるんではいませんが、追加の答えを見るともっと見ることができます。このページで史上最も短い非不正なPerlクイン(?!)がクレジットされているのを見たので、これを作成したかどうかはわかりませんでしたが、このクインの属性はありません(print代わりにを使用say)。
ThisSuitIsBlackNot

ちなみに、最後のものはしばらく実行した後に実際にセグメンテーション違反を起こします。再びありがとう、@ Ilmari!
ThisSuitIsBlackNot

実際、私はそれをいくらか取り戻します-私は間違いなくその馬を発明した最初の人ではありません、そして私は以前にそれを見たことがあるので(同じスレッドでいくつかの信用を主張するものを投稿ました)、それはかなりありそうです私は無意識のうちにそのスレッドから、または他の場所からそれを思い出した。
イルマリカロネン

申し分なく、私は起源を不特定のままにしました。とにかく、3バイトをありがとう、元のインスピレーションをありがとう。
ThisSuitIsBlackNot

5

自己修正Brainf ***(SMBF)、14バイト

末尾の改行\nは、リテラル、Unix、改行(ASCIIコード10)である必要があります。

[<[<]>[.>]<.]\n

説明:

コードはポインターをソースコードの左端に移​​動し、改行を含むすべてを印刷します(ルールのb / cを2回)。ループが続きます。


つまり、そうでなければならないの\rですか?
イスマエルミゲル

@IsmaelMiguel No. \nは新しい行であり、ASCIIコード10であるため、ソースコードの16進ダンプには0Aそのバイトの値が含まれます。code.cside.com/3rdpage/us/newLine.html
mbomb007

1
@IsmaelMiguel真実ではない。コードを入力するとき、実際には改行のEnterキーを押します。\n通常、コードでは2文字、2バイトとしてカウントされます。ソースコードの最後に空白行を表示するために書式設定がうまく機能しないため、読みやすいようにこのように入力しました。そのため、2バイトではなく1バイトであると指定する必要がありました。
mbomb007

2
\nは常に改行と呼ばれる単一の文字です。改行は、しかし、バイトのプラットフォーム依存の配列です。
デニス

2
@Dennisそうかもしれませんが、私は気にしません。私は/「ソリダス」とは呼ばず、誰も知らない。「改行」はで始まりn、それがエスケープ文字であるため、それを私はそれを呼んでいます。「キャリッジリターン」よりも「ラインフィード」に近い。
mbomb007

3

PowerShell、143バイト

$d='$d={0}{1}{0}{2}while(1){3}Write($d -f [char]39,$d,"`n",[char]123,[char]125){4}'
while(1){Write($d -f [char]39,$d,"`n",[char]123,[char]125)}

Rosetta Code PowerShellのquineに基づいて、これが最短ではないと確信しています。PowerShellでの文字列置換のフォーマットは、置換の配置先と同じ区切り文字{}もコードブロックを区切るwhile{}ため[char]、扱いにくいため、キャストを使用する必要があります。これにより、コードが大量に膨れ上がります。


3

アンダーロード、25バイト

初めてこのようなことを試してみましたが、2、3行なのですべてのルールに従うかどうかはわかりません。改行は少し苦痛でした。

(::a~*S:a~*^
)::a~*S:a~*^

1
@ mbomb007反復ごとの出力は、プログラムの2行です。ここで
-MickyT

3

Befunge30 20バイト

<,+55,*2+98_ #!,#:<"

人気のあるbefungeクインのバリエーションで、改行を出力し、行が終了するとスタックに-1をポップします。
残念ながら、Befungeは1行で物事を行うと冗長になります。可能な限りすべてのランチパッド(#)を削除しようとしましたが、特定のコマンド(など,)をスキップするために残しておく必要がありました。

変更点:

30-20- >基本クインを、文字列入力を使用するカスタムクインに変更しました。このように、分岐ははるかに簡単です。

古い:

:0g,:93*`>0-10 #,+$#: #5 _1+>

これは最適とは思いませんが、今のところは許容範囲です。


あなたは、スペースをつかむには、get命令を使用し、そしてより1バイト短いためにそれに2を追加することができます98+2/、<+ 55、+ 2g1_#、#を:<」!
MildlyMilquetoast

そして、最初の引用符と改行を押して、プリンタを逆に-1g0:+5<>:#,_1"
ジョー・キングに


2

R、34バイト

repeat{write(commandArgs()[5],'')}

コマンドラインから次のように呼び出します。

Rscript -e "repeat{write(commandArgs()[5],'')}"

2

> <>、31 29バイト

従来の> <>クインの簡単な修正。

"ar00gc0.0+efooooooooooooooo|

実行するには、ここに貼り付け、[送信]、[開始]の順にクリックします(アニメーションなしで実行すると動作しません)。実行速度を上げてください。


"ar00gc0.0+feooooooooooooooo|2バイト短くなります。
コール

@コールありがとうございます。私はミラーについて考えていましたが、別の課題でサイドトラックされた後、ミラーを変更するのを忘れていました。
mbomb007


@JoKingすでに短い解決策があります> <> 。
mbomb007


2

GolfScript、16バイト

{.".do
":n\p}.do

これは最終的に、MartinBüttnerのCJamエントリによく似ています。おもしろい機能は、結局のところ".do"、印刷時にブロックに追加する最も簡単な方法は、ブロックを行終了記号に割り当てることnです。(もちろん、n通常含まれているものを置き換えるために、文字列に実際の改行を含める必要もあります。)同じ文字列(GolfScriptで真実である)も、doループがポップオフするためにスタックに残されます。永遠に実行されます。


1

BASH、76バイト

特にここのPowerShellでは、抵抗できませんでした:)

while true;do
a ()
{
    echo while true\;do
    declare -f a
    echo a\;done
}
a;done

空白は、EXACTコピーにとって重要です。


1

Javascript(ES6)、64

for(;;(_=>console.log(`for(;;(_=>${arguments.callee})());`))());

あるいは(64も)

a="for(;;)console.log(`a=${JSON.stringify(a)};eval(a)`)";eval(a)

代替はスタックオーバーフローを引き起こしませんか?
パトリックロバーツ

いいえ。再帰はありませんので、スタックには何も追加されません。
DankMemes

さて、私はそれらの両方をテストしましたが、代替ソリューションについては正しいですが、最初のソリューションは失敗し、理由を見つけました。矢印関数に関するMDNドキュメントによると、「矢印関数は引数オブジェクトをコードに公開しない」ため、ユーザーarguments.calleeは存在せず、エラーをスローします。
パトリックロバーツ

面白い。Firefox Developer Edition 42.0a2(2015-09-13)の私にとっては、両方とも機能します。標準が完全に採用されると、最初の標準が機能しなくなると思います。
DankMemes

私はゴルフあなたの最初のソリューションにしようとしていたので、私は、最新のChromeでそれらをテストした!(と思う)4バイトの節約になるループセミコロンのための体の必要性を回避するために括弧を囲み、ループの後の機能の実行を置くのではなく
パトリックロバーツ

1

マイクロスクリプト、22バイト

"f1{CqxCanx"f1{CqxCanx

Esolangs記事のクインに基づいて:"fCqxah"fCqxah。言語が必要に応じて閉じ括弧を自動的に追加するという事実を利用します。これがないと、2バイト長くなります。


1

バッチ、10(ファイル名の長さは+ 4)

これが次の2つの理由に該当するかどうかはわかりません。

  • 技術的には、Windowsコマンドシェルからのテキストによる副作用がある場合とない場合があります。これは、その構成方法によって異なります。
  • このプログラムは名前で自分自身を呼び出しますが、それが規則(具体的には「プログラムファイルを開かない」規則)によって禁止されているかどうかはわかりません。テキストを読んだり印刷したりするために開かれるわけではありません。単にそれ自体を再実行しています。さらに、ファイルシステム構造は、旧式のバッチスクリプトの不可欠な部分です(多くの場合、プログラムの状態などを保存するためにも使用されます)。したがって、これが第5規則に違反しているかどうかはわかりません。

コード(q.batという名前のプログラムの場合):

echo on&&q

2
それは最短ではなく、創造的でユニークなので、許可します。そして、ソースコードを読んでいたのではなく、自分自身を実行していました。
mbomb007

1
ファイル名は任意ではないため、少なくともファイル名をバイトカウントに追加する必要があります。
マーティンエンダー

1
私はecho on&&%0それを試してみるのが怖いが、あなたは使用できると信じています。
DankMemes

1
更新:echo on&&%0機能しません。%0出力では展開された状態で表示され、ウィンドウ(7、32ビット、VMで実行)は全体を非常に迅速に終了します。
DankMemes

1
.bat一部を省略できると思います
-SuperJedi224

1

セイロン210 208バイト

もちろん、これは何も勝ちません...

shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}

元の:

shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}

Quineを2日前からwhile(true){...}ループを追加して変更したので、プレーンQuineの185バイトから210になりました(末尾の改行文字はもう必要ありません)。しかし、その後、私はwhile(1<2){...}ループはさらに2バイト短くなっ。

shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}

(Ceylonにはfor(;;)Javaのようなループはありません。このループには中括弧も必要です。)


1

PowerShell、132 107バイト

$a='$a={0}{1}{0};for(){2}$a-f[char]39,$a,[char]123,[char]125{3}';for(){$a-f[char]39,$a,[char]123,[char]125}

Rosetta Quine(@AdmBorkBorkと同じ)をベースにしていますが、文字列の置換にはフォーマットを使用していません... forループに切り替えてフォーマットを使用するのが最適でしょうか?

AdmBorkBorkが戻ってきた場合、彼らはこれをたくさん打ち負かすと確信しています:P

編集 forループと置換を計算しました、すべて私の前任者に感謝します:)

古い試み:

$a='$a=;for(){$a.substring(0,3)+[char]39+$a+[char]39+$a.substring(3)}';for(){$a.substring(0,3)+[char]39+$a+[char]39+$a.substring(3)}


1

Java 10、194バイト

interface M{static void main(String[]a){for(var s="interface M{static void main(String[]a){for(var s=%c%s%1$c;;)System.out.println(s.format(s,34,s));}}";;)System.out.println(s.format(s,34,s));}}

説明:

オンラインで試してください(60秒後にタイムアウト)。

interface M{                    // Class
  static void main(String[]a){  //  Mandatory main-method
    for(var s="interface M{static void main(String[]a){for(var s=%c%s%1$c;;)System.out.println(s.format(s,34,s));}}";
                                //   Unformatted source code
        ;)                      //   Loop indefinitely
       System.out.println(      //    Print with trailing new-line:
         s.format(s,34,s));}}   //     The formatted source code

-part:

  • 文字列にsは、フォーマットされていないソースコードが含まれています。
  • %s この文字列をそれ自体に入力するために使用されます s.format(...)
  • %c%1$cおよびは34、二重引用符のフォーマットに使用されます。
  • s.format(s,34,s) すべてをまとめる

チャレンジパート:

  • for(;;) 無限ループに使用されます。
  • System.out.println(...) 末尾の改行で印刷するために使用されます





1

Brachylog、16バイト

∋"∋~kgjẉ₁⊥"gjẉ₁⊥

あなたはかなりオンラインでそれを試すことはできませんでが、インストールで機能することを確認しました。

Brachylog、18バイト

∋"∋~kgjw₁⊥~n"gjw₁⊥

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

このクインの代替バージョンから改作されたもので、私は当初、あらゆるもののボゴソートのために考案したバックトラッキングハックを使用していました。(末尾の改行で印刷するための通常の手段)がTIOの文字エンコーディングでいくつかの奇妙な問題にぶつかり、文字列リテラルに挿入された実際の改行がasとして印刷される~nため、2バイトを使います。~k\n

               w      Print
 "∋~kgjw₁⊥~n"         "∋~kgjw₁⊥~n"
∋                     which is an element of
                      the (unused and unconstrained) input
                ₁     formatted
          ~n          (so that the ~n is replaced with a newline)
             gj       with itself
   ~k                 (so that the ~k is replaced with the string in quotes),
                 ⊥    then try again.

ためにはw₁リストとして入力を取得[string to be formatted, formatting arguments]してリスト内の文字列をラップし、g次いで自分自身にそれを連結しj、それ自体でフォーマットされることを可能にします。また、プログラムには入力が与えられないため、プログラムの先頭に暗黙的に存在する入力変数は任意の値を取ることができるため"∋~kgjw₁⊥~n"、要素として含まれる無限のリストの1つに制約され、単一のソースを印刷した後、プログラムがヒットしたときにバックトラックされる選択ポイント


1

パイソン3.6、48 43バイト。

@Jo Kingのおかげで-5バイト

x='while 1:print("x=%r;exec(x)"%x)';exec(x)

を使用%rして、これら'のエスケープを節約できます。43バイト
ジョーキング

Python 3.8の場合は41になります:P
ASCIIのみ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.