Sếp của bạn gần đây đã học được ngôn ngữ lập trình thú vị này được gọi là tiếng Anh . Anh ấy đã có ý tưởng "cách mạng" này, anh ấy muốn viết mã với bạn để tăng gấp đôi tỷ lệ sản xuất mã! Vì anh ấy không phải là người am hiểu về công nghệ, anh ấy muốn bạn viết một trình biên dịch cho nó để anh ấy cũng có thể viết mã!
Bây giờ, bạn là một lập trình viên lười biếng xấu xa và rõ ràng sẽ không viết một chương trình để biên dịch ngôn ngữ phức tạp đến nực cười này. Thay vào đó, bạn sẽ đảm bảo luôn có lỗi trong mã của sếp, để anh ta không bao giờ được biên dịch thực tế và bị mắc kẹt trong việc sửa lỗi ngữ pháp thay vì mã hóa.
Thách thức là viết một chương trình có thể chạy từ thiết bị đầu cuối và chấp nhận đường dẫn tệp làm đối số. Chương trình phải:
- sửa đổi đầu vào tập tin bằng cách giới thiệu một lỗi đánh máy.
- Giả vờ thất bại biên dịch do gặp phải lỗi đánh máy bạn đã giới thiệu.
- Chạy chương trình trên các bản sao của cùng một tệp không nên đưa ra cùng một lỗi đánh máy hai lần liên tiếp.
Để minh họa cho thử thách, hãy chạy chương trình của bạn trên tệp này:
Take an array as input.
Sort the array.
Output the array.
nên xuất ra một cái gì đó dọc theo dòng
Error on line 1:
'Take an arqay as input.'
^
arqay is not a valid identifier.
và tệp mà bạn đã bảo chương trình biên dịch bây giờ sẽ trông như sau:
Take an arqay as input.
Sort the array.
Output the array.
Dưới đây là một số chi tiết về thông số kỹ thuật của chương trình:
Chương trình của bạn được phép giả định rằng việc hoán đổi bất kỳ ký tự nào trong chương trình mà ông chủ của bạn nhập vào một ký tự ngẫu nhiên khác nhau sẽ gây ra lỗi ngữ pháp. Chương trình của bạn không nên sử dụng các ký tự không theo thứ tự chữ cái để tạo ra lỗi trong mã ông chủ của bạn. Sếp của bạn sẽ không bao giờ sử dụng một con số hoặc biểu tượng, và anh ta sẽ phát hiện ra rằng một cái gì đó đang nổi lên. Chương trình của bạn chỉ nên đưa ra lỗi cho các từ trong chương trình của sếp. Không thay đổi khoảng trắng trong câu hoặc dấu câu. Chương trình của bạn không nên thay đổi trường hợp chương trình mà sếp của bạn cố gắng biên dịch, nghĩa là các lỗi như arQaykhông hợp lệ. Điều này ngăn ngừa các lỗi như takethay vì Takexảy ra, hoặc Arraythay vì array. Chương trình của bạn sẽ xuất lỗi bằng cách trước tiên nêu rõ lỗi đó là dòng nào:
Error on line <insert line number here>:
Sau đó nó sẽ in ra dòng có lỗi bên trong 'các ký hiệu. Trên dòng tiếp theo, nó nên đặt một ^biểu tượng dưới từ có lỗi và cuối cùng nó sẽ có một số văn bản mô tả lỗi (phần này tùy thuộc vào bạn, bạn có thể nói bất cứ điều gì bạn muốn ở đó miễn là nó mô tả lỗi).
Bạn có thể giả sử rằng tệp đầu vào tồn tại và nó không trống. Bạn cũng có thể giả sử tệp đầu vào không có lỗi ngữ pháp trước khi bạn thêm.
Tiền thưởng:
-60 byte nếu các lỗi mà mã của bạn giới thiệu không hoàn toàn ngẫu nhiên, nhưng dựa trên lỗi chính tả như trong này câu hỏi .
-60 byte cho ít nhất 5 thông báo lỗi khác nhau, xen kẽ ngẫu nhiên.
-60 byte nếu chương trình của bạn có cơ hội 1 trong 100 hoặc ít hơn để xuất một số thông điệp giải thích cho sếp của bạn.
EDIT: Số byte của các tin nhắn không được tính vào điểm số của bạn. (Cảm ơn Martin Büttner vì ý tưởng hay này)
Đây là mã golf, số byte ngắn nhất sẽ thắng. Vui lòng không đánh golf nội dung thông báo lỗi, sếp của bạn sẽ không vui nếu anh ta không thể hiểu các thông báo lỗi và sẽ yêu cầu bạn sửa chúng cho anh ta.