Sekarang saatnya memamerkan kemampuan Anda untuk menulis kode yang buruk. Saya mencoba jenis baru teka-teki pemrograman, paling mirip, saya pikir, dengan kontes C curang. Perbedaan utama adalah bahwa ini hampir tidak jahat: itu hanya beberapa kesenangan bersih yang bagus. Tujuan dari teka-teki ini adalah untuk mengemas bug sebanyak mungkin ke dalam suatu program. Pemenang kontes ini adalah yang menulis program dengan bug paling banyak per karakter.
Untuk menghindari utas komentar yang meminta klarifikasi, sekarang saya harus mendefinisikan apa yang saya anggap sebagai bug yang memenuhi syarat.
Pertama, bug bukan kesalahan . Jika itu adalah masalah yang dapat dideteksi oleh penerjemah sebagai kesalahan (mis pembatas yang tidak cocok, sintaks yang terbentuk dengan buruk, mengakses properti dari objek nol, dll.) Atau jika itu mencegah program untuk mengeksekusi atau melanjutkan, itu bukan sebuah bug. Jika tidak, Anda bisa mengetikkan empat karakter dan penerjemah dapat membuat daftar delapan kesalahan sintaks dan Anda dapat mengklaim rasio bug-karakter 2.
Kedua, bug tidak boleh salah dan bug bukan telur paskah . Ini tentu saja merupakan kriteria subyektif, tetapi saya pikir penting untuk jenis kontes ini. Ini berarti Anda tidak dapat memiliki kode kondisional yang secara spesifik mengubah kode dengan cara yang jelas. (Baca: gunakan bahasa lubang turing, karena tidak ada yang akan tahu bedanya).
Ketiga, bug harus masuk akal . Ini subjektif, seperti yang di atas, tetapi bug tersebut harus terlihat seperti ditulis oleh orang yang kurang teliti atau mungkin tidak tahu, atau seseorang yang baru saja membuat kesalahan. Ini termasuk, misalnya, kesalahan satu per satu atau sintaks yang valid dan terlihat benar tetapi menyebabkan perilaku yang tidak diinginkan (misalnya, menggunakan tanda kurung siku alih-alih tanda kurung).
Bug dapat menyebabkan segala jenis perilaku yang tidak diinginkan pada program, termasuk, tetapi tentu saja tidak terbatas pada, output yang tidak diinginkan untuk beberapa kasus luar biasa, memiliki perilaku yang berbeda berdasarkan pada sesuatu yang tampaknya tidak terkait (mis. Tampilan menampilkan berbeda tergantung pada apakah waktu saat ini berakhir dengan jumlah ganjil atau genap detik), memori bocor, kehilangan data, dan sebagainya.
Contoh Masalah:
Buat program yang menampilkan semua karakter ASCII dengan urutan naik dari nilai numeriknya.
Contoh jawaban:
Brainf ***, 5 karakter, 1 bug, rasio bug-char 0,2
+[+.]
Bug: tidak menampilkan karakter ASCII untuk 1. Dapat diperbaiki dengan mengubah ke .+[.+]
.
Ok, saya pikir Anda seharusnya sudah mendapatkannya sekarang, inilah teka-teki Anda:
Decode Cipher Caesar dan Sortir Kata-kata Menurut Abjad
Sebuah cipher caesar dibuat dengan mengambil serangkaian huruf dan pergeseran mereka n huruf lebih dalam alfabet. Jika sampai ke awal atau akhir alfabet, A muncul setelah Z, dan Z muncul sebelum A. Misalnya:
Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19
Anda akan diberikan dua input (Anda bisa mendapatkan input namun yang paling nyaman bagi Anda, masuk akal). Input pertama adalah kata-kata, dan input kedua adalah nilai yang digeser. Tugas Anda adalah untuk mengeluarkan kata-kata yang diterjemahkan, dan kemudian mengeluarkan kata-kata yang sudah diterjemahkan itu setelah diurutkan secara alfabet.
Contoh (jangan tersinggung anak nakal, itu hanya contoh):
Input pertama: gtdx wjbfwiji. ljy Gfi hfssty
Input kedua: 5
Output pertama: anak laki-laki dihargai. menjadi buruk tidak bisa
Keluaran kedua: Anak laki-laki nakal tidak bisa mendapatkan hadiah.
Semoga berhasil!
sumber
Jawaban:
Ruby, 136 karakter, 7 bug, rasio = 0,051
[/\d+/]
: angka negatif telah dihapus tandanya (upaya yang tampak pada validasi input)'\s'
: serangan backlash hanya ditafsirkan dalam string yang dikutip ganda, jadi ini tidak akan menghasilkan spasi melainkan literal\s
split(/ /)
: tidak seperti dataransplit
, ini tidak akan terpecah pada baris baru (jadi kata terakhir akan mempertahankan baris baru)/[^.,:;?!]/
: regex ini mengecualikan tanda baca, tetapi tidak huruf besar, angka atau garis bawah, dan, yang paling penting, baris baru97
: apa pun selain tanda baca atau huruf kecil akan kacausort_by{|a|a[0]}
: ternyata programmer tidak tahusort
, dan malah menggunakan metode konyol ini, yang tidak mengurutkan kata-kata dimulai dengan huruf yang samaprint
: tidak sepertiputs
, tidak mencetak baris baru di antara setiap argumen (jadi senar keluar terpaku bersama)sumber
Saya tidak akan menerima jawaban saya sendiri, tetapi saya pikir saya akan menunjukkan kepada Anda pemecah sortir kereta yang paling rumit. Hal yang hebat tentang itu adalah saya bahkan tidak merencanakan sebagian besar bug.
Brainf ***: 483 karakter, 11 bug
Memasukkan:
Keluaran:
Daftar bug :
Input / Display bug:
Angka nonpositif atau angka yang lebih dari satu digit mematahkan program.
Pengurai tidak membuat Z muncul sebelum A. Itu hanya mengurangi nilai karakter ASCII.
Spaces muncul sebagai karakter ASCII ESC (27).
Jika input tidak diakhiri oleh tab, program tidak akan melanjutkan setelah instruksi input.
Program harus diakhiri secara manual. Ini akan terus menampilkan karakter ESC sampai berhenti.
Program akan rusak jika file input tidak dikodekan ASCII.
Program tidak menampilkan karakter pertama dari output yang diurutkan.
Bug penyortiran:
Saya menerapkan penyortiran dengan sangat naif.
Program rusak ketika jumlah kata tidak sama 5.
Program rusak jika jumlah byte input melebihi 60.
Program hanya dapat mengurutkan dengan benar jika urutan abjad identik dengan contoh input.
Program menambahkan ruang ekstra jika ada kata yang lebih kecil dari input contoh dan menimpa karakter jika ada kata yang lebih panjang.
Saya memiliki rasio bug-char 0,0228 . Memang, Joey mengalahkan saya , tetapi saya bangga dengan fakta bahwa saya hanya menggunakan 8 karakter berbeda dalam program saya, dan bug saya jauh lebih kritis.
sumber
re]arded
? Kedengarannya serius.C - 224 karakter, 2 bug, 7 kasus perilaku tidak terdefinisi
Sunting: Penilaian saya di sini salah. Meluap unsigned integer, pada kenyataannya, yang didefinisikan di C . Selain itu, perbandingan antara ditandatangani dan tidak ditandatangani juga didefinisikan dengan baik, tetapi kompiler memperingatkan karena cara itu didefinisikan mungkin bukan apa yang Anda pikirkan.
Pemakaian:
Kerusakan:
sumber
JavaScript: 403 karakter, 8 bug, rasio = 0,0199
Meskipun tidak seburuk C, JavaScript memang memiliki kekurangan desain yang dapat menyebabkan bug, setidaknya saat digunakan oleh pemula ( demo dengan semua bug yang tidak diperbaiki ).
I + H
adalah rangkaian string, bukan tambahan:undefinedundefinedundefined...
!I
bukan cara yang benar untuk memeriksa nilai pengembalian.indexOf()
, yang mengembalikan -1 untuk ketidakcocokan:boysVrewardedVV...
else
kata kunci:boys Vrewarded.V Vget...
...cannotundefinedundefined...
boys rebwoayrsd erde.w agredte dB.a dg ecta nBnaodt cannot
.Perhatikan juga bahwa ini tidak akan berfungsi pada versi IE yang lebih lama karena menggunakan ekstensi ke ECMAScript 3 yang hanya distandarisasi dalam ES5.
sumber
Python3 184 karakter, 4 bug. Rasio bug 0,0217
degolfed:
Input contoh: gtdx wjbfwiji. ljy Gfi hfssty
Contoh input: -5
Contoh output: G
canxrb
mmnsfdsqdv`qcdc.Bug yang dikenal:
Saya tidak pandai membuat bug dengan sengaja.
sumber