連鎖プログラム


26

チャレンジ

この課題では、プログラムの無限シーケンスの最初のプログラムp 1を作成します。このプログラムでは、p nを実行するとプログラムp n + 1が出力/生成されます。最初のn> = 2プログラムを連結する場合、シーケンスはを出力する必要がありますn

最初の4つのプログラムは次のとおりです。

p1 p2 p3 p4

私が実行した場合p1、出力されるはずです:

p2

私が実行した場合p1p2、出力されるはずです:

2

私が実行p1p2p3p4した場合、出力されるはずです:

4

を実行するp4と、シーケンス内の次のプログラムが生成されます。

p5

得点

スコアは、最初の10プログラムのバイト数です。


シーケンスはp1p2p3...常にp1からpnになりますか?
ムース

@Mooseはい、常にp1からpnになります。
ダウンゴート

5
これは興味深い問題です。プログラムシーケンスは簡単です。連鎖はより困難です。
コナーオブライエン

ファイルへのアクセスは許可されていますか?
リン

しかし、ファイルの内容の&名のバイト数は、それが中で使用されている各プログラムの総バイト数でカウントされなければならないはい@Mauris。
Downgoat

回答:


49

Pyth、12

p1:

l"1

p2: 1

p3: 1

等..

p1p2p3:

l"111 

出力: 3

説明:

l        length
 "1      string "1"

最初の実行時に、これは単一の文字列の長さを出力します1。これはたまたま有効なPythプログラムであり、1再び出力されます。したがって、pn + 1は常に1です。プログラムがチェーンされている場合、p1チェーンされたプログラムの長さを出力しますn


9

Lua、950 900バイト

s=io.open(arg[0]):read()if#s<95 then print(s)do return end end print(#s/90) do return end;

ゴルフをしていない:

s=io.open(arg[0]):read'*a'
if #s < 96 then 
    print(s)
    do return end 
end 
print(#s/90) 
do return end;

説明:

最初の行は、プログラムのソース全体を取得します。次に、プログラム全体の長さを1 + 1つの単一プログラムの長さと比較します。現在のプログラムのサイズがこの値よりも小さい場合、ソース(次のプログラムp2)が出力され、終了します。各反復は単なるクインです。これらのいくつかが組み合わされると、条件が失敗し、連結プログラムの長さを連結プログラムの数nである1つのプログラムの長さで割って出力します。


異なる方法を使用した場合(+1)。これは私が望んでいた創造的な答えの一種です。
ムース

Luaに+1を付け、他の回答よりも長い方法の場合はクーラーを選択します。P
cat

ハハ、私は:)私は非ゴルフでこれを行うために管理することを非常に誇りに思っていたし、かなりの言語冗長ありがとう
Nikolai97


4

Vitsy、14バイト

PythとJolfの回答と同様に、文字列をマッピングしています。唯一の違いは、行の折り返し機能を使用して、常に適切な長さを確保することです。

p1

'l3-N

p2

1

1を任意の単一の数字に置き換えます。

p3などはこのパターンに一致します。これInteger.MAX_VALUEは、言語の整数制限まで行うことができます。

説明:

'l3-N
'     Wrap around the line until finding another '. Since no ' is found before the
      End of the line, it wraps around.
 l    Get the length of the stack.
  3-  Subtract three.
    N Output as number.

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


4

真剣に、15バイト

最初のプログラム、6バイト(印刷不可を含む):

5Ql-.

六角ダンプ:

35516c2d2e7f

このプログラムは印刷します1オンラインで試してください

残りのプログラムはすべて1、Pythの答えのように自分自身を印刷する有効なプログラムです。元のプログラムは、ソースコードの長さから5を引いた値を出力し、すぐに終了します。1末尾に追加されると、ソースコードの長さが毎回1バイト増加しますが、実行されることはありません。


2

Jolf、14バイト

ここで試してみてください!

a-lq4
a      print
  lq   the length of the source code
 -  4  minus 4

実行すると、これが印刷されます1。このように、p2 = 1。実行p2利回り1。だから、すべてのためにN > 1pN = 1

観察しp1p2ますa-1q41。これは以下に変換されます:

alert(sub(length("a-lq41"),4));
1;

暗黙の印刷は最初の印刷後に無効になるため2、ソースコードの長さから4を引いた値が2であるため、これが印刷されます。


2

ルビー、318バイト

p 1

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__

個別のプログラムp iはそれぞれ、この 1行のクインを出力します_="_=%p;puts _%%_";puts _%_

これらのquinesをp 1の最後に追加すると、それらDATAは魔法の下にあるのでオブジェクトのラインとして終わります__END__

テストは次のとおりです。

$ ruby chain.rb                                    # running p1
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p2
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p3
_="_=%p;puts _%%_";puts _%_

$ # Concatenating p2 and p3 to p1:
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb

$ ruby chain.rb                                    # running p1p2p3
3

連結された最初の10個のプログラムは、次のようになります(318バイト):

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_

1

C#、2099 + 7 = 2106バイト

最初のプログラム(コンパイラフラグを使用/main:A):

class A{static void Main(){int a=System.Reflection.Assembly.GetEntryAssembly().GetTypes().Length;var b=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a>1?"{2}":b,0,b.Replace("\"","\"\""),a);}}

2番目のプログラム:

class A0{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,0+1,a.Replace("\"","\"\""));}}

3番目のプログラム:

class A1{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,1+1,a.Replace("\"","\"\""));}}

あなたはアイデアを得る。


0

Javascript ES6、スコア483 455

プログラム1、77バイト:

v=1;setTimeout(_=>alert(v>1?v:'a=_=>this.v?v++:alert("a="+a+";a();");a();'));

プログラム2以降、それぞれ42バイト:

a=_=>this.v?v++:alert("a="+a+";a();");a();

0

PHP、1470バイト

プログラム1:219バイト:

class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();

progam 2および139バイトを超える:

if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));

次のように使用します:

php -r "class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();"

ここで詳しく説明するphpクインテクニックをわずかにゴルフしたバージョンを使用します:http : //10types.co.uk/the-lab/a-minimal-php-quine/

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