Skenario
Salah satu teman Anda sedang berjuang dalam tugas pekerjaan rumah. Dia membutuhkan program sederhana yang mencetak 404 angka pertama:
1 2 3 4 5 6 7 8 9 10 11 ... 401 402 403 404
Tantangan Anda sederhana: tuliskan program ini untuknya.
Namun, koneksi Anda buruk, jadi 1 karakter acak hilang setiap kali Anda mengirim program. Untuk mencegah hal ini merusak program Anda, Anda harus membuatnya sehingga menghapus satu karakter tidak akan berpengaruh: program bekerja, apa pun itu. (Program aslinya juga harus bekerja.)
Karena koneksi terlalu buruk untuk mengirim file besar, kode Anda harus sesingkat mungkin.
TL: DR - buat program pengerasan radiasi untuk menampilkan angka 1 hingga 404
Aturan / Detail
- Outputnya dapat berupa daftar bilangan bulat dalam format apa pun yang wajar (dipisahkan oleh spasi, baris baru, koma, dll). Namun, output Anda harus konsisten dan tidak berubah ketika program diubah.
- Bendera baris perintah yang berisi logika, mengeksekusi kode aktual, menghasilkan daftar nomor, dan sebagainya, dilarang.
- Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) menang!
Jawaban:
05AB1E , 12 byte
Kode:
Penjelasan kode normal:
Ini mengarah pada kode golf berikut:,
X404Ÿ
yang ingin kami capai.Angka 404 dihasilkan oleh salah satu varian ini:
Rentang inklusif berfungsi sebagai berikut pada dua angka:
Yang selalu membuat kedua
Ÿ
sebuah no-op .Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
JavaScript, 228 byte
Penjelasan
Mengevaluasi kode dalam
setInterval
memungkinkan program untuk melanjutkan bahkan jika ada kesalahan. Kami memastikan bahwa kode yang dikirimkan akan kesalahan jika ada karakter tunggal yang dihapus. Sintaks string template dapat disalahgunakan untuk memanggilsetInterval
dengan string konstan tanpa tanda kurung. Untungnya, bahkan jika string template ada di baris berikutnya, ia tetap diurai sebagai pemanggilan fungsi dengan sintaksis seperti itu.Masalah pertama yang kita hadapi adalah bahwa itu
setInterval
adalah fungsi, dan dengan demikian jika sebuah karakter dihapus dan program mencoba untuk memanggilsetInteval
, itu kesalahan keluar. Tentu saja, karena ada dua doa indentiksetInterval
, kita tidak perlu khawatir itu benar-benar berfungsi dengan benar selama kita menghindari kesalahan. Jadi, baris pertama mendefinisikan setiap kemungkinan "kesalahan ejaan"setTimeout
untuk fungsi yang valid.Baris pertama berfungsi dengan menugaskan semua "kesalahan ejaan" ini ke fungsi
top=>4
. Perhatikan sintaks ES6, ini hanya mengambil paramater bernama "top" dan mengembalikan 4. Mengapa "top"? Nah, baris pertama tidak boleh melempar kesalahan bahkan jika karakter dihapus. Jika suatu=
dihapus untuk membuattop>4
, ekspresi boolean ini akan valid karenatop
sudah ditentukan sebelumnya di browser, cukup menghasilkanfalse
. Jika 4 dihapus, tubuh fungsi hanya menjadisetInterval
segmen pertama , dan yang kedua berjalan tanpa cedera.Sekarang, yang perlu dikhawatirkan adalah jika `dihapus.
Jika dihapus dari awal,
setInterval
tidak melakukan apa-apa, mengevaluasi dirinya sendiri sebagai ekspresinya sendiri. Kemudian, sisa dari baris kedua hanya menjalankan satu iterasi dari loop, membiarkansetInterval
fragmen lainnya menyelesaikan pekerjaan. Jika dihapus dari akhir, backtick yang tersisa diambil dari akhir komentar.Baris baru ditempatkan sehingga penghapusan satu tidak akan mempengaruhi perilaku program, tetapi mereka mencegah kesalahan dalam hal beberapa penghapusan karakter seperti backtick terkemuka.
sumber
405
dihapus, tetapi kemudian saya menyadari: tidak ada, karena semua nomor 404 sudah dicetak, atau loop kedua akan mencetak yang hilang. Karya spektakuler.this
?Pyth - 16 byte
Ide dasar di balik ini adalah bahwa ketika Anda melepas satu digit
404
, itu hanya membuat angka lebih kecil, jadi kami hanya harus mendapatkan maksimum dua404
untuk memastikan kami memiliki nomor yang tepat. Jelas, ada banyak lagi redudansi.Penjelasan:
Cobalah online di sini .
sumber
Befunge-98 , 37 byte
Cobalah online!
Penjelasan
Membuat kode yang dikeraskan dengan radiasi di Befunge-98 tidak terlalu buruk, karena Anda dapat mengatur "delta" (yaitu ukuran langkah dari penunjuk instruksi) secara manual
x
. Jadi jika mengatur delta ke(2,0)
, sejak saat itu setiap karakter lain dilewati dan kita bisa menggandakan semua perintah. Yang sulit adalah mendapatkan2 0
di atas tumpukan dengan cara yang dapat diandalkan. Kita akan benar-benar membutuhkan0 2 0
sisa program untuk bekerja dengan benar, tetapi kita akan melakukannya secara gratis. Inilah cara kami melakukan ini:Perhatikan bahwa setiap digit mendorong dirinya sendiri, sehingga dalam program lengkap, akan ada awal
2 0
yang hanya akan kita abaikan.Akibatnya, menjatuhkan karakter pertama atau kedua dari program tidak relevan karena kita toh tidak akan menggunakan angka itu. Demikian juga, menghapus karakter ketiga identik dengan menghapus yang kedua, jadi kita tidak perlu khawatir tentang itu juga.
Mari kita perhatikan apa yang terjadi dalam dua kasus lainnya. Menjatuhkan karakter keempat:
Perhatikan bahwa delta diatur ke
(0,0)
. Tapi ini sama sekali tidak menggerakkan pointer instruksi, jadi hal yang samax
dieksekusi lagi dengan segera dan kali ini muncul(2,0)
dan semuanya baik-baik saja (ada nol implisit di bagian bawah tumpukan untuk keperluan kita nanti).Sebagai gantinya, lepaskan karakter kelima:
Sekarang delta diatur ke
(0,2)
. Namun, masih tidak ada gerakan horizontal, sehingga IP membungkus segera kembali kex
dan lagi, delta yang benar akan diatur.Dari titik ini dan seterusnya kita pada dasarnya dapat mengabaikan duplikasi karakter serta bagian awal ini karena akan selalu dilewati:
Ini
;
adalah semacam perintah komentar yang melewatkan semuanya sampai yang berikutnya;
ditemui. Namun, kami melompati yang pertama;
dengan#
hanya bagian di antara yang;
akan dieksekusi sejak saat itu.sumber
> <> ,
1036051 byteDiuji di sini.
Gunakan taktik yang sama dengan program ini . Jika sebuah karakter dihapus di baris pertama, baris ke-2 masih akan dijalankan. Jika karakter di baris ke-2 dihapus, maka
v
eksekusi akan dipindahkan ke baris ke-3, karena baris ke-2 adalah karakter yang lebih pendek. Penghapusan di baris ke-3 tidak berpengaruh pada kontrol program, karena hanya eksekusi setelah penghapusan di baris 2.Program ini juga akan berfungsi jika jeda baris dihapus:
Kasus 1:
Baris ke-2 akan dijalankan.
Kasus 2:
Kedua baris menjadi satu baris dengan dua kali instruksi.
Penjelasan:
Inti dari program ini adalah sebagai berikut. Perhatikan bahwa a
1
didorong pada tumpukan yang sudah oleh baris pertama.sumber
o" e"
?+1
Anda bisa menggunakannyal
. Juga juru bahasa fishlanguage.com agak aneh (dan menjengkelkan untuk digunakan, meskipun fitur debugging tentu saja berguna). TIO menggunakan penerjemah Python yang agak lebih waras, saya pikir: tio.run/nexus/fish#@m9oqIAMysq4AMuxtrfVMslXUkhVssqzsrHBEPj/HwA1
s di baris pertama.> <> ,
42 3834 byteCobalah secara Online!
Terima kasih kepada @Martin Ender dan @Teal Pelican untuk mencukur 8 byte!
Mirip dengan jawaban mbomb007 , tetapi hanya menggunakan 2 baris.
Alih-alih menghitung dari 1 hingga 404 menggunakan nilai memori tunggal, saya terus mendorong panjang tumpukan. Ini membuatnya sehingga saya tidak perlu meletakkan apa pun di tumpukan sebelum loop dimulai, membuat segalanya jauh lebih mudah.
Kode asli
The
<
giliran IP sekitar, dan/
adalah tidak-op, sebagai IP membungkus dan terus sepanjang jalan itu normal. Dengan demikian, kode yang relevan adalah:Dan ini berulang.
Penghapusan
Kunci besar di sini adalah cermin
/
. Itu tidak melakukan apa-apa jika baris kedua diubah - hanya membungkus kembali ke dirinya sendiri dan pada dasarnya adalah no-op. Tetapi jika karakter dari baris pertama dihapus, garis akan bergeser ke bawah, sehingga cermin menyentuh panah<
, mengarah ke loop identik dan tidak dimodifikasi.Satu-satunya penghapusan signifikan lainnya adalah
\n
karakter. Ini juga diperhitungkan, karena menghasilkan kode ini:Sekarang, kita baru saja menambahkan salinan dari loop asli
;?=*4o" e"lnll
ke dirinya sendiri. Karena ini adalah perulangan, tidak ada bedanya dengan eksekusi, dan berjalan seolah-olah tidak ada yang berubah.sumber
:+1
dan yang lain:
dengan satul
masing-masing.;?=*4o" e"n:ll
bekerja juga.Pohon Pir , 34 byte
Program ini berisi karakter kontrol, jadi inilah
xxd
dump:Pear Tree pada dasarnya adalah turunan Perl, dengan beberapa fitur "menarik". Saya melemparkannya bersama sebagai lelucon (sehingga saya bisa mengatakan bahwa polyglot saya dicetak
a partridge
di A Pear Tree; pada kenyataannya, hampir semua program melakukannya). Namun, Turing-lengkap, dan benar-benar bagus dalam tantangan semacam ini.Fitur yang paling kami pedulikan di sini adalah A Pear Tree hanya akan menjalankan program jika beberapa substring dari kode memiliki CRC-32
00000000
. Kode diputar untuk menempatkan substring tersebut di awal. Seperti yang terjadi, dua bagian (identik) dari kode masing-masing memiliki CRC-32 dalam pertanyaan (karena komentar biner yang mencurigakan di akhir), jadi jika Anda menghapus karakter dari sumber (melanggar CRC), separuh lainnya diputar ke awal dan#
tanda di dekat akhir akan mengomentari setengah yang rusak, di samping sampah biner.Fitur lain membuat program sedikit lebih kecil: meskipun A Pear Tree sebagian besar diartikan sebagai Perl, ia memiliki beberapa perubahan kecil untuk membuatnya bekerja lebih seperti Python. Salah satu yang relevan di sini adalah bahwa tidak seperti
print
pernyataan Perl (yang hanya menyatukan angka-angka),print
pernyataan A Pear Tree memisahkan argumen dengan spasi dan mencetak baris baru akhir. Itu memberi kita hasil yang dipisahkan dengan baik, artinya kita tidak perlu membuang byte pada pemformatan. (Perhatikan bahwa Anda harus memberi program tidak ada input; jika bahasa menerima input, ia menganggap secara default bahwa ia seharusnya melakukan sesuatu dengannya.)Tentu saja, ini tidak dapat bersaing dengan bahasa golf yang sebenarnya (saya juga tidak mengharapkannya), tetapi saya pikir orang mungkin menganggapnya menarik.
sumber
Melewati 98 , 34 byte
Cobalah secara Online!
Ini bekerja sangat mirip dengan jawaban >>> saya , tetapi alih-alih mirror
/
, saya menggunakan operasi belok kiri[
dan kemudian membalikkan arah IP, yang secara fungsional setara dengan mirror dalam kasus ini.Kode asli
Penghapusan
Jika sesuatu di baris kedua dihapus, itu akan bergeser, dan tidak mempengaruhi bagian atas sama sekali.
Jika ada sesuatu di baris pertama dihapus,
[
akan mengirim IP ke<
, yang memulai loop identik (dengan pengecualian2j^^
yang menghindari^
s digunakan bersama-sama dengan[
)Karena ada 2 baris baru, tidak ada bedanya dengan kode jika ada yang dihapus (terima kasih kepada @ masterX244 untuk ini!)
sumber
Befunge-93,
5451 byteTerima kasih kepada Mistah Figgins karena telah menyelamatkan saya 3 byte.
Cobalah online!
Ini pada dasarnya trik yang sama seperti yang digunakan dalam tantangan Hello World Fault-Tolerant . Baris pertama dimulai dengan memastikan ada 1 di atas tumpukan untuk memulai urutan, dan kemudian salah satu
v
panah di ujung baris mengarahkan jalur kode ke awal rutinitas utama pada baris 2 , mengeksekusi dari kanan ke kiri.Menghapus karakter dari baris pertama hanya akan menggeser
v
panah melintas satu per satu, tetapi itu masih memungkinkan kode untuk mengarahkan ulang ke baris kedua dengan sukses. Menghapus karakter dari baris kedua menyebabkan<
panah di ujung garis bergeser keluar dari jalurv
di atasnya, sehingga jalur kode akan diarahkan ke rutinitas cadangan di baris 3.Menghapus jeda baris pertama tidak ada salahnya, karena itu hanya memindahkan baris ketiga ke tempatnya untuk menggantikan baris kedua. Dan menghapus apa pun setelah akhir baris kedua tidak akan berpengaruh, karena itu hanya kode cadangan.
sumber
The first line starts by making sure there is a 1 on the top of the stack...
Baris pertama cukup yakin tentang hal itu. Anda juga dapat mempersingkat <code> _ @ #!</code> to
_ @ # - `dan letakkan sebelum pencetakan untuk menghemat 3 byte.JavaScript + HTML + Stack Snippets,
167158154 byteMenyalahgunakan fakta bahwa JavaScript dalam Stack Snippets ditempatkan di halaman web di dalam
<script>
elemen.sumber
Sebenarnya , 18 byte
Sebenarnya adalah bahasa golf berbasis stack.
Penjelasan dari perintah yang terlibat (saat mereka bekerja dalam konteks di atas):
sumber