128 bahasa ini quine ouroboros (program yang menghasilkan program dalam bahasa lain, yang menghasilkan program dalam bahasa lain, (125 bahasa kemudian), yang menghasilkan program asli) cukup mengesankan. Namun sayangnya, ia memiliki jumlah iterasi yang statis.
Tulis sebuah program yang menghasilkan suatu program (tidak harus dalam bahasa lain, tetapi bisa juga), yang menghasilkan suatu program, yang menghasilkan suatu program, dll., Yang setelah n iterasi, mengeluarkan program asli untuk pertama kalinya (yaitu tidak ada perantara program harus sama dengan yang asli, karena jika tidak quine yang mengabaikan inputnya akan bekerja), di mana n adalah integer non-negatif yang disediakan sebagai input. Input tidak boleh hanya berupa angka dalam kode sumber asli (mis. Menempatkan x = <the value of n>
pada awal program Anda), itu harus salah satu dari yang berikut:
- Diberikan sebagai argumen baris perintah
- Baca dari input standar
- Disahkan sebagai argumen ke fungsi, yang mengembalikan / menampilkan program baru.
Untuk tahap perantara di ouroboros, program Anda dapat berupa program yang berfungsi penuh, atau fungsi tanpa argumen, yang, ketika dipanggil, akan mengembalikan / menampilkan yang berikutnya.
Anda mungkin tidak membaca dari file sumber itu sendiri, atau menggunakan builtin seperti quine (saya tidak berpikir ada yang akan melakukan ini, tetapi mungkin ada)
Agar jelas, jika n = 0
, program harus menampilkan kode sumbernya sendiri.
Jika n = 1
, program harus menampilkan program yang berbeda, yang menampilkan kode sumber asli.
Dan seterusnya...
Bytes paling sedikit menang!
Edit:
Saya seharusnya menulis "Untuk tahap menengah di ouroboros, program Anda bisa menjadi program yang berfungsi penuh tanpa input , atau fungsi tanpa argumen". Jika program Anda menampilkan yang berikutnya dalam rantai, lalu menunggu input, tidak apa-apa, tetapi program Anda seharusnya tidak memerlukan nilai asli n.
getInput()
digunakan tanpa input yang disediakan. Atau bisakah kita katakan masukan sesuatu acak yang tidak digunakan untuk iterasi selanjutnya, untuk mencegah kesalahangetInput()
? Aka apakah jawaban Python saat ini valid?n
, menampilkan program yang merupakan "program awal" dari quine itoboros kami darin
iterasi, dan bahwa jawaban kami tidak boleh dihitung sebagai salah satun
iterasi. Apakah ini benar?Jawaban:
05AB1E , 28 byte
-4 byte + perbaiki terima kasih kepada Kevin Cruijssen
Cobalah online!
Penjelasan
Ini berfungsi dengan menambahkan nomor yang tersisa untuk dicetak ke depan kode, yang berarti ditambahkan ke tumpukan dengan cara yang sama seperti input. Dalam kasus dasar input "0" tidak akan menyatukan 0 di bagian depan.
sumber
d
adalah non-negatif (>=0
) bukan positif (>0
). Masalahnya adalah bahwa untuk mengecekd
tanpa memunculkannya, Anda harus menduplikat terlebih dahulu, tetapi kemudian juga harus dibuang pada iterasi0"quinsting"
, jika tidak maka akan menghasilkan duplikat0
. :("34çìD«s<©di®ì"34çìD«s<©di®ì
untuk 28 byte mungkin (yang masih cukup dekat dengan pendekatan yang Anda maksudkan)? (Saya khawatir versi Anda saat ini untuk0"34çìD«s<Ddiì"34çìD«s<Ddiì
output iterasi-1
dariD
uplicate ..)Pesona Rise , 39 byte
Cobalah online!
Akan 4 byte lebih pendek dari 05AB1E menggunakan taktik yang sama jika inputnya kurang dari atau sama dengan
10
. Tetapi karena kita perlu mendukung nilai-nilai besar yang sewenang-wenang, itu menjadi lebih rumit.Nilai numerik
n
ditempatkan di bagian depan dan diuraikan sebagai bilangan literal berkelanjutan´
."3X4+kSq
adalah kode quine dasar. Jika tidak ada nilai di depan, panjang tumpukan hanya akan menjadi 1 (quine) jika tidak 2 membiarkanl1=d*?
menentukan bagaimana menangani hal-hal dari sana.Jika ada nilai,
S:1-}'LA2+-}
jalankan: tukar nilai ke atas, kurangi 1, gandakan, tinggalkan salinan di bagian bawah tumpukan, dapatkan Log 10 dari nilai itu dikali 100 (menghasilkan panjang karakter nilai sendiri, ditambah 1 untuk´
), hapus banyak karakter dari ujung string (secara efektif memotong sendiri dari ujung, baik di mana tidak diperlukan dan karena memiliki nilai yang salah).C
lebih pendek satu byte dari2+
dan menghasilkan nilai yang sama.Jika tidak ada nilai, baca satu dari input.
Apapun:
:0)2*?
duplikat dan bandingkan dengan nol.Jika push bukan nol
´
.Jika nol, angkat nilainya. Kita bisa curang menggunakan
!
alih-alih2?
dan menyimpan byte karena ketika´
mencoba mengeksekusi byte pertama yang dilihatnya adalah non-numerik dan segera keluar dari mode angka pada posisi yang sama.Cetak seluruh tumpukan dari atas ke bawah.
sumber
Java 10, 145 byte
Cobalah secara online dan lihat output dari beberapa iterasi .
Penjelasan:
penjelasan quine :
var s
berisi kode sumber yang tidak diformat%s
digunakan untuk menempatkan String ini ke dalam dirinya dengans.format(...)
%c
,,%1$c
dan34
digunakan untuk memformat tanda kutip gandas.format(s,34,s)
menempatkan semuanya bersama-samaBagian tantangan:
Fungsi lambda pertama mengambil
long
input sebagai parameter.Long N=n;
dalam iterasi pertama. AtauLong N=%s;
untuk iterasi selanjutnya.N>0?N-1+"L":"n"
akan mengisinya%s
dengan nilaiN-1
, ditambahkan denganL
karena ini panjang dan untuk mengubahnya menjadi String untuk%s
, jikaN
lebih besar dari 1. JikaN
sebaliknya 0 (input awal adalah0
atau ini adalah iterasi terakhir dari interquine- ' loop '), ini akan mengisinya%s
dengan inisialn
.sumber
long
parameter-fungsi, dan fungsi lambda lainnya mengambil parameter yang tidak digunakanVoid
, yang saya juga selalu gunakan untuk tantangan yang menyatakan tidak mengambil input karenav->
1 byte lebih pendek dari()->
.Haskell ,
195164 bytesCobalah online!
Ini menggunakan teknik quine yang cukup sederhana. Kami memodifikasinya dengan variabel
a
yang diatur ke angka. Jika angka itu nol (yang merupakan awal) kami mengambil input dan output sumber kami dengana
set ke nomor input. Jikaa
tidak nol, kami mengeluarkan sumber kami dengana
set ke satu lebih sedikit. Cara inia
menghitung mundur ke nol sebelum mengeluarkan sumber aslinya.sumber
Jelly ,
2220 byteCobalah online!
Coba ulangi panggilan kode
sumber
R , 92 byte
Cobalah online!
Jika
deparse
dianggap curang, berikut ini alternatifnya:R , 108 byte
Cobalah online!
sumber
Perl 6 , 44 byte
Cobalah online!
Mengambil input melalui input standar dan mengembalikan program di mana satu-satunya hal yang berubah adalah angka pertama. Setiap program selanjutnya akan menampilkan program yang sama, kecuali dengan jumlah yang dikurangi.
sumber
C # (Visual C # Interactive Compiler) , 112 byte
Menyimpan banyak byte berkat @NickKennedy!
Cobalah online!
sumber
n
yang seharusnyal
. Bagaimana dengan tio.run/##Sy7WTS7O/P@/…Python 3.8 (pra-rilis) ,
60565553 byteCobalah online!
-2 byte terima kasih kepada Jo King
Pada versi 53 byte, juga berfungsi di Python 2 dan Python 3.
sumber
:=
adalah tambahan selamat datang untuk Python, itu sudah pasti.:=