Tulis sebuah program (atau fungsi) (sebut saja P1), yang ketika dijalankan, mengeluarkan P2 program lain dari bahasa yang sama dan tepatnya 1 byte lebih panjang dari P1.
Program P2 saat dijalankan, harus mengeluarkan program ke-3 P3 yang 1 byte lebih panjang dari P2. P3 harus menampilkan program P4 yang satu byte lebih panjang dari P3, dll. Hal yang sama untuk P5, P6, ..., P∞.
Rantai program harus pergi tanpa batas waktu, atau ke tempat di mana penerjemah tidak dapat menangani lagi (tetapi harus tetap sebagai program yang secara teoritis valid dalam bahasa)
Aturan
- Celah standar dilarang
- Semua program dalam rantai harus dalam satu bahasa
- Tidak ada input yang diberikan. Output menuju ke stdout atau nilai pengembalian fungsi
- Program harus berakhir setelah periode waktu tertentu. Program yang berhenti menghasilkan output setelah titik waktu tertentu tetapi tidak pernah berakhir tidak memenuhi syarat
P1 program terpendek dalam byte di setiap bahasa menang!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
tumbuh 2 pada setiap iterasi di Ruby. Saya tidak dapat menemukan yang lebih baik. : - /. Tantangan yang menarik!Jawaban:
JavaScript (ES6),
1412 byte-2 byte terima kasih kepada @Shaggy
Cuplikan pengujian
Tampilkan cuplikan kode
sumber
"f=_"
menambahkan ekstra_
sebelum nama parameter, yang menyebabkannya bertambah panjang setiap iterasi.7 , 4 byte ASCII
Cobalah online!
Saya tahu bahwa 7 biasanya tidak dikodekan dalam ASCII, tapi kali ini ini adalah pengkodean yang lebih nyaman sehingga kami menambahkan 1 byte setiap kali dijalankan, bukan 3 bit.
Saya juga tidak yakin apakah ini dianggap curang atau tidak. (Biasanya tidak jelas apakah 7 quine curang atau tidak, karena melintasi garis batas dalam beberapa cara.) Anda dapat membuat argumen yang layak untuk
0
mengkodekan6
, tetapi secara umum tidak jelas dari mana karakter yang dihasilkan "berasal dari" "di 7 karena memiliki begitu banyak, perilaku aneh, cukup aneh.Program ini mencetak dirinya sendiri dengan
1
menambahkan, dan akan melakukannya bahkan jika Anda menambahkan sejumlah1
untuk itu. Inilah jejak debug yang dikomentari160311
:(Tidak ada yang
|
tersisa dalam program, jadie
akan segera keluar dari program sebagai efek samping, artinya final7
tidak pernah berjalan).Kebingungan dasar tentang dari mana semua karakter berasal adalah bahwa sebagian besar perintah di 7 hanya menghasilkan data saat dijalankan, dan kemudian
6
mencoba untuk merekonstruksi urutan perintah yang akan menghasilkan fragmen data yang diberikan; ini seringkali berakhir dekat dengan, tetapi tidak identik dengan, aslinya. (Untuk tujuan quining, Anda biasanya menulis program 7 sedemikian rupa sehingga hasilnya akan hampir sama, biasanya berbeda dalam memimpin atau mengikuti7
.) Jadi misalnya,1
dalam data menjadi716
, yang merupakan cara termudah untuk menambahkan1
ke string data saat ini. Kami awalnya memproduksinya dengan16
, urutan karakter yang berbeda (tetapi serupa), secara destruktif menghapus salah satu|
penanda data dimulai dengan. (Saya kira mungkin argumen terbaik bahwa ini bukan quine literal-satunya adalah bahwa output berbeda dari input!)sumber
Haskell ,
7466 byteEDIT:
<>
, lalu -6 dengan memindahkan(10*)<$>
.Ini sekarang menggunakan
<>
operator baru yang bebas (Semigroup
perkalian, membutuhkan GHC 8.4 untuk bekerja tanpa impor.)Cobalah online! (Curang dengan impor karena TIO belum memiliki GHC 8.4.)
Bagaimana itu bekerja
main=putStr$
adalah boilerplate untuk menampilkan nilai string berikut.fst<>show
adalah fungsi yang mengambil tuple, dan mengembalikan string yang terdiri dari elemen pertama tuple yang digabungkan dengan representasi string tuple. Yaitu(10*)<$>
mengalikan elemen terakhir dari tuple berikut dengan 10, menambahkan digit0
ke representasi stringnya.sumber
(<>)
(10*)<$>
.C (gcc) ,
134132 bytePengerjaan ulang sedikit dari quine C canonical. Sangat panjang.
Cobalah online!
sumber
Fisi 2 , 7 byte
Cobalah online!
Kueri Fisi standar , tetapi dengan tambahan
!
yang mencetak 0x01 tambahan di awal kode pada setiap iterasi.sumber
Pari / GP , 35 byte
Cobalah online!
sumber
Python 2 , 38 byte
Cobalah online!
sumber
brainfuck , 420 byte
Cobalah online!
Ini adalah modifikasi pada quine BrainFuck "standar" , dengan tanda
.
akhir pada.
setiap iterasi tambahan .Quine itu sendiri mengkodekan karakter Brainfuck sebagai tumpukan digit hex: khususnya, digit hex
c-0x2b
, yang dengan mudah adalah sebagai berikut:Pengkodean mencakup dua cuplikan kode:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
mendorong pengodean pengkodean itu sendiri, dan[[<++++++++++++++++>-]<+++++++++.<]
berjalan di tumpukan dan mencetak semuanya.sumber
Kotor , 9 byte
Cobalah online!
Jika membaca kode sumber diperbolehkan:
Kotor , 8 byte
Cobalah online!
Dijelaskan:
Mungkin valid:
Kotor , 4 byte
Cobalah online!
Ini mencetak kode sumber dengan baris baru.
(Dan banyak ruang, karena bug. Ia bekerja sama tanpa mereka.)
Perhatikan bahwa ini hanya bekerja di set karakter asli, dan tidak ketika Anda menggunakan front-end UTF8 - jadi untuk mencobanya pada TIO Anda perlu mengganti karakter yang dihasilkannya antara huruf
[]
s‼
, yang merupakan nilai setara UTF8 untuk pencetakannya .sumber
Java 8,
162146 byteCobalah online.
Coba program keluaran pertama ; Coba program keluaran kedua ; Coba program keluaran ketiga .
Penjelasan:
quine -part :
String s
berisi kode sumber yang tidak diformat.%s
digunakan untuk memasukkan String ini ke dalam dirinya sendiri dengans.format(...)
.%c
,%1$c
dan34
digunakan untuk memformat tanda kutip ganda.s.format(s,34,s)
menempatkan semuanya bersama-samaBagian tantangan:
+1
menambahkan 1 ke program yang tidak diformat dan diformat..replaceAll("1+$","");}
: Karena kami hanya ingin meningkatkan byte-count program dengan satu alih-alih dua, kami menghapus trailing 1s sebelum kembali.sumber
> <> , 9 byte
Cobalah online!
Variasi pada quine klasik> <>, yang hanya menambahkan perintah dupe lain untuk menyalin
#
di depan.sumber
Perl 5 , 32 byte
Cobalah online!
sumber
GolfScript , 9 byte
Cobalah online!
CJam , 9 byte
Cobalah online!
Saya memposting kedua solusi ini dalam jawaban yang sama, karena keduanya hanya variasi sepele satu sama lain dan bekerja dengan cara yang persis sama. Keduanya didasarkan pada quine GolfScript umum
{'.~'}.~
(atau{"_~"}_~
dalam CJam), yang dijelaskan secara lebih rinci misalnya dalam jawaban saya sebelumnya.Satu-satunya perbedaan adalah bahwa varian ini menambahkan
1
byte ke akhir outputnya. Seperti yang terjadi, string apa pun dari1
s (atau bilangan bulat integer lainnya tanpa angka nol di depan) itu sendiri adalah quine sepele di GolfScript dan CJam, jadi siapa pun yang sudah ada di akhir kode di atas hanya akan disalin kata demi kata ke output. Karena GolfScript (dan CJam) menggunakan bilangan bulat panjang sewenang-wenang, ini akan bekerja untuk program panjang yang sewenang-wenang, setidaknya selama komputer yang menjalankan kode memiliki cukup memori untuk menyimpannya.sumber
Attache ,
767261 byteCobalah online!
Quine standar yang menambahkan ruang ke akhir
x
setelah setiap iterasi.Beberapa iterasi pertama:
dll.
Attache, 72 byte
Cobalah online!
Ini hanyalah variasi dari quine format standar, dengan variabel
y
yang diatur10*y
setelah setiap iterasiBeberapa iterasi pertama:
dll.
sumber
Swift 4 , 89 bytes
Termasuk baris baru yang tertinggal
Cobalah online!
sumber
Haskell , 88 byte
Cobalah online! Tumbuh dengan menambahkan terlebih dahulu
#
ke string data.sumber
show
lebih dari sekadar string dan menggunakan pencocokan pola. Cobalah online!Stax ,
2018 byteJalankan dan debug itu
Menghasilkan ruang ekstra sebelum tanda kutip kedua setiap iterasi.
Penjelasan
Menggunakan program
"34s+cTZL "34s+cTZL
untuk menjelaskan.sumber
Jstx , 4 byte
Cobalah online!
sumber
Pesona Rise , 6 byte
Cobalah online!
Salinan langsung jawaban ini pada tantangan terkait. Kebetulan sudah tumbuh 1 byte setiap iterasi (argumen kuat untuk tantangan ini menjadi duplikat dari yang satu atau sebaliknya).
sumber
Jelly , 11 byte
Cobalah online!
sumber
Bertanya-tanya , 33 byte
Varian yang menarik pada quine normal yang menambahkan 1 setelah setiap iterasi.
Kemajuan:
Penjelasan
Salah satu bagian yang menarik dari quine ini adalah Wonder dapat bekerja dengan jumlah presisi yang sewenang-wenang, sehingga progres tidak akan terputus setelah sejumlah tertentu.
sumber
ColdFusion, 277 byte
Ini adalah modifikasi sepele dari quine ColdFusion saya yang menambahkan baris baru setiap kali namanya.
Diuji secara lokal pada lucee-express-5.2.6.60
sumber
Windows Batch,
3836 byteKode ini membuat file yang disebut "q", yang mengandung huruf 'q', dan kemudian menambahkannya ke file asli. Perhatikan bahwa "::" adalah alias untuk "rem" yang tidak memerlukan ruang tambahan.
Disimpan 2 byte berkat pengguna3493001.
sumber
Gol> <> , 7 byte
Cobalah online! Cobalah online !! Cobalah online !!!
Ini adalah variasi sederhana dari Gol biasa > <> quine tetapi menambahkan salinan
H
setiap kali dijalankan. KarenaH
perintah menghentikan program, tambahanH
di akhir tidak mengubah perilaku.sumber
T-SQL , 175 byte
Pertama saya menulis quine SQL, kemudian saya memodifikasinya untuk menambah ruang tambahan (agak terinspirasi oleh jawaban ini ).
sumber
Befunge-98 (PyFunge) ,
2219 byteCobalah online!
Menambahkan <sebelum yang terakhir "setiap generasi.
sumber
C # (Visual C # Interactive Compiler) , 89 byte
Terinspirasi oleh jawaban Kevin Cruijssen.
Cobalah online!
sumber