Tampaknya perubahan sederhana pada file C ++, terutama dengan templat, dapat menghasilkan halaman kesalahan. Kontes ini adalah untuk melihat apa "bang of the buck" terbesar, yaitu keluaran kesalahan yang lebih banyak dengan perubahan terkecil pada kode sumber (penambahan 1 karakter).
Karena bahasa lain lebih waras, ini akan terbatas pada C ++ dan gcc versi 4.x.
Aturan
File sumber asli harus dikompilasi dengan gcc 4.9.2 ke kode objek tanpa kesalahan.
Satu karakter ASCII ditambahkan ke kode sumber untuk membuat kesalahan ketik, meningkatkan ukuran file sebesar 1 byte.
Kompiler dijalankan dengan opsi default. Opsi yang diperlukan suka
-c
dan-std=c++11
diizinkan, opsi suka-Wall
tidak.Metrik adalah
number of bytes of generated error messages ----------------------------------------------------------------------- (bytes of source code with typo) (length of filename passed to compiler)
Jawaban akan divalidasi dengan http://ideone.com/ C ++ 4.9.2.
Contoh:
Nama file adalah a.cpp
, yang panjangnya 5 byte.
int foo();
Kompilasi kerja
gcc -c a.cpp
Kode sumber terkorupsi:
in t foo();
Kompilasi Gagal
$ gcc -c a.cpp
a.cpp:1:1: error: ‘in’ does not name a type
in t foo();
^
$ gcc -c a.cpp |& -c wc
64
$ wc -c a.cpp
12 a.cpp
Nilai: 64/12/5 = 1.0666
Upaya yang lebih baik: Masukkan {
antar parens darifoo()
$ gcc -c a.cpp |& wc -c
497
Skor baru: 497/12/5 = 8.283
Semoga berhasil!
MEMPERBARUI
Saya mendorong orang untuk mengabaikan implementasi rekursif. Itu secara teknis menang tetapi tidak dalam semangat kontes.
PEMBARUAN 2
Seperti yang telah dicatat oleh banyak orang, kontes mungkin akan lebih menarik jika C-prosesor tidak diizinkan. Jadi saya ingin mendorong orang untuk mengirim solusi yang tidak menggunakan perintah pra-prosesor sama sekali. Itu berarti tidak ada penggunaan file header sama sekali, karena #include
tidak diperbolehkan!
Sejauh menggunakan IDEONE untuk memvalidasi, Anda diizinkan untuk menggunakan output IDEONE secara langsung (dan nama sumber sebagai prog.cpp
), atau Anda dapat menjalankan output IDEONE melalui pencarian global dan ganti ( s/prog.cpp/a.cc/
misalnya) dan berpura-pura bahwa Anda dapat atur nama file secara langsung.
PEMBARUAN 3
Seperti yang ditunjukkan orang, Ideone sedikit terlalu ketat, membutuhkan tautan tidak hanya pembuatan file objek. Karena kontes ini murni atas nama kesenangan, harap jujur dan tentukan apa yang Anda gunakan untuk mendapatkan skor Anda. Baik gunakan ideone, atau gunakan build vanilla terbanyak (semua default) dari gcc 4.9.2 yang dapat Anda kerahkan. Kontes ini dimaksudkan untuk meningkatkan kesadaran akan pesan kesalahan C ++.
sumber
Jawaban:
gcc 4.5.2, Nilai: 8579.15 (atau 14367.49 untuk nama file "aC", dapat diperbarui nanti)
File asli, 29 byte, kompilasi bersih (a.cpp):
File yang dimodifikasi, 30 byte:
Kesalahan:
Skor:
1286873 / (30 * 5) = 8579.15
Output kesalahan kepala dan ekor:
Catatan:
- Jika
.C
berakhir pada kualifikasi sebagai ekstensi yang valid maka skornya adalah 1.206.869 / (28 * 3) = 14.367,49.- Jika Dennis menyarankan #include kedua ditambahkan, nama file "a.cpp", skornya adalah 80.797.292.934 / (46 * 5) = 351.292.578,97
sumber
#include"a.cpp"
.#include
. Adapun itu menjadi tak terbatas ... jika masih berjalan ketika saya bangun besok pagi, itu sudah tak terbatas bagi saya. Akan membuat Anda tetap diposting, ha (walaupun, saat ini sedang mengunggah 5.1MB / detik kewc
, jadi jikawc
menggunakan penghitung 32-bit, menurut perhitungan saya, sesuatu yang aneh dapat terjadi dalam waktu sekitar 13 menit.)gcc 4.9.2, skor:
222.898.664663.393.783Ini sangat didasarkan pada jawaban @ JasonC , tetapi dia mengatakan dia tidak ingin mengambil kredit untuk perbaikan ini.
Output kesalahan dari kode di bawah ini adalah 126.044.818.789 byte. Skor harus jauh lebih tinggi dalam teori (dan cenderung tak terhingga ketika jumlah pernyataan sertakan meningkat), tetapi dalam praktiknya menurun dengan menambahkan lebih banyak pernyataan sertakan.
File asli (37 byte)
File yang dimodifikasi (38 byte)
sumber
#include
batas bersarang 200 level, sehingga rekursif Anda secara#include
efektif menjadi penghitung biner 200-bit.gcc, 4.9.2, Nilai: 22.2
File asli: 0 byte (a.cpp)
Kompilasi bersih:
File yang dimodifikasi:
Kesalahan:
Skor
111/1/5 = 22.2
sumber
11.126,95
9.105,442.359,371.645,94266,88poinLebih banyak penyalahgunaan preprosesor! Kali ini, kami membuat menangis perpustakaan standar.
Tanpa salah ketik:
Dengan salah ketik:
Kesalahan:
[MENGGUNTING]
Di mesin Ubuntu saya,
g++-4.9 -std=c++11 -c a.C
menghasilkan 1.101.568 byte kesalahan yang mulia, dengan skor 1101568/33/3 = 11.126,95.sumber
#define
memberi Anda poin terbanyak.typedef
dengant;
. Sekarang Anda tidak hanya memecah setiap penggunaantypedef
tetapi Anda mendapatkan satu ton kesalahan "t not name a type" juga. Atau%;
untuk menghasilkan "id-wajar yang diharapkan sebelum% token".#define typename *
dan#define int class std
sepertinya menghasilkan lebih banyak kesalahan.62,93 poin
Hanya beberapa C ++ meta black magic, dikompilasi dengan
g++-4.8 -c -std=c++11 a.cc
:Tidak Disatukan:
G ++ memiliki batas rekursi 900, sehingga mengubah
B<1>
untukB<-1>
dengan kisaran 31-bit memiliki ... efek yang menarik.\n
beberapa editor teks secara otomatis menambahkan,vim
tidak).a.cc
-ftemplate-backtrace-limit=0
saklar. Itu juga berarti 3185 poin bagi saya!std::unique_ptr
hanyalah kelas templat yang berhasil memancarkan pesan kesalahan terpanjang, ditemukan melalui coba-coba dan pengetahuan tentang STL dan kucing serta barang-barang lainnya.sumber
Skor 7,865
Sebenarnya, 0-byte-Answer TIDAK benar, karena ideone.com akan menolak untuk mengkompilasi file tanpa kesalahan. Hal yang sama berlaku dengan contoh
int foo();
- itu tidak akan dikompilasi di ideone.com (Saya tidak dapat berkomentar karena kehilangan reputasi ...)Jadi program terkecil yang bisa dikompilasi tanpa
#includes
ini adalah:Jika Anda mengubahnya ke kode berikut, itu akan gagal dengan 409 byte kode kesalahan (setelah mengganti nama prog.cpp menjadi a.cc dari output ideone.com):
409 / (13 * 4) = 7,865
Harap perbarui pertanyaan sesuai, karena contoh yang diberikan tidak menghormati aturan yang diberikan ...
sumber
C, dinamai sebagai
.cc
Kode kesalahan:
sumber
main(){}
, tapi saya tidak yakin) Juga, bukankah ini hanya peningkatan dari jawaban di atas? Meskipun Anda pasti dapat menyimpan jawaban ini, jika itu terinspirasi oleh jawaban @ StefanM, Anda harus menyebutkannya. Akhirnya, sekarang Anda memiliki 50 rep, Anda dapat berkomentar di mana saja.Skor 12.xx (kesalahan dengan MENGHAPUS karakter)
Maafkan melanggar Peraturan 2 (IMHO menambahkan ATAU menghapus satu karakter akan menjadi semangat aturan), tapi ini terjadi pada saya secara tidak sengaja (sehingga tidak menggunakan trik kasar 'sengaja') saat menulis Real Code (TM) - baik kode yang berfungsi dan yang menyebabkan kesalahan (atau terlihat) sederhana dan mudah, jadi saya pikir cukup rapi untuk dimasukkan di sini. Kode asli
Kode menghasilkan kesalahan (terakhir '<' dihapus sehingga sepertinya kurang dari perbandingan, tapi noooooooooooo ...)
Ini 'hanya' 8241 byte pesan kesalahan kompiler di ideone.com g ++ 4.3.2.
sumber