Tugas Anda adalah menulis program komputer yang tidak kosong yang terdiri dari beberapa urutan byte. Jika kita memilih byte tertentu dalam program dan menghapus semua instance dari program, program yang dimodifikasi harus menampilkan byte yang dihapus.
Misalnya jika program kami
aabacba
Maka bcb
akan menghasilkan a
, aaaca
akan perlu untuk keluaran b
dan aababa
akan keluaran c
.
Tidak masalah apa yang dilakukan oleh program yang tidak dimodifikasi.
Jawaban akan dicetak dalam byte dengan tujuan untuk meminimalkan jumlah byte.
code-golf
source-layout
radiation-hardening
Wisaya Gandum
sumber
sumber
Jawaban:
zsh,
603594566561548440415399378370 byteTergantung pada coreutils +
dc
.Cobalah online!
Itu ... perjalanan.
Jawaban ini memiliki tiga bagian. 4 baris pertama menangani kasus khusus tertentu untuk menyederhanakan kode yang mengikuti. 2 baris berikutnya dan baris terakhir keduanya pada dasarnya menyelesaikan hal yang sama, tetapi tepat satu dijalankan dengan penghapusan karakter tertentu. Mereka ditulis dengan sebagian besar set karakter komplementer, sehingga menghapus setiap karakter hanya memecah satu karakter paling banyak, memungkinkan yang lain untuk terus berfungsi.
Melihat bagian pertama, kami pertama menangani
ec\nho \\n
ca t<<<$'\x20'
(diikuti olehexi t
untuk menghindari menjalankan kode yang lebih baru, yang akan menghasilkan keluaran asing)$
penghapusan dengand$c -e8BC6P
(8BC6
=9226
adalah36*256 + 10
, dan 36 dan 10 adalah nilai byte$
masing-masing dan karakter baris baru; kami menggunakan digit hex dalam desimal untuk menghindari keharusan memasukkannya dalam komentar besar di baris 6)0
penghapusan dengand0c -eKp
(K
mendapatkan presisi desimal, yang secara0
default)Di bagian selanjutnya, satu-satunya karakter yang digunakan (selain dari sampah di akhir baris kedua) adalah
$'\01234567v;
, spasi, dan baris baru. Dari jumlah tersebut, empat telah diperhitungkan, sehingga sisanya ('\1234567v
) tidak dapat terjadi di baris terakhir. Memperluas lolos oktal ($'\123'
mewakili karakter ASCII dengan nilai 123 8 ), kita mendapatkan:Baris pertama loop melalui semua karakter yang digunakan dalam program dan mencari masing-masing dalam kode sumbernya sendiri (
$0
adalah nama file dari skrip yang sedang dijalankan), mencetak karakter apa pun yang tidak ditemukan.Baris kedua terlihat sedikit aneh, dan tampaknya melakukan hal yang sama
exit
dengan sekelompok orang. Namun, pengodeanexit
sebagai oktal langsung menghasilkan$'\145\170\151\164'
, yang tidak mengandung2
atau3
. Kami benar-benar perlu membuat ini kurang tahan terhadap pemindahan. Ini karena jika ada'\014567v
yang dihapus, melanggar baris pertama, baris kedua juga rusak, yang memungkinkan sisa kode untuk dieksekusi. Namun, kita perlu juga memutus jika2
atau3
dihapus sehingga baris 3 dan 4 dapat berjalan. Ini dicapai dengan memilih di:
dan;
, yang masing-masing memiliki 2 dan 3 dalam representasi oktal mereka.Sampah di akhir baris 2 ada di sana untuk memastikan setiap karakter ASCII yang dapat dicetak muncul setidaknya satu kali, karena cara pemeriksaan dilakukan dengan mengulangi masing-masing membutuhkan ini.
Jika
exit
tidak dipanggil di bagian pertama (yaitu rusak oleh penghapusan salah satu'\01234567v
), kita beralih ke yang kedua, di mana kita harus mencapai hal yang sama tanpa menggunakan salah satu karakter ini. Baris terakhir mirip dengan baris pertama yang didekodekan, kecuali bahwa kita dapat mengontrak rentang loop untuk menyimpan beberapa byte, karena kita sudah tahu bahwa semua karakter kecuali'\01234567v
telah tercakup. Ia juga memiliki0# $#
sebelumnya, yang berkomentar dan mencegahnya menghasilkan output yang asing jika0
atau$
telah dihapus.sumber
Retina , 1 byte
Cobalah online!
Ketika semua instance dari byte tunggal (
1
) dihapus, hasilnya adalah1
. Cukup sederhana.sumber
1
untuk program kosong? Apapun, saya pikir jawaban yang dipermasalahkan menggunakan pendekatan dan perilaku yang berbeda. IMO jawaban polyglot hanya dijamin jika pendekatannya tetap sama. (Secara objektif, ini bukan polyglot karena kode yang sebenarnya berbeda, untuk jawaban di bawah ini.) Jangan ragu untuk memilih bagaimana Anda inginkan, tetapi jawaban yang valid adalah jawaban yang valid. Saya akan menyimpan jawaban saya apa adanya, saya tidak ingin menyimpan kumpulan jawaban di atasnya.Bahasa, 216173027061157310 byte
216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2
. Ada216173027061157310 - 144115617572598740
$
s,216173027061157310 - 144115241762960340
#
s dan216173027061157310 - 144115194786755540
spasi.144115617572598740
#
s dan spasi mengkodekan program BF berikut:Cobalah online!
144115241762960340
$
s dan spasi mengkodekan program BF berikut:Cobalah online!
144115194786755540
$
s dan#
s menyandikan program BF berikut:Cobalah online!
Sunting: Disimpan 72057832274401770 bytes berkat @Nitrodon.
sumber
U
dan byte 127? Cobalah online! Atau bahkan hanya byte nul dan soh?U
itu byte ASCII yang bisa dicetak terpendek yang bisa jadi keluaran. Saya tidak ingin menggunakan byte yang tidak diinginkan.Jelly , 1 byte
Sangat berbeda dari jawaban Retina. peluit
Cobalah online!
sumber
Polyglot * , 1 byte ( menunggu konfirmasi )
Cobalah online! (menggunakan Triangularity)
*: Ini berfungsi dalam berbagai bahasa (agak luas) (kecuali untuk esolang seperti 4,> <> dan sejenisnya dan beberapa pengecualian lainnya). Identik dengan jawaban Jelly dalam kode sumber, tetapi metode I / O berbeda - Output melalui kode keluar. Ketika seseorang menghapus
0
dari kode sumber, mereka pergi dengan program kosong, yang sering tidak kesalahan dan menghasilkan kode keluar 0 di sebagian besar bahasa.sumber
sed , 1 byte
Cobalah online!
Sangat berbeda dari jawaban Retina, atau jawaban Jelly.
sumber
Unary (tidak kompetitif), 96 byte
Ini
xxd
dump.Definisi yang lebih luas dari bahasa Unary memungkinkan setiap karakter dalam kode sumbernya. Tetapi saya tidak menemukan kompiler atau juru bahasa yang akan bekerja untuk ini. Jadi saya menandai jawaban ini sebagai tidak kompetitif. Jika Anda dapat menemukan yang diposting sebelum pertanyaan ini diajukan, saya akan menautkannya.
sumber