Program Chaining

26

Tantangan

Dalam tantangan ini, Anda akan menulis program pertama, p 1 , dari urutan tak terbatas program, di mana menjalankan p n output / menghasilkan program yang p n + 1 . Saat menggabungkan program n> = 2 pertama, urutannya akan ditampilkan n.

Contoh

Katakanlah 4 program pertama adalah:

p1 p2 p3 p4

Jika saya menjalankan p1, itu akan menghasilkan:

p2

Jika saya menjalankan p1p2, itu akan menghasilkan:

2

Jika saya menjalankannya p1p2p3p4harus menampilkan:

4

Jika saya menjalankan p4, itu akan menghasilkan program berikutnya dalam urutan:

p5

Mencetak gol

Skor Anda adalah jumlah byte dari 10program pertama .

Downgoat
sumber
Apakah urutannya p1p2p3...selalu dari p1 ke pn ?
Moose
@ Pilih Ya, itu akan selalu dari p1 ke pn.
Downgoat
5
Ini masalah yang menarik. Urutan program cukup mudah; rantai lebih sulit.
Conor O'Brien
Apakah mengakses file diperbolehkan?
Lynn
@Mauris Ya tetapi jumlah byte file & nama byte harus dihitung dalam jumlah total byte untuk setiap program yang digunakan.
Downgoat

Jawaban:

49

Pyth, 12

p1:

l"1

p2: 1

p3: 1

dll ..

p1p2p3:

l"111 

Keluaran: 3

Penjelasan:

l        length
 "1      string "1"

Pada jalankan pertama, ini menghasilkan panjang string karakter tunggal 1,. Ini juga merupakan program Pyth yang valid, menghasilkan 1lagi. Karenanya, pn +1 selalu 1. Ketika program dirantai, p1output panjang dari program yang dirantai, yang akan menjadi n.

Moose
sumber
9

Lua, 950 900 byte

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

Tidak Disatukan:

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

Penjelasan:

Baris pertama mengambil seluruh sumber program. Kemudian kami membandingkan panjang keseluruhan program dengan 1+ panjang satu program tunggal. Jika ukuran program saat ini lebih kecil dari nilai ini, dari sumber yang dicetak, yang merupakan program berikutnya, p2, dan kami keluar. Setiap iterasi hanyalah quine. Ketika beberapa di antaranya disatukan, kondisasinya gagal, dan kami mencetak panjang dari program gabungan dibagi dengan panjang satu program, yang merupakan jumlah program gabungan, n.

Nikolai97
sumber
+1 untuk menggunakan metode yang berbeda (dari metode saya). Ini adalah jenis jawaban kreatif yang saya harapkan.
Moose
+1 untuk Lua, dan memilih metode yang lebih dingin, jika lebih panjang daripada jawaban lain: P
cat
Haha terima kasih, saya cukup bangga bahwa saya berhasil melakukan ini dengan bahasa non-golf dan cukup
verbal
4

Vitsy , 19 byte

Tidak berurusan dengan string di sini, tetapi menggunakan trik metode.

p1

1ml1-\+N
1

p2

1

p3

1

Begitu seterusnya, begitu seterusnya.

Penjelasan di bawah ini:

1ml1-\+N
1m       Execute the first index of lines (the bit with the ones)
  l1-    Get the length minus 1.
     \+  Add them all up.
       N Output as number.

1        Push one to the stack.

Cobalah online!

Addison Crump
sumber
4

Vitsy , 14 byte

Mirip dengan jawaban Pyth dan Jolf, saya memetakan string. Satu-satunya perbedaan adalah bahwa saya menggunakan fitur pembungkus garis untuk memastikan saya selalu mendapatkan panjang yang tepat.

p1

'l3-N

p2

1

Ganti 1 dengan nomor tunggal apa pun.

p3 dan seterusnya cocok dengan pola ini, dan Anda bisa melakukan ini sampai Integer.MAX_VALUE, batasan bilangan bulat bahasa.

Penjelasan:

'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.

Cobalah online!

Addison Crump
sumber
4

Serius, 15 byte

Program pertama, 6 byte (berisi yang tidak patut dicetak):

5Ql-.

Hex Dump:

35516c2d2e7f

Program ini mencetak 1: Cobalah secara online

Semua program lainnya adalah program yang 1valid yang mencetak dirinya sendiri seperti jawaban Pyth. Program asli mencetak panjang kode sumbernya minus 5 dan segera berakhir. 1s ditambahkan ke ujung menambah panjang kode sumber sebanyak 1 byte setiap kali, tetapi tidak pernah dieksekusi.

kuintopia
sumber
2

Jolf , 14 byte

Coba di sini!

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

Ketika dijalankan, ini akan dicetak 1. Jadi p2 = 1,. Mengeksekusi p2hasil 1. Jadi, untuk semua N > 1, pN = 1.

Perhatikan p1p2: a-1q41. Ini transparan ke:

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

Karena pencetakan implisit dinonaktifkan setelah cetakan pertama, ini dicetak 2, karena panjang kode sumber minus 4 adalah 2. Dan terus dan terus.

Conor O'Brien
sumber
2

Ruby, 318 byte

p 1 :

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

Setiap program p terpisah i output ini satu-line Quine: _="_=%p;puts _%%_";puts _%_.

Ketika Anda menambahkan quines ini ke akhir p 1 , mereka berakhir sebagai garis dalam DATAobjek karena mereka di bawah sihir __END__.

Inilah tesnya:

$ 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

Sepuluh program pertama yang disatukan terlihat seperti ini (318 byte):

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 _%_
daniero
sumber
1

C #, 2099 + 7 = 2106 byte

Program pertama (menggunakan flag kompiler /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);}}

Program kedua:

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("\"","\"\""));}}

Program ketiga:

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("\"","\"\""));}}

Anda mendapatkan idenya.

LegionMammal978
sumber
0

Javascript ES6, skor 483 455

Program 1, 77 byte:

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

Program 2 dan seterusnya, masing-masing 42 byte:

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

PHP, 1470 byte

Program 1: 219 byte:

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 dan lebih dari 139 byte:

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

gunakan seperti:

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();"

Menggunakan versi yang sedikit golf teknik quine php yang dirinci di sini: http://10types.co.uk/the-lab/a-minimal-php-quine/

pengguna59178
sumber