Dalam tantangan ini, Anda akan menulis sebuah program yang menghasilkan program yang merupakan ganda dari panjang program aslinya. Program ini dikeluarkan harus keluaran program baru program ganda yang panjang.
Contohnya
Jika program saya adalah a
:
< a
> aa
< aa
> aaaa
< aaaa
> aaaaaaaa
Aturan
- Tidak ada built-in quine
- Program asli harus minimal satu byte
- Urutannya secara teoritis harus bekerja tanpa batas
- Program Anda tidak diperbolehkan membaca dari apa pun (file, stdio)
Skor Anda adalah ukuran dari program asli.
code-golf
sequence
quine
code-generation
Downgoat
sumber
sumber
Jawaban:
CJam, 10 byte
Uji di sini.
Penjelasan
sumber
JavaScript,
626137 byteTerima kasih kepada @ Doᴡɴɢᴏᴀᴛ untuk bantuannya!
Asli [37 byte]:
Anak [74 byte]:
Cucu [148 byte]:
Alternatif (dengan mencetak ke konsol, dan sebagai program lengkap):
Asli [61 byte]:
Anak [122 byte]:
Cucu [244 byte]:
Bagaimana itu bekerja!
1.
f=_=>
Tentukan fungsi f asconsole.log(...)
2.
;f()
Jalankan fungsi f.3. (dalam fungsi f)
console.log(...)
Cetak yang berikut ini:f=
teks literal "f ="${'_'.repeat((0+f).length+5)
"_" diulangi untuk panjang f, diubah ke akun untuk karakter yang tidak termasuk dalam stringifikasi f+f}
Pengetatan fungsi f;f()
teks literal "; f ()"Catatan
console.log
diperlukan alih-alihalert
karenaalert
tampaknya tidak berfungsi dengan baik dengan string yang sangat panjang (setidaknya pada konfigurasi mesin / browser saya)_
dimasukkan ke dalam nama parameter (tidak terpakai) dari fungsi f, untuk memastikan bahwa mereka termasuk dalam stringifikasi f.console.log
) dari solusi pertama di atas yang kedua: menambahkan10
fungsi alih-alih0
melemparkannya ke string membuatnya satu byte lebih lama, menghilangkan kebutuhan untuk menambah 1 panjang setelahnya, menghemat satu byte.sumber
0+f
juga harus bekerja untuk melemparkan fungsi ke string(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Minkolang 0,15 ,
1914 byteAsli , anak , cucu .
Penjelasan
Yang dilakukan oleh bit di antara
r
s adalah menduplikasi periode akhir cukup kali untuk memenuhi kriteria penggandaan..
adalah karakter "stop program", sehingga banyak periode pada akhirnya tidak melakukan apa-apa kecuali berada di sana.sumber
CJam, 12 byte
Saat dijalankan, ini akan dicetak
yang, pada gilirannya, akan dicetak
dan seterusnya.
Cobalah online!
sumber
Python 3, 51 byte
Ini termasuk baris baru yang tertinggal.
Output yang mana:
sumber
GolfScript, 11 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
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 satu salinan kode sumber, tumpukan sekarang berisi
Itu dijalankan
puts
dengan maksud mencetak tumpukan dibungkus, diikuti oleh linefeed.puts
didefinisikan sebagai{print n print}
, jadi ia melakukan hal berikut.print
mencetak salinan tumpukan yang terbungkus tanpa memeriksanya (yaitu, tanpa mengubahnya menjadi representasi dawai). Ini mengirimkanuntuk STDOUT dan mengeluarkan salinan tumpukan dari atas tumpukan.
Tumpukan sekarang berisi
mengeksekusi blok kode yang kita definisikan sebelumnya.
:
dimulai dengan menyimpan["" {: ".~"]} ".~"]
karakter spasi, lalu".~"
mendorong dirinya sendiri dan]
membungkus tumpukan dalam array.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, mengirimuntuk STDOUT.
sumber
𝔼𝕊𝕄𝕚𝕟, 26 karakter / 36 byte
Try it here (Firefox only).
Perhatikan bahwa ada baris baru yang tertinggal.
Penjelasan
Standar quine:
⟮ⒸⅩ222+ᶈ0
Modifikasi:
ô
fungsi untuk menampilkan quines semua hasil, bukan hasil terakhir (seperti yang dilakukan menggunakan output implisit)\u27ee⦃ᶈ0}\u27ef\n
dan tutup blok salin untuk mencegah konflik dengan blok salin nanti.ď2
untuk mengulangi string dua kali.sumber