7 , 31 karakter, skor 30, aman tapi mungkin rusak?
Program 7 biasanya hanya angka, tetapi bisa berisi spasi, membaginya menjadi beberapa angka. Oleh karena itu pengajuan ini terdiri dari dua angka (yang secara implisit digabungkan oleh 7 penerjemah), dan program juga mengambil dua angka sebagai input, melalui input standar. (The "31 karakter" di header adalah total panjang dari dua angka, ditambah satu karakter spasi putih yang terpisah; digit yang membentuk angka ditafsirkan sebagai oktal ketika digunakan sebagai program, tetapi desimal saat digunakan sebagai input, dan itu digit yang sama dalam dua kasus, bukan angka yang sebenarnya. Perhatikan bahwa itu tidak relevan baik ketika diperlakukan sebagai program, atau ketika diperlakukan sebagai input, apakah Anda memisahkannya dengan spasi atau baris baru, saya harap itu tidak dapat membatalkan pengajuan.)
Output yang diharapkan adalah angka berikut (dinyatakan di sini dalam desimal, karena itulah format output yang digunakan oleh 7 juru bahasa):
238363505302130098723162537059
Perhatikan bahwa 7 penerjemah yang ditautkan dari wiki Esolang secara internal menyimpan angka di unary, artinya Anda tidak mungkin memiliki cukup memori untuk benar-benar menjalankan program itu sendiri untuk melihat apa yang dilakukannya. Saya memverifikasi program melalui mengetahui perilakunya secara manual, dan mengujinya pada input kecil untuk memverifikasi bahwa ia melakukan apa yang saya harapkan. Pendekatan alternatif adalah menulis juru bahasa yang menggunakan metode yang lebih efisien untuk menyimpan angka.
Menghindari keretakan di sini adalah sesuatu yang menyusahkan, tapi saya akhirnya sekarang puas bahwa tidak ada dua angka selain yang ada dalam program itu sendiri yang mampu menghasilkan 238363505302130098723162537059 sebagai output. ( EDIT 1 minggu kemudian: Saya mungkin salah, tergantung bagaimana Anda menginterpretasikan pertanyaan; lihat di bawah. )
Larutan
Program aslinya adalah:
711170237403706
111723603700633
Program ini mengambil dua angka x dan y , dan menghitung hasil dari ekspresi 3 x y- y- 2 (yaitu y( 3 x - 1 ) - 2 ). Jika kami melakukan perhitungan ini di x = 711170237403706 dan y= 111723603700633 , kami mendapatkan hasil 238363505302130098723162537059 sesuai kebutuhan .
Dimaksudkan bahwa tidak ada input lain yang akan memberikan hasil yang diinginkan karena:
Input harus dipilih sedemikian rupa sehingga y( 3 x - 1 ) - 2 = 238363505302130098723162537059 , yaituy( 3 x - 1 ) = 238363505302130098723162537061 (menambahkan 2 ke kedua sisi). Angka ini adalah semiprime, dengan hanya dua faktor:111723603700633 dan2133510712211117 . Hanya satu dari angka-angka ini,2133510712211117 , dapat diekspresikan dalam bentuk3 x - 1 (memberi( 3 × 711170237403706 ) - 1 = 2133510712211117 ). Jadi kita dapat secara unik mengidentifikasi angka mana yangx dan mana yangy , artinya hanya satu input yang berfungsi.
Namun, tergantung pada bagaimana Anda menginterpretasikan pertanyaan, mungkin ada input kedua yang menghasilkan output yang diinginkan (sehingga membatalkan solusi ini):
113 x - 1x79454501767376699574387512354189) yang tidak ada dalam set karakter untuk 7 program. Jadi, jika input dibatasi pada karakter yang sama dengan program, solusi ini valid; tetapi jika input yang mengandung karakter dari luar rangkaian karakter program diizinkan, solusi ini tidak valid.
Penjelasan
Begini cara fungsi solusi yang dimaksud:
711170237403706 111723603700633
7 7 7 Pemisah elemen tumpukan
111 023 403706 111723603700633 Elemen tumpukan awal
111 Nomor 3, secara unary
023 I / O DSL untuk "memasukkan nomor"
403706 111723603700633 Program utama
(Tersirat: jalankan salinan elemen program utama, pertahankan yang asli)
40 Swap {023} di atas {program}, hindari
3 Do I / O menggunakan {023}; pop {program}
0 I / O: numerik
23 Masukkan nomor, salin {111} berkali-kali
706 Tambahkan "6" ke nomor (menurunkannya)
11 Dorong dua elemen tumpukan kosong
17236 Dorong elemen tumpukan "23" (tidak terhapuskan)
0 Escape {23}, mengonsumsi elemen kosong
3 Do I / O menggunakan {23}; pop {elemen di bawah ini}
23 Salin bagian atas input tumpukan beberapa kali
7006 Tambahkan "66" (yaitu kurangi 2)
3 Output {sebagai angka}
3 Keluar dari program (karena tumpukan rendah)
1
7
0
6
66
12345
3123451234512345