Program yang dikeraskan dengan radiasi adalah program di mana, jika ada karakter kode yang dihapus, program akan tetap berfungsi sama. Untuk pertanyaan ini, kami akan menulis sebuah program yang mendeteksi ketika diiradiasi.
Tulis sebuah program atau fungsi yang, ketika setiap byte tunggal dihapus, program yang dihasilkan akan menampilkan byte itu dan hanya byte itu. ( Anda dapat menampilkan byte itu beberapa kali, selama Anda tidak menampilkan byte lainnya )
Aturan:
- Program harus mengandung setidaknya 2 byte yang berbeda. (Tidak ada solusi hanya 0s;)
- Tidak masalah apa yang dilakukan oleh program aslinya
- Tidak membaca kode sumber Anda sendiri.
- Kode akan dinilai pada jumlah byte yang berbeda, di mana jumlah tertinggi menang. Misalnya,
abc
= 3 poin,ababba
= 2 poin,abc
menang.- Tie-breaker adalah jumlah byte yang lebih kecil, diikuti oleh waktu pengiriman sebelumnya
Semoga berhasil!
code-challenge
radiation-hardening
Jo King
sumber
sumber
Jawaban:
05AB1E ,
97 byte (Skor 3)Cobalah online!
Menghapus a
'
Dengan apapun yang
'
dihapus,22''rr
akan menghasilkan 22 menjadi hal pertama di tumpukan dan'
menjadi hal terakhir di tumpukan, yang bila dibalik dua kali menghasilkan'
.Menghapus sebuah
r
Dengan apapun yang
r
dihapus,22'''r
hasilnya 22 menjadi hal pertama di stack,'
menjadi hal kedua di stack, danr
menjadi hal terakhir di stack. Inir
, bagaimanapun, didahului oleh'
yang membuatnya menjadi string literal"r"
(sebagai lawan dari perintahreverse stack
), yang dicetak secara implisit.Menghapus a
2
Dengan apapun yang
2
dihapus,2'''rr
akan menghasilkan2
benda pertama di tumpukan,'
menjadi benda kedua di tumpukan, dan akhirnyar
menjadi yang terakhir di tumpukan, yang bila dibalik akan menghasilkan2
.Karenanya, jawaban ini valid. Dengan tidak ada yang dihapus itu menghasilkan
'
, yang tidak relevan. Ini berfungsi untuk nomor selain dari 2 juga.Dibuat pemeriksa validitas, Anda dapat menggunakannya untuk bersaing di 05AB1E *.
* Saya tidak 100% yakin berapa banyak solusi yang mungkin ada di 05AB1E ...
Lebih banyak solusi valid yang lebih buruk atau sama
'
atas 2 akan berfungsi ...'''''''VV
,'''''''XX
atau'''''''<any command that pops a without pushing>x2
'
atas 3 diikuti oleh # genap dis
atas 1 (EG'''''''''ssss
).'''..
dengan jumlah periode di atas 1 dan jumlah ganjil di'
atas 2.'\\'''rr
- ide yang sama dengan22'''rr
tetapi\
adalah 'hapus item tumpukan terakhir'.sumber
'
tidak relevan dengan aturan, seperti yang Anda katakan. Tapi itu tidak membatalkan tujuan nominal mendeteksi anomali, yang agak lucu.Brainfuck, Skor 3
Mungkin tidak bersaing karena output hanya dilihat melalui dump memori.
Asumsikan input kosong dan EOF membiarkan sel tidak berubah. Menggunakan penerjemah yang membuang memori ke output, seperti ini .
Hapus nilai tambah, dan memori adalah nilai unicode untuk "+", kalau tidak itu adalah nilai unicode untuk ",". Ini lebih merupakan aturan bender daripada jawaban sekalipun. Hampir sama dengan "-". Menyalahgunakan fakta bahwa ketiga karakter ini saling berhadapan dalam unicode-karakteret.
sumber
Pohon Pir, 256 byte berbeda, 975 byte
Sayangnya, pertanyaannya cukup banyak membutuhkan solusi optimal untuk mengandung NUL byte di suatu tempat (karena perlu memuat semua 256 byte di suatu tempat). Ini berarti bahwa a) saya tidak dapat memberi Anda tautan TIO (karena TIO tidak menyukai NUL dalam program, atau setidaknya, saya belum menemukan cara untuk mengetiknya yang dapat diatasi oleh browser saya), dan b) I tidak dapat menempelkan program ke Stack Exchange secara harfiah. Sebagai gantinya, saya telah menempatkan
xxd
hexdump reversibel yang tersembunyi di balik tautan "snipet kode" di bawahnya.Tampilkan cuplikan kode
Penjelasan
Program ini terdiri dari tiga bagian yang identik. (Menggabungkan beberapa bagian yang identik dari suatu program adalah sesuatu yang menjadi tema bagi saya dalam program - program pengerasan radiasi .) Setiap A Pear Tree membutuhkan sebuah checksum di suatu tempat untuk membuat penerjemah tahu bagian mana dari program yang akan dijalankan; itu memutar setiap bagian dari program yang berhasil checksum untuk memulai sebelum menjalankannya (atau mencetak
a partridge
jika tidak ada checksum cocok). Dalam hal ini, kami memiliki checksum pada masing-masing dari tiga bagian, dan dengan demikian bagian non-iradiasi akan pindah ke awal. Jadi kita dapat mengasumsikan bahwa program terdiri dari bagian yang tidak dimodifikasi, diikuti oleh dua bagian lain (salah satunya mungkin telah dimodifikasi).Setiap bagian dimulai dengan baris baru, kemudian dilanjutkan dengan kode berikut (Saya telah menambahkan spasi dan komentar di bawah):
Setelah itu muncul salinan setiap oktet yang belum digunakan dalam program sejauh ini (murni untuk menjalankan skor naik), dan akhirnya checksum. (Tidak ada baris baru, bagian mulai dengan baris baru tetapi tidak berakhir dengan baris baru.)
Ada tiga kasus berbeda di sini:
%z
jumlah ganjil kali, akhirnya berakhir di tabel hash. Bahkan, itu akan menjadi satu - satunya kunci dalam tabel hash (karena string berjalan dari setelah baris baru dari bagian kedua hingga akhir bagian ketiga, dan tabel hash dimulai dengan hanya satu baris baru), jadi itu hanya akan dicetak sendiri.<DATA>
berisi setiap karakter beberapa kali, sehingga tabel hash akan memiliki konten aslinya, satu baris baru, dan itu akan dicetak.<DATA>
hanya mulai membaca dari baris di bawah ini__DATA__
, jadi itu hanya akan melihat bagian ketiga. Ini memiliki lebih dari lima karakter yang muncul beberapa kali ganjil, jadi itu akan memicu kasing khusus untuk mencetak baris baru.Verifikasi
Satu hal terakhir yang harus diperiksa untuk setiap program Pear Tree yang dikeraskan dengan radiasi adalah apakah penghapusan terjadi secara acak menyebabkan bagian yang tidak diinginkan dari kode untuk checksum dengan benar dan memutar kode ke tempat yang salah; mengingat bahwa kami menggunakan checksum 32-bit, ini tidak mungkin tetapi bukan tidak mungkin. Saya menggunakan skrip brute-force berikut untuk memastikan bahwa ini tidak terjadi untuk penghapusan apa pun:
Skrip verifikasi mengkonfirmasi bahwa program ini berfungsi dengan benar.
sumber
Stax , 11 byte (Nilai 4)
Jalankan dan debug online!
Merupakan kehormatan bagi saya untuk memiliki jawaban pertama (secara kronologis) untuk tantangan ini dengan skor lebih tinggi dari atau sama dengan 4. Mungkin skornya bisa lebih tinggi lagi.
Dalam Stax, string literal yang terdiri dari satu karakter ditulis dengan
'
, demikian'', 'c, 'd, '~
juga semua string literal. Perintah yang sesuai untukc
d
dan~
berarti menduplikasi bagian atas tumpukan utama, pop bagian atas tumpukan utama, dan pop bagian atas tumpukan utama dan tekan masing-masing ke tumpukan input. Untuk tantangan ini, tumpukan input tidak mempengaruhi output dan tidak penting, maka kita dapat mengatakand
dan~
identik.Penjelasan
Cara terbaik untuk membagi kode menjadi beberapa bagian dan mempertimbangkannya secara terpisah.
Ketika tidak dirusak,
'''cc
mendorong literal'
dan literalc
ke tumpukan utama, dan menduplikasi bagian atas, sehingga tumpukan akan menjadi (dari bawah)c,c,'
.Ketika tidak dirusak,
'~~
mendorong literal~
dan kemudian muncul (dan dorong ke tumpukan input), yang pada dasarnya adalah no-op untuk tumpukan utama.Ketika tidak dirusak,
'dd
dorong literald
dan kemudian muncul, no-op lain untuk tumpukan utama.Pada akhir program, karena tidak ada output eksplisit yang dilakukan, bagian atas tumpukan utama akan dicetak secara implisit.
Jika program berjalan apa adanya, tumpukan final masih
c,c,'
dan akan ditampilkanc
.Jika bagian pertama menjadi
''cc
, maka kita memiliki literal'
, dan dua instruksi penyalinan, tumpukan terakhir akan menjadi',','
. Mengingat bahwa dua bagian lainnya adalah no-op, hasilnya adalah'
.Jika bagian pertama menjadi
'''c
, hasilnya pada dasarnya sama dengan yang tidak teramplas, tetapic
tidak digandakan. Jadi tumpukan akan menjadic,'
. Setelah dua no-op, bagian atas tumpukan adalahc
.Jadi kita dapat mendeteksi radiasi pada bagian pertama.
Bagian kedua dan bagian ketiga bekerja dengan cara yang persis sama. Saya akan mengambil bagian ketiga sebagai contoh.
Jika bagian ketiga dirusak, maka dua bagian pertama disimpan apa adanya dan tumpukan sebelum menjalankan bagian ketiga
c,c,'
Jika bagian ketiga menjadi
'd
, literald
didorong ke atas tumpukan utama dan tidak ada lagi yang dilakukan. Bagian atas tumpukan utama sekarangd
akan menjadi output.Jika bagian ketiga menjadi
dd
, dua elemen muncul dari tumpukan utama dan sekarang bagian atas tumpukan adalah'
dan keluaran.Karenanya kita dapat mendeteksi radiasi di bagian ketiga. Untuk alasan yang sama kita dapat mendeteksi radiasi di bagian kedua.
sumber
05AB1E , skor 2, 6 byte
Mencetak dua kali lipat karakter yang dihapus kadang-kadang. Tidak mengandung
'
.Bagaimana itu bekerja:
Menghapus yang pertama
„
Cobalah online!
Pertama, kami mendorong string kosong literal ke stack. Lalu kami dorong
„„
, yang dicetak secara implisit.Menghapus a
"
Cobalah online!
Pertama, kita dorong
""
ke tumpukan dengan2-char string
instruksi. Kemudian kami mencoba untuk mendapatkan string 2-karakter lain, tetapi ini dibatalkan (saya tidak yakin mengapa) dan""
dicetak.Menghapus yang kedua atau ketiga
„
Cobalah online!
Pertama, kita dorong
""
ke tumpukan dengan2-char string
instruksi. Lalu kami dorong„
, yang dicetak secara implisit.sumber
Jelly , 5 byte, skor 2
Cobalah online!
Dengan yang
”
dihapus:Cobalah online!
Karakter
”
dimulai dengan karakter satu byte literal. Program ini dimulai dengan””
yang menghasilkan string”
. Pasanganḷ
itu mengambil argumen kiri. String”
baru saja melewati dua contoh dariḷ
.Dengan yang
ḷ
dihapus:Cobalah online!
Dalam program ini
””
menghasilkan karakter”
lalu”ḷ
menghasilkan karakterḷ
dan hanya ini adalah output.Solusi lain
a
atauo
akan berhasil menggantikanḷ
kiriman ini.⁾⁾⁾⁾FFF
. Ini bekerja dengan cara yang serupa.⁾
seperti”
tetapi mulai string dua byte literal. Program "iradiasi" mengeluarkan byte yang dihapus dua kali yang dinyatakan valid dalam komentar.Ini adalah versi Jelly (jauh lebih mewah) dari pemeriksa validitas Magic Octopus Urn. Kolom kiri output adalah karakter yang dihapus dan kolom kanan adalah output dari program yang dihasilkan.
sumber