Tugas Anda adalah membuat quine iterating periode terpanjang , di mana panjang setiap program dalam urutan dibatasi oleh 500 byte.
Yaitu, jika Anda mengulangi langkah-langkah berikut:
- Mulailah dengan program awal Anda
- Jalankan program saat ini
- Kembali ke langkah 2
Anda akhirnya akan kembali ke program semula. Jumlah program dalam siklus adalah skor Anda, yang Anda coba maksimalkan.
Tak satu pun dari program dapat menimbulkan kesalahan. Setiap program harus dijalankan dengan cara yang sama juga (mis. Tidak ada versi yang berbeda, implementasi, opsi kompiler, platform, dll ...) (EDIT: Ya, setiap kondisi eksternal seperti generator nomor acak semu termasuk dalam yang terakhir pernyataan. Status eksternal harus "reset" setelah setiap kali dijalankan. Jika Anda menggunakan angka acak benar, kasus terburuk dianggap.)
Apa yang membedakan tantangan ini dari Periode iterating quine terpanjang (selain 100 vs 500) adalah bahwa setiap program dalam siklus juga harus 500 byte atau kurang. Ini berarti bahwa siklus terpanjang yang mungkin adalah (256 ^ 501 - 1) / 255 atau kurang. Tentu saja itu adalah angka yang besar, tetapi tidak seberapa besar dalam hal berapa banyak kode yang diperlukan untuk menghitung. Jadi tantangannya adalah tentang menggunakan sebanyak mungkin (256 ^ 501 - 1) / 255 kemungkinan yang Anda bisa, bukan tantangan berang-berang yang sibuk.
Program tidak diizinkan mengakses kode sumbernya sendiri. Namun program kosong yang diizinkan jika Anda ingin (selama Anda mengikuti aturan lainnya).
Karena memeriksa program secara manual akan sulit, Anda dapat mengetahui skor menggunakan metode teoritis. Anda harus memasukkan penjelasan tentang skor dan kebenaran dengan program Anda. Jika Anda tidak dapat mengetahui skor, Anda dapat menggunakan batas bawah dari jumlah program dalam siklus sebagai skor defacto. Anda diizinkan untuk memperbarui ini karena Anda menemukan batas bawah yang lebih baik, atau jika Anda menemukan skor aktual yang sebenarnya.
Ini adalah tantangan kode , jadi skor tertinggi menang!
EDIT: Disarankan agar Anda menulis berapa skor Anda dalam notasi ilmiah, sehingga jawabannya lebih mudah dibandingkan. Sangat baik untuk memiliki bentuk skor lain juga, terutama jika mereka lebih jelas terhubung ke program Anda. Selain itu, pembaca didorong untuk mengedit jawaban sebelumnya untuk mematuhi ini.
sumber
Jawaban:
Perl 6 ,126398≈ 8,86 × 10835 iterasi
Cobalah online!
Ini beralih melalui semua kombinasi yang mungkin dari 126 byte pertama panjang 398 dan di bawah (tidak termasuk string dengan NUL byte terkemuka). Jika Anda ingin melihat bahwa itu benar-benar kembali ke iterasi pertama, Anda dapat mengurangi panjangnya menjadi 1 dengan mengubah batas seperti itu .
Penjelasan:
Setiap iterasi menambah string, disimpan dalam bentuk basis 126, dan kemudian mengubahnya kembali ke basis 126. Ia melakukan ini hingga mencapai string dengan panjang 399, dan kemudian mengatur ulang string kembali menjadi kosong lagi. Jika Anda kesulitan membuat konsep angka, bayangkan dengan sepuluh byte saja. Mulai dari104 - 1 iterasi (termasuk
0
, kenaikan hingga 4 digit,1000
dan reset. Ini adalah0
atau string kosong dalam kasus program saya).sumber
Pesona
Rise,64654106; 122 387 -1 ≈ 2,638 × 10 807 iterasiCobalah online!
Peringatan: Tampilannya
€
salah, seharusnya `` (0x80).Daripada stack, gunakan string dan operator stack dimodifikasi dengan
͍
untuk memodifikasi string daripada stack (lihat revisi sebelumnya). Karenanya, setiap karakter dibatasi hingga 1 byte (rentang 0-127, minus karakter bermasalah), tetapi dengan karakter lebih dari 3 kali lebih banyak (karena pemrosesan pelat pelat lebih sedikit karena tidak harus melewati karakter kombinasi Unicode, seperti serta beberapa penghematan byte lainnya) itu mencapai jumlah iterasi yang lebih tinggi.Jika pengkodean sebagai big endian sejati diizinkan (yaitu, memiliki nilai byte di atas 127 tanpa memotong
0x00
byte) ini dapat mencapai 251 387 -1 ≈ 4,717 × 10 928 iterasi. Namun, pengkodean Latin TIO mencegah hal ini sebagaimana dicatat oleh Erik the Outgolfer dalam jawaban Python 2-nya. Saya perlu memeriksa apakah itu berfungsi secara lokal sebelum mengklaim skor ini.Seharusnya bisa diganti
f1+0B
dengan'0B
(ada yang belum dicetak di0x16
sana), tapi itu melelahkan saya (hal-hal tidak ingin bercabang / melompat / kembali dengan benar), jadi saya meninggalkannya sendirian. Ini akan meningkatkan struktur big-endian dari 387 menjadi 388.sumber
DOS COM, 49 byte, periode 2 ^ 3608
Perakitan asli untuk dibuat:
Permata kecil ini menulis fase berikutnya ke q.com daripada output standar karena nulls dan hal-hal lain yang tidak dapat ditangani terminal. Teknik quine root setara dengan stringifikasi dan ruang payload digunakan sebagai penghitung 3608 bit. Karena cara kerja DOS, keadaan awal penghitung berisi puing-puing dari apa pun yang ada dalam memori sebelum eksekusi pertama.
Input 49 byte asli tidak dapat dijangkau, jadi jika Anda ingin memberi nilai 500 byte, silakan.
sumber
C # (Visual C # Interactive Compiler) , flags:
/u:System.Numerics.BigInteger
dan/r:System.Numerics
Nilai: 10 332
Terima kasih kepada JoKing yang meningkatkan skor saya dari 10 255 * 2 - 1 hingga sekarang!
Cobalah online!
Penjelasan
Menambah BigInteger setiap iterasi, hingga panjangnya menjadi terlalu besar, yang dalam hal ini kami langsung kembali ke quine asli.
sumber
Python 2 , 500 byte,252219
Perhatikan bahwa ada baris baru yang tertinggal. Mungkin akan dihapus di atas jika highlighter sintaks memaksa masuk
Sayangnya, Anda tidak dapat menjalankan program ini di TIO, karena disandikan dalam bahasa Latin-1.
Di atas,
s
berisi 219 0x01 byte. Setelah program berjalan, sumbernya dicetak, kecuali untuk satu perbedaan:s
telah bertambah seperti angka base-252 big-endian, jadi karakter paling kiri telah "bertambah" menjadi 0x02. Bytes 0x00, 0x22, 0x25, dan 0x5C dihindari, jadi, jika karakter string apa pun menjadi salah satu dari mereka setelah penambahan, karakter itu sendiri akan bertambah lagi."
): Ada bahaya tiga 0x22 byte terbentuk dalam satu baris, yaitu"""
,, atau karakter terakhir dari string menjadi"
, sehingga string akan ditutup sebelum waktunya.%
): printf-seperti format string digunakan sebelum menyelesaikan kerangka Quine, sehingga%
tidak berdekatan dengan yang lain%
dis
akan menimbulkan masalah. Sayangnya, tidak mungkin untuk menyusun ulang format untuk menghindari peringatan ini.\
): Ada kemungkinan bahwa\
itu digunakan sebagai tanda pelarian dalam string, bukan kata demi kata, jadi itu dihindari.Oleh karena itu, 252 dari 256 byte dapat digunakan. Jika
s
mengandung 219 0xFF (ÿ
) byte, itu hanya dikembalikan ke 219 0x01 byte, karenanya menyelesaikan siklus.Diberikan di atas, kita punya252219 string yang mungkin, maka banyak program secara keseluruhan.
sumber
Bersih ,251226≈ 2.1 × 10542
251 39menghapus ketergantungan padaText
251 122fungsi penambahan golf251 128string sumber awalan dan sufiks gabungan251 188menghapus ketergantungan padaGast.GenLibTest
Disajikan dalam format xxd karena tidak dapat dicetak / UTF-8 tidak valid:
Cobalah online!
Increment string 226-byte melalui semua nilai byte tidak termasuk
\0
,\n
,\r
,'
dan\
.Alasan kami menghindari karakter ini adalah:
\0
membuat kompiler marah\n
dan\r
tidak dapat muncul di daftar nama'
akan mengakhiri daftar charlist\
dapat menyebabkan masalah jika muncul sebelum karakter yang dapat melarikan diriSetelah semua string
\377
s itu membungkus ke semua\001
s, memberikan program aslinya.sumber
C2 80
. Apakah ini sama dengan perilaku pada mesin lokal Anda?Gol> <> , 70 byte, 39039000 iterasi
Wow, itu jauh lebih rendah daripada yang saya kira akan ... Langkah selanjutnya! Membuatnya memiliki lebih banyak iterasi !!!
Cobalah online!
sumber