Menyusun bahasa Inggris untuk Bosmu

16

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:

  1. memodifikasi input file dengan memasukkan kesalahan ketik.
  2. Berpura-pura gagal kompilasi karena menemui kesalahan ketik yang Anda perkenalkan.
  3. 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 arQaytidak valid. Ini mencegah kesalahan seperti takebukannya Taketerjadi, atau Arraybukannya 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.

rodolphito
sumber
Apakah saya harus berurusan dengan garis yang tidak mengandung huruf?
Suriah
Anda hanya dapat membuat kesalahan ketik dalam karakter alfabet, dan Anda dapat menganggap file input adalah file non-kosong yang valid yang ada.
rodolphito
7
Saya bukan penggemar meninggalkan pesan kesalahan kepada kami. Bahkan jika kita "tidak mengirim pesan kesalahan" mereka masih bisa membuat perbedaan dari beberapa byte, bahkan mungkin dua lusin jika kita pergi untuk bonus kedua. Itu bisa sangat banyak. Saya pikir untuk kontes golf yang adil Anda harus menentukan 5 pesan kesalahan dan pesan demotivasi, atau biarkan kami mengurangi panjang string mereka dari jumlah byte.
Martin Ender
Terima kasih atas tipnya, saya telah berpikir tentang memiliki pesan yang telah ditentukan, tetapi saya ingin memberikan sedikit lebih banyak kebebasan dengan itu. Mengurangi jumlah byte pesan dari skor adalah ide yang bagus.
rodolphito

Jawaban:

3

TI-BASIC, 77 - 34 (teks kesalahan) = 43

Jika dia ingin melakukannya dengan kalkulator TI-83/84;)

Sebagai standar untuk fungsi, string file harus dalam Anssehingga dapat kembali dan menampilkan output.

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

Perhatikan bahwa banyak token berukuran satu byte.

Timtech
sumber
Di mana saya bisa menjalankan kode ini?
rodolphito
Kalkulator TI-83/84 atau emulator untuknya.
Timtech
inString, Ans, sub, Else, Then, End, Disp , Str1... bukankah mereka semua 1 byte untuk kalkulator?
Ismael Miguel
4
APA????????????????? Itu seperti mengatakan bahwa 8 bit bukan 1 byte !!!!!!!!! Jika saya menyajikan kode dalam perakitan, menggunakan bentuk biner, apakah mereka juga akan menghitung byte sebagai 1 makro 5+ byte? Itu benar-benar bodoh! (maaf kata-kata yang kuat, tetapi BENAR-BENAR BODOH!) Ini tidak mewakili kode Anda. Maksud saya Anstidak sama dengan byte yang diwakili oleh Ans. Salah satunya adalah A*n*syang 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.
Ismael Miguel
5
Tampaknya tidak memodifikasi file secara acak, sepertinya selalu menampilkan perubahan pada baris 1, dan mengubah huruf pertama menjadi B jika A, atau A jika tidak.
rodolphito