A 1-up Quine adalah program yang sangat mirip dengan Quine a. Satu perbedaan utama adalah bahwa alih-alih mencetak sendiri satu kali, ketika n salinan program digabungkan, hasilnya mencetak program asli n + 1 kali.
Contoh
Jika program Anda adalah Abc123
:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Tantangan
Tantangan Anda adalah membuat quine 1-up terpendek yang valid dalam bahasa apa pun. Aturan quine yang biasa berlaku, jadi Anda tidak boleh:
- Kirim program kosong.
- Langsung atau tidak langsung, baca 1 kode sumber.
- Gunakan quining built-in.
Ini adalah kode-golf, jadi kode terpendek dalam byte menang.
1 Ini tidak termasuk menggunakan string atau blok kode hard-coded sebagai bagian dari program Anda.
code-golf
quine
code-generation
Produksi ETH
sumber
sumber
n
dibatasi oleh beberapa batasan tipe data (ukuran integer maksimum, dll)?Jawaban:
GolfScript, 12 byte
Cobalah online!
Penjelasan
Ini menggabungkan ide-ide dari quine GolfScript standar:
Dan quine saya yang baru ditemukan :
Gagasan utamanya adalah lagi untuk menggunakan
n
yang dicetak secara implisit di akhir program untuk mendapatkan salinan tambahan dari quine. Karena menugaskan variabel tidak mengubah apa pun ketika dilakukan lagi di salinan berikutnya, ini hanya akan menambah satu salinan. Berikut ini rincian kode:sumber
GolfScript, 12 byte
Cobalah online!
Cara kerja kode sumber
Jika kode sumber di atas dijalankan sekali, tumpukan akan berakhir sebagai
di mana string kosong di awal sesuai dengan keadaan awal stack (input kosong).
Dua salinan kode sumber akan meninggalkan status akhir
tiga salinan keadaan terakhir dari
dan seterusnya.
Apa yang terjadi selanjutnya
Setelah mengeksekusi kode sumber, penerjemah melakukan hal berikut.
Itu membungkus seluruh tumpukan dalam sebuah array, dan mendorong array itu pada stack.
Untuk dua salinan kode sumber, tumpukan sekarang berisi
Itu dijalankan
puts
dengan maksud mencetak tumpukan dibungkus, diikuti oleh linefeed.puts
didefinisikan sebagai{print n print}
, demikian juga yang berikut ini.print
mencetak salinan tumpukan yang terbungkus tanpa memeriksanya (yaitu, tanpa mengubahnya menjadi representasi dawai). Ini mengirimkan(kode sumber) ke STDOUT dan muncul salinan tumpukan dari atas tumpukan.
Tumpukan sekarang berisi
mengeksekusi blok kode yang kita definisikan sebelumnya.
:
dimulai dengan menyimpan[{: ".~"][} ".~"]
karakter spasi, lalu".~"
mendorong dirinya sendiri,]
membungkusnya".~"
dalam array, dan[
menetapkan penanda array baru.n
mendorong string yang terdiri dari satu linefeedfeed.Tumpukan sekarang berisi
dieksekusi sekali lagi. Namun, itu didefinisikan ulang ketika kami menyebutnya pertama kali dan sekarang berisi array, bukan blok kode.
Bahkan, itu mendorong
[{: ".~"][} ".~"]
, meninggalkan tumpukanAkhirnya,
print
cetak item tumpukan paling atas tanpa memeriksanya, mengirimke STDOUT, 1-upping kode sumber.
sumber
Javascript ES6 (REPL), 55 byte
Disimpan 2 byte berkat @ user81655!
Penjelasan
Berikut kerangka kerja standar quine:
Anda harus dapat melihat kerangka kerja ini di dalam kiriman. Penjelasan lebih lanjut di bawah ini.
Ini adalah penghitung, default ke 1. Pada dasarnya, ini memberitahu kita berapa banyak untuk mengulang quine dan kenaikan pada saat yang sama.
Ini adalah bagian quine. Kami pada dasarnya mengulangi string quine dengan penghitung + 1. Panggilan fungsi selanjutnya akan menggantikan output.
sumber
a
).var
CJam, 14 byte
Cobalah online!
Bagaimana itu bekerja
Setelah salinan terakhir dari program dieksekusi, array yang berisi blok dan string masih ada di stack, sehingga dicetak secara implisit.
sumber
Groovy, 83 byte
Ada satu baris yang disematkan dan tidak ada yang tertinggal. Ini mencetak:
Fungsi ini
f()
mencetak satu salinan quine. Program awal menyebutnya dua kali. Baris pertama dari kode yang ditambahkan menjadi komentar dan hanya panggilan kedua untukf()
dieksekusi.sumber
Ruby, 43 byte
Dengan sendirinya, ini mencetak dirinya sendiri
2-0
atau2
waktu. Ketika digabungkan ke salinan lain dari dirinya sendiri, pernyataan cetak akhir terlihat seperti$><<s%s*n=2-01
, yang berarti output itu sendiri hanya sekali (01
menjadi oktal 1). Jadi hanya salinan akhir dari string yang dicetak dua kali, yang lain mencetak sekali.Penugasan sebaris
n
hanya untuk membuat urutan operasi bekerja dengan benar; negara sebenarnya tidak diteruskan dari satu salinan ke yang berikutnya.sumber
NodeJS,
63616055 byteini juga akan berfungsi dalam JavaScript (ES6) jika Anda menganggap beberapa pesan konsol dipisahkan oleh baris baru (tidak perlu REPL)
Disimpan 2 byte berkat @ dev-null
perhatikan bahwa ada baris baru di akhir kode.
Ini yang menarik, pasti salah satu favorit saya untuk situs ini sejauh ini.
Saya cukup yakin ini tidak bisa bermain golf lebih banyak. (mungkin
print
fungsi SpiderMonkey ...)Penjelasan
sumber
(f=_=
Saya mungkin sedikit terlalu lelah.Ruby, 55 byte
Tidak ada yang sangat menarik di sini, itu hanya quine ruby normal dengan penghitung.
sumber
JavaScript (ES6), 164 byte
Berfungsi di halaman pengujian atau konsol JS apa pun di Firefox, dengan asumsi ruang antara dua pesan konsol dianggap sebagai baris baru.
sumber
window
menjadithis
.Perl 6 ,
5853 byteTerima kasih kepada Jo King untuk -5 byte.
Berdasarkan quine Jo King .
Cobalah online!
sumber
Japt, 40 byte
Uji secara online! Penjelasan yang akan datang.
sumber
Y
Tidak bersaing, 6 byte
Y adalah headcannon yang saya miliki untuk sementara waktu, dan ini mengilhami saya untuk menulisnya. Itu dibuat untuk tantangan di mana urutan adalah kunci, seperti ini. Kode dibagi menjadi tautan oleh karakter "simpul". Dalam hal ini, kode kita dimasukkan ke dalam dua rantai (aslinya), dengan simpulnya
C
.U
merekam string transendental, yaitu string yang merentang tautan. Ia merekam sampai bertemu yang lainU
. Jika aU
tidak terpenuhi pada akhir string, ia membungkus. Juga,U
termasuk dalam string secara default. Setelah merekam string, kita melanjutkan ke nodeC
, yang hanya memindahkan kita ke tautan selanjutnya.n
mendorong jumlah rantai. Untuk kasus dasar kami, ini 2. Untuk urutanK
rantai, adaK+2
rantai, karena adaK
node.*
adalah repittion string.p
mencetak seluruh tumpukan (dalam hal ini, satu string), danx
mengakhiri program.Dalam sebuah teks:
Coba di sini!
sumber
U
selain quining? (Selamat atas 7k, btw)Brachylog , 20 byte
Cobalah online!
Dimodifikasi dari quine ini.
Ketika ini digabungkan dengan dirinya sendiri, setiap rute kecuali yang terakhir gagal dan program bergerak ke yang berikutnya, mengeksekusi masing
w₃
- masing dan mundur melewati setiapw₅
kecuali yang terakhir.Cobalah online!
Cobalah online!
Cobalah online!
sumber