Tulis program yang mencetak pesan kesalahan sintaksis dari kompiler atau penerjemah. Pesan kesalahan harus menyesatkan sehingga pengelola kode akan membutuhkan waktu berhari-hari untuk mengetahui bahwa kesalahan itu dipalsukan, itu berarti, Anda harus mengaburkan (dan menyembunyikan niat Anda). Juga, kesalahan harus setepat mungkin, dan harus merujuk ke kode dengan benar.
Untuk bahasa yang dipatuhi, anggap pemelihara kode Anda akan melakukan compile program.p && ./program
pada baris perintah untuk mengkompilasi DAN menjalankan program, itu berarti, ia tidak dapat membedakan jika output berasal dari kompiler atau program itu sendiri. Juga, anggap pengelola kode Anda akan mengaktifkan pesan kesalahan sintaksis.
Untuk referensi, berikut adalah contoh yang saya buat: https://gist.github.com/359604
The DATA
Bagian mengkodekan string pesan kesalahan, dan hash %abcdef
adalah tabel decode. Kesalahan mencetak referensi ke garis miring terbalik, yang membuat pemelihara kode akan mencoba menghitung garis miring terbalik.
Entri akan dinilai berdasarkan:
- Kode memiliki niat yang tampak jelas
/6
- Kode mereproduksi kesalahan dengan benar
/16
(poin Anda dimulai dengan 16, dan dibagi dengan faktor yang sesuai untuk setiap ketidakakuratan)- Kapitalisasi yang benar: 4
- Nomor baris dan nomor kolom yang benar: 4
- Kata yang benar: 2 untuk setiap kata yang salah
- Nomor baris yang dirujuk menyesatkan pengelola kode
/3
Sebagai contoh,
./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
mendapat 8 (16/2) pada kebenaran untuk kehilangan "tak terduga" sebelum "token", tampilan juru bahasa Python normal
./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Jika titik "kode Anda mereproduksi kesalahan dengan benar" di bawah 1, entri Anda didiskualifikasi.
Dalam kasus dasi, saya akan memasang faktor penilaian tambahan.
sumber
Jawaban:
Python
Ini adalah program yang harus mengambil nama file pada baris perintah, mengevaluasi baris pertama di dalamnya, dan mencetak hasilnya. Ini memiliki 2 bug. Bug utama adalah bahwa ia harus digunakan
sys.argv[1]
, bukansys.argv[0]
, sehingga akhirnya mengevaluasi program itu sendiri, bukan isi file yang disebutkan oleh argumen pertama. Bug kedua adalah bahwa argumen untukprint_exc
membuatnya hanya mencetak frame terdalam pada stack, menyembunyikan fakta bahwa kesalahan terjadi di dalameval
. Akibatnya, Anda mendapatkan kesalahan seperti ini:Ini terlihat sangat mirip dengan baris pertama program yang memiliki kesalahan sintaksis. Ini tidak sepenuhnya benar karena file tersebut
<string>
, tidakfake_error.py
, tetapi selain itu tidak dapat dibedakan dari kasus di mana, misalnya, Andaimport
salah mengeja .Kedua kesalahan tersebut agak "curang" karena bisa jadi tidak disengaja.
sumber
raise
di Python 2, tetapi di IDLE, IDE default python, menyebabkan kesalahan pencetakan internal omong kosong tentang antrian.Traceback (most recent call last): ** IDLE Internal Exception: File "2.7/lib/python2.7/idlelib/run.py", line 325, in runcode exec code in self.locals File "2.7/lib/python2.7/idlelib/run.py", line 111, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "2.7/lib/python2.7/Queue.py", line 176, in get raise Empty
Mengingatkan saya pada lelucon praktis.
sumber
BrainF ***
Saya tidak dapat menemukan kompiler tertentu yang saya gunakan sebelumnya, tetapi saya meyakinkan Anda bahwa itu adalah pesan kesalahan yang tepat.
sumber
:)
Jawa
Saya tidak tahu apakah yang Anda maksud sebenarnya adalah melempar pengecualian yang tidak ditangani (seperti dalam contoh itu), atau mensimulasikan pesan kesalahan. Jika itu masalahnya, ini akan berhasil:
C
(ini mengasumsikan bahwa
stdio.h
#included)sumber
Bahasa Game Maker
sumber
ACTIONSCRIPT 3
sumber