Anda harus menulis sebuah program atau fungsi yang, ketika diberi tak kosong serangkaian S dari N karakter yang dapat dicetak ASCII † , output program yang akan keluar dengan kode keluar C , di mana C adalah codepoint ASCII pada posisi 0 di S . Program ini Anda menulis akan tambahan keluaran program P , sehingga, ketika dijalankan, itu keluar dengan kode keluar C ' , di mana C' adalah codepoint ASCII pada posisi 1 di S . Program P akan menampilkan program P lainnya . Proses ini berulang hingga tidak ada karakter yang tersisa di S. Setelah ini dilakukan, Anda harus mengeluarkan apa-apa, diikuti oleh baris opsional baru; dan harus keluar dengan kode keluar 0.
† Karakter antara 0x20
dan 0x7e
inklusif.
Beberapa aturan lagi:
- Program modifikasi diri tidak diperbolehkan: Anda harus menampilkan sumber ke STDOUT (atau, mengembalikan nilai awalnya)
- Anda mungkin tidak membaca kode sumber Anda sendiri.
Program terpendek dalam byte akan menang.
Untuk beberapa pengujian yang belum sempurna, skrip ruby ini dapat digunakan. (Argumen pertama adalah cara Anda menjalankan skrip, yang kedua adalah program, dan yang ketiga adalah string input.)
Contoh Hipotetis
Katakan programnya FOO
. Ketika diberi string "ABC", itu menghasilkan BARA
. Program ini keluar dengan kode 65
dan keluaran BARB
. Ini pada gilirannya keluar dengan kode 66
dan ouputs BARC
. Program ini keluar dengan kode 67
dan keluaran BAR!
. Ini tidak menghasilkan apa-apa, dan keluar dengan kode 0
.
0
adalah Sukses. tio.run/nexus/…33 throw
melempar nomor sewenang-wenang. Anda menggunakan negatif untuk tingkat OS, dan offset -512. Idk banyak juga, tapi aku mencari di sini: complang.tuwien.ac.at/forth/gforth/Docs-html/…Jawaban:
Python 2,
12610194 byteDalam proses pembuatan ini, saya menemukan bahwa kode Python mungkin tidak mengandung byte NUL literal.
Cobalah online (menunjukkan kode keluar di info Debug)
Perhatikan bahwa masing-masing program non-kosong di bawah ini memiliki linefeed tambahan.
Untuk input
Hello
, output di atas:yang mencetak
...
yang mencetak
yang mencetak
yang tidak mencetak apa-apa (program kosong)
yang tidak mencetak apa pun dan keluar dengan kode 0.
sumber
Python 3, 77 byte
Kode ini mengambil input dari STDIN dan mengeluarkan program pertama ke STDOUT.
Jika inputnya adalah
ABCDE
, hasilnya adalahdi mana setiap baris berisi kode keluar dan output dari program yang dieksekusi sebelumnya (baris pertama adalah program pertama).
sumber
Python 3 ,
115108100 byteCobalah online!
Untuk input
Hello
, program mencetak:Program di atas mencetak:
dan keluar dengan kode
72
.Cobalah online!
Program di atas mencetak
dan keluar dengan kode
101
.Cobalah online!
Program di atas mencetak:
dan keluar dengan kode
108
.Cobalah online!
Program di atas mencetak:
dan keluar dengan kode
108
.Cobalah online!
Program di atas tidak mencetak apa pun dan keluar dengan kode
111
.Cobalah online!
Program kosong tidak mencetak apa pun dan keluar dengan kode
0
.Cobalah online!
sumber
C, 156 byte
Cobalah online! (Buka tab debug untuk melihat kode keluar.)
Mengambil input sebagai argumen baris perintah.
Untuk input "ABC", ini menampilkan program
yang mengembalikan 65 dan output
yang mengembalikan 66 dan output
yang mengembalikan 67 dan output
yang tidak menghasilkan apa-apa dan mengembalikan 0.
sumber
Python 2, 67 byte
Berdasarkan jawaban ini , tetapi dimodifikasi untuk menggunakan Python 2, dengan program sepele
0
untuk mencetak apa pun dan keluar.Cobalah online
sumber
RPL, 73 byte
Dengan halaman kode hp8.
Nyalakan HP48 Anda atau yang serupa, atau jalankan droid48 . Jangan lupa
-52 SF
untuk visualisasi tumpukan yang lebih baik. Saya berasumsi Anda telah mendorong string, misalnya"ABC"
, di tumpukan. Kemudian masukkan fungsi berikut:(Untuk kenyamanan saya sarankan untuk menekan tombol α dua kali sebelum mengetik apa pun, maka dari itu mengunci mode input alfa. Belakangan cukup gunakan tombol DEL untuk membatalkan pembatas penutup yang dimasukkan secara otomatis. Cukup gunakan tombol ENTER untuk memvalidasi. Jangan lupa spasi setelah operator penusuk.)
Fungsi ini segera mendorong stack program modifikasi sendiri, di bawah bentuk daftar. (Tetapi fungsi di atas tidak memodifikasi sendiri). Karena L dalam RPL awalnya adalah singkatan dari LISP, menekan tombol EVAL memang akan mengevaluasi program ini. Ia mengembalikan kode keluar pada stack tingkat dua, dan daun itu sendiri, dimodifikasi (ya, di sini patut dipertanyakan), untuk Tarahan terakhir. Jadi, tekan EVAL berulang kali hingga program akhirnya berhenti untuk menjatuhkan dirinya di tumpukan level satu. Karenanya, kode keluar terakhir 0 muncul di tingkat satu, dengan kode keluar terakhir di atas. Jika Anda lupa
-52 SF
, Anda dapat menavigasi di tumpukan setelah setiap EVAL dengan menekan tombol ▴ (tinggalkan mode navigasi ini dengan tombol ON). Fungsi di atas menerima string dengan 0x0 karakter di dalamnya, untuk membuat string seperti itu0 CHR
dan+
adalah temanmu Modifikasi diri terdiri dari menghapus char yang digunakan dari string yang tertanam (SUB 2 SWAP PUT
cabang). Oleh karena itu program yang dibatalkan lebih pendek setelah setiap EVAL. The4 DROPN
cabang menjamin keluaran tidak ada instruksi dari OP dihormati, menjatuhkan antara lain program itu sendiri. Tentu saja semua ini menganggap catatan Anda-55 SF
mahir. Pengguna-55 SF
akan dilarang. Selama-lamanya.Saya berasumsi ada solusi RPL / 2, dan dapat menampilkan kode keluar unix yang nyata, tetapi afaik RPL / 2 memiliki introspeksi terbatas, dan tidak dapat mengevaluasi daftar.
sumber
sed ,
467461 byteKode karakter sulit:
Cobalah online!
Jika tidak, logikanya agak langsung: (1) keluar dari karakter khusus (ada dua), (2) membungkus
s/^/…/;q\1
lapisan tambahan , (3) ulangi.Inilah output untuk
hello
:Dan sedikit naskah yang saya gunakan:
sumber
PowerShell,
172156 byte.The
h3l}'{l0
masukan akan menghasilkan output berikutnyaCobalah online!
Yang pada gilirannya sendiri akan menampilkan
Cobalah online!
Jalankan terakhir akan menghasilkan apa-apa dan kode keluar akan menjadi 0.
Cobalah online!
sumber