Sementara mencoba golf beberapa jawaban saya, saya perlu menulis bilangan bulat besar dalam karakter sesedikit mungkin.
Sekarang saya tahu cara terbaik untuk melakukannya: Saya akan membuat Anda menulis program ini.
Tantangan
- Tulis program yang ketika diberi bilangan bulat positif, mengeluarkan program yang mencetaknya menjadi stdout atau setara.
- Program output tidak harus dalam bahasa yang sama dengan pembuatnya.
- Output harus paling banyak 128 byte.
- Anda dapat menerima input dari stdin atau setara (bukan input fungsi)
- Anda dapat menampilkan program yang dihasilkan ke stdout atau setara.
- Output angka harus dalam desimal (basis 10)
Mencetak gol
Skor Anda sama dengan bilangan bulat positif terkecil yang tidak dapat dikodekan oleh program Anda.
Entri dengan skor tertinggi menang.
Jawaban:
Python 3 → CJam, (163 122 - 1) · 255/162 + 1 ≈ 1.213 · 10 270
Ternyata setiap bilangan bulat dari 1023 hingga (163 122 - 1) · 255/162 dapat diwakili dalam setidaknya satu cara dengan basis b ≤ 163 konversi dari string paling banyak 122 karakter dengan kode 93 hingga b + 92, daripada biasa 0 sampai b - 1. Ini menghindari karakter merepotkan 34 (kutipan ganda) dan 92 (backslash) tanpa kode output tambahan.
sumber
Pyth, 252 111 ≈ 3.593 × 10 266
Harus menggunakan sedikit sintaks Python, karena Pyth
print
tidak dapat mencetakiso-8859-1
.Nomor tersebut akan dikodekan dalam basis 252 dan mewakili setiap digit dalam basis itu sebagai karakter iso-8859-1. Karakter
\
dan"
perlu melarikan diri, dan karena itu tidak digunakan. Char`
tidak digunakan karena golf ... Dan selain itu null-byte juga tidak digunakan, kompiler Pyth melarangnya.Outputnya adalah program dengan overhead 17 byte:
Berikut adalah contoh penggunaan dengan jumlah terbesar yang mungkin:
Penjelasan
dari program keluaran.
sumber
12
, karena Pyth sayangnya membaca CR sebagai LF .CJam, 254 109 ≈ 1,34 x 10 262
Saya menyandikan angka pada basis 254 dan mewakili setiap digit pada basis itu sebagai karakter ISO 8859-1, melewatkan
"
dan\
. Output memiliki overhead 19 byte""{_'[>-_'!>-}%254b
, jadi saya bisa mewakili semuanya kurang dari 254 128-19 , atau secara eksplisitSebagai contoh,
6153501
akan dikodekan sebagaiBerikut ini adalah program pengujian yang mencetak bilangan bulat yang disandikan, dan kemudian mencetak panjangnya, dan kemudian mengeksekusinya segera untuk menunjukkan validitasnya (ini menghindari kesulitan untuk menyalin karakter yang tidak diinginkan ke dalam program baru, yang tidak selalu berfungsi dengan penerjemah online).
sumber
Perl, 10 216
Juga basis 100 encoding, sedikit lebih elegan. Output untuk
12345678
menjadi:Pembatas
{
dan}
sesuai dengan nilai hexb7
dand7
masing - masing, yang tidak dapat muncul dalam input, dan karena itu tidak perlu diloloskan.Ada 20 byte overhead, meninggalkan 108 untuk encoding, mencapai nilai maksimum 10 216 -1.
Perl, 10 206
Pengkodean basis 100 sederhana. Output untuk
12345678
akan terlihat seperti ini:Ada 25 byte overhead, meninggalkan 103 untuk encoding, mencapai nilai maksimum 10 206 -1.
sumber
Common Lisp, 36 114 - 1 ~ 2,62 × 10 117
Jumlah terbesar adalah:
2621109035105672045109358354048170185329363187071886946329003212335230440027818091139599929524823562064749950789402494298278678348138409040
Cukup gunakan basis 36. Untuk input terbesar, output panjang 128-byte adalah:
sumber
CJam, 233 114 ≈ 7.561⋅10 269
Program output
"…"{iKms*}%233b
menerjemahkan karakter 8-bit string ke basis 233 digit dengan n ↦ ⌊ n ⋅ sin 20⌋ = ⌊ n ⋅ 0,913⌋. Transformasi ini kebetulan bersifat surjektif tanpa memerlukan codepoint kritis 34 (kutip ganda) dan 92 (backslash) sebagai input.sumber