Bos Anda baru-baru ini mengetahui bahasa pemrograman yang menarik ini yang disebut Bahasa Inggris . Dia punya ide "revolusioner" ini, dia ingin kode dengan Anda untuk menggandakan tingkat produksi kode! Karena dia bukan ahli teknologi, dia ingin Anda menulis kompiler untuk itu sehingga dia bisa kode juga!
Sekarang, Anda adalah pemrogram malas yang jahat dan jelas tidak akan menulis program untuk mengkompilasi bahasa yang sangat rumit ini. Sebagai gantinya, Anda akan memastikan selalu ada kesalahan dalam kode bos Anda, sehingga ia tidak pernah sampai ke kompilasi yang sebenarnya dan terjebak memperbaiki kesalahan tata bahasa alih-alih koding.
Tantangannya adalah menulis program yang dapat dijalankan dari terminal, dan menerima path file sebagai argumen. Program harus:
- memodifikasi input file dengan memasukkan kesalahan ketik.
- Berpura-pura gagal kompilasi karena menemui kesalahan ketik yang Anda perkenalkan.
- Menjalankan program pada salinan dari file yang sama tidak boleh memasukkan kesalahan ketik yang sama dua kali berturut-turut.
Untuk mengilustrasikan tantangan, jalankan program Anda pada file ini:
Take an array as input.
Sort the array.
Output the array.
harus menampilkan sesuatu di sepanjang baris
Error on line 1:
'Take an arqay as input.'
^
arqay is not a valid identifier.
dan file yang Anda beri tahu program untuk dikompilasi sekarang akan terlihat seperti:
Take an arqay as input.
Sort the array.
Output the array.
Berikut ini beberapa perincian lebih lanjut tentang spesifikasi program:
Program Anda diizinkan untuk berasumsi bahwa menukar karakter apa pun dalam program yang dimasukkan atasan Anda untuk karakter acak berbeda akan menyebabkan kesalahan tata bahasa. Program Anda seharusnya tidak menggunakan karakter non-abjad untuk membuat kesalahan dalam kode bos Anda. Atasan Anda tidak akan pernah menggunakan angka atau simbol, dan dia akan mengetahui bahwa ada sesuatu yang sedang terjadi. Program Anda seharusnya hanya memperkenalkan kesalahan pada kata-kata dalam program bos Anda. Jangan mengubah spasi dalam kalimat, atau tanda baca. Program Anda seharusnya tidak mengubah kasus program yang bos Anda coba kompilasi, artinya kesalahan seperti arQay
tidak valid. Ini mencegah kesalahan seperti take
bukannya Take
terjadi, atau Array
bukannya array
. Program Anda harus menampilkan kesalahan dengan terlebih dahulu menyatakan baris apa kesalahannya:
Error on line <insert line number here>:
Maka harus mencetak garis dengan kesalahan di dalam '
simbol. Pada baris berikutnya ia harus menempatkan ^
simbol di bawah kata dengan kesalahan, dan akhirnya harus memiliki beberapa teks yang menggambarkan kesalahan (bagian ini terserah Anda, Anda dapat mengatakan apa pun yang Anda inginkan di sana selama itu menggambarkan kesalahan).
Anda dapat mengasumsikan bahwa file input ada dan tidak kosong. Anda juga dapat menganggap file input tidak memiliki kesalahan tata bahasa sebelum Anda menambahkannya.
Bonus:
-60 byte jika kesalahan yang diperkenalkan oleh kode Anda tidak sepenuhnya acak, tetapi berbasis kesalahan ketik seperti dalam pertanyaan ini .
-60 byte untuk setidaknya 5 pesan kesalahan yang berbeda, berganti secara acak.
-60 byte jika program Anda memiliki peluang 1 banding 100 atau kurang untuk menampilkan beberapa pesan demotivasi kepada atasan Anda.
EDIT: Hitungan byte pesan tidak dihitung terhadap skor Anda. (Terima kasih kepada Martin Büttner untuk ide bagus ini)
Ini adalah kode-golf, kemenangan jumlah byte terpendek. Tolong jangan golf isi pesan kesalahan, bos Anda tidak akan senang jika dia tidak dapat memahami pesan kesalahan, dan akan meminta Anda untuk memperbaikinya untuknya.
Jawaban:
TI-BASIC, 77 - 34 (teks kesalahan) = 43
Jika dia ingin melakukannya dengan kalkulator TI-83/84;)
Sebagai standar untuk fungsi, string file harus dalam
Ans
sehingga dapat kembali dan menampilkan output.Perhatikan bahwa banyak token berukuran satu byte.
sumber
inString
,Ans
,sub
,Else
,Then
,End
,Disp
,Str1
... bukankah mereka semua 1 byte untuk kalkulator?Ans
tidak sama dengan byte yang diwakili olehAns
. Salah satunya adalahA*n*s
yang menghasilkan hasil apa pun yang diinginkan kalkulator, yang lain mengembalikan nilai ekspresi aritmatika terakhir. Mempertimbangkan ini, saya pikir bahwa tidak menerima hitungan NYATA menjadikan ini representasi kode yang salah.