Terinspirasi oleh Hyperprogramming: N + N, N × N, N ^ N semuanya dalam satu .
Terima kasih kepada @MartinEnder dan @trichoplax untuk bantuan mereka di kotak pasir.
Definisi
Hyperquine
Tetapkan hyperquine of order n sebagai program penuh seperti-quine atau fungsi P yang memenuhi semua aturan yang berlaku untuk quine yang tepat dan, di samping itu, memiliki struktur berikut.
P adalah gabungan dari karakter ‡ grup yang terdiri dari n salinan dari karakter yang sama. Ketika P dieksekusi, outputnya adalah gabungan dari grup yang sama, ditambah oleh satu salinan karakter.
Contohnya
Dalam bahasa pemrograman hipotetis di mana kode sumber
aabbcc
menghasilkan outputaaabbbccc
, program ini merupakan hyperquine of order 2 .Definisi ini tidak memerlukan karakter dari kelompok yang berbeda untuk berbeda.
Jika kode sumber
aabbcc
menghasilkan outputaaaabbbbcccc
, program adalah hyperquine pesanan 1 ; kode sumber terdiri dari enam kelompok karakter tunggal, output dari enam pasangan karakter.Di GS2 , program yang kosong dicetak
\n
, dan program yang\n
dicetak\n\n
. Namun, tidak\n
juga\n\n
hyperquine, karena mereka tidak memenuhi semua sifat quines yang tepat ; tidak ada bagian dari kode sumber yang mengkodekan bagian berbeda dari output.
Rantai hyperquine
Tentukan rantai panjang hyperquine n sebagai urutan terbatas dari n program penuh atau fungsi n
(P 1 , ..., P n ) yang memenuhi batasan berikut.
Output dari P 1 , ..., P n-1 adalah P 2 , ..., P n , masing-masing.
P 1 ,…, P n adalah hyperquine.
Perintah P 1 , ..., P n membentuk urutan peningkatan ketat dari bilangan bulat yang berdekatan .
Akhirnya, tentukan rantai hyperquine tak terbatas sebagai urutan tak terbatas dari program atau fungsi penuh (P 1 , P 2 , ...) sedemikian rupa sehingga setiap interval awal (P 1 , ..., P n ) merupakan rantai panjang hyperquine n .
Contohnya
Dalam bahasa pemrograman hipotetis di mana kode sumber
aabbcc
menghasilkan outputaaabbbccc
, yang, pada gilirannya, menghasilkan outputaaaabbbbcccc
, pasangan (aabbcc
,aaabbbccc
) membentuk rantai hyperquine dengan panjang 2 .Perhatikan bahwa
aaaabbbbcccc
- output dari hyperquine terakhir dalam rantai - tidak harus menghasilkan output spesifik; bahkan tidak harus menjadi kode sumber yang valid.Melanjutkan contoh sebelumnya, jika
aaaabbbbcccc
menghasilkan outputaaaaabbbbbccccc
, triplet (aabbcc
,aaabbbccc
,aaaabbbbcccc
) merupakan rantai hyperquine panjang 3 .Jika pola ini terus selamanya, urutan (
aabbcc
,aaabbbccc
,aaaabbbbcccc
, ...) merupakan rantai hyperquine tak terbatas.Pasangan program (
abc
,aabbcc
) dengan output (aabbcc
,aaaabbbbcccc
) bukan rantai hyperquine, karena urutan hyperquine keduanya 1 , sehingga mereka tidak membentuk urutan peningkatan yang ketat.Pasangan program (
aabbcc
,aaaabbbbcccc
) dengan output (aaaabbbbcccc
,aaaaabbbbbccccc
) bukan rantai hyperquine, karena urutan hyperquine adalah 1 dan 4 , sehingga mereka tidak membentuk urutan bilangan bulat yang berdekatan.
Aturan
Tugas
Dalam bahasa pemrograman pilihan Anda, tulis rantai hyperquine non-trivial, yaitu rantai yang terdiri dari setidaknya 2 hyperquine.
Seperti biasa, program Anda mungkin tidak mengambil input apa pun atau mengakses kode sumbernya sendiri dalam bentuk apa pun.
Jika penerjemah Anda mencetak baris baru yang tersirat, hyperquine Anda harus menjelaskan hal ini.
Semua celah standar - terutama yang terkait dengan quines - berlaku.
Mencetak gol
Rantai hyperquine terpanjang menang. Jika dua atau lebih kiriman diikat, kiriman di antara ini yang dimulai dengan hyperquine terpendek (diukur dalam karakter ‡ ) menang. Seperti biasa, waktu posting adalah tiebreak terakhir.
‡ Anda harus menggunakan pengkodean karakter yang sama untuk kode sumber, output, jumlah karakter, dan eksekusi. Sebagai contoh, program Python print 42
adalah tidak 2 karakter UTF-32 pengajuan, karena penafsir memperlakukan setiap byte sebagai karakter tunggal. Jika bahasa pilihan Anda tidak berbasis karakter, perlakukan semua byte sebagai karakter.
Jawaban:
Befunge-98 , urutan tak terbatas,
54523836 bytePendekatan kedua - urutan tak terbatas, 36 byte
Program ini akan benar-benar pecah pada hyperquine ke-34 karena nilai ASCII
"
akan mengganggu interpretasi string (dan pada 59,;
), tetapi kami mengimbangi penyimpanan nilai tersebut ke posisi yang tidak akan pernah dieksekusi (yaitu(0, 1)
bukannya(0, 0)
).Cobalah online: 1 , 2 , 10 , 34 , 42
Penjelasan
Pendekatan pertama - order 34, 52 byte (menggunakan introspeksi, jadi secara teknis tidak legal)
Untuk alasan di posting di atas, program ini akan rusak di urutan 34 (meskipun saya belum diuji).
Cobalah online!
sumber
g
, yang tampaknya langsung membaca kode sumber program. Yang mengatakan, aku bukan ahli Befunge, jadi aku mungkin salah paham tentang sesuatu.g
untuk dua tujuan di sini: untuk menyimpan data dan membaca kode sumber. Yang kedua mungkin agak samar, meskipun esolangs.org/wiki/Befunge#Quine memiliki contoh menggunakang
untuk membaca kode sumber juga. Sementara itu, saya akan melihat apakah saya dapat membuat versi yang tidak menggunakan introspeksi apa pun.> <> , urutan tak terbatas, 178 byte
Program ini berisi linefeed baris tambahan.
Cobalah online: 1 , 2 , 3 , 10 (Yang terakhir butuh beberapa saat untuk berjalan.)
Skrip retina untuk menghasilkan sumber dari program linear.
Penjelasan
Gagasan utamanya adalah mengubah quine vertikal, sehingga aliran kontrol aktual tidak terpengaruh oleh pengulangan. Misalnya hyper quine kedua dimulai seperti:
Karena kita hanya bergerak melalui kolom pertama, kita tidak perlu khawatir tentang karakter yang diulang. Juga ketika kita mendorong sebagian besar kode sebagai string
'
, ini akan mendorong spasi untuk setiap baris kosong, yang memberi kita cara untuk menentukan jumlah pengulangan. Yang mengatakan, ada beberapa batasan karena baris kosong ini:"
untuk mendorong angka besar sebagai kode karakter di bagian utama quine, karena ini akan mendorong tambahan32
yang tidak kita inginkan.?
atau!
karena mereka hanya melewatkan karakter berikutnya yang akan menjadi spasi dalam kasus itu (sehingga mereka tidak akan benar-benar melewatkan perintah berikutnya).Oleh karena itu, semua aliran kontrol dilakukan dengan lompatan eksplisit (goto 2D, pada dasarnya), yang offset sebenarnya yang perlu kita hitung berdasarkan jumlah pengulangan.
Jadi mari kita lihat kode yang sebenarnya. Kita mulai dengan
^
begitu kode dieksekusi dari bawah ke atas. Untuk membaca lebih mudah, mari kita menuliskan kode aktual dalam urutan eksekusi (dan lepaskan kode^
karena tidak pernah dieksekusi lagi):Ini
'
adalah teknik quining standar untuk> <> (dan Befunge, saya kira). Ini beralih ke mode string yang berarti bahwa karakter yang ditemui didorong ke stack sampai yang berikutnya'
ditemui. Garis-garis kosong secara implisit diisi dengan spasi-spasi itulah sebabnya kami mendapatkan semua spasi di antaranya. Baris kosong di akhir program diabaikan. Jadi setelah IP membungkus dan klik'
lagi, kita punya kolom pertama dari program di stack, kecuali untuk'
dirinya sendiri.Mari kita lihat bagaimana kita menggunakan ini untuk mencetak seluruh program.
Program berakhir ketika tumpukan kosong dan loop dalam pertama gagal mencetak karakter lain.
sumber