Нещодавно ваш начальник дізнався про цю цікаву мову програмування під назвою англійська . У нього була ця "революційна" ідея, він хоче кодувати з вами, щоб подвоїти показники виробництва коду! Оскільки він не є кмітливим в техніці, він хоче, щоб ви написали компілятор для цього, щоб він також міг кодувати!
Тепер ви злий ледачий програміст і, очевидно, не будете писати програми для складання цієї смішно складної мови. Натомість ви збираєтесь переконатися, що в коді вашого начальника завжди є помилка, щоб він ніколи не потрапляв до фактичної компіляції і застряг виправити граматичні помилки замість кодування.
Завдання полягає в написанні програми, яку можна запустити з терміналу, і приймає шлях до файлу як аргумент. Програма повинна:
- змінити введення файлу шляхом введення помилки.
- Притворіться, що компіляція не вдалася через те, що ви зіткнулися з друком, який ви ввели.
- Запуск програми на копіях одного і того ж файлу не повинен вводити одне і те ж друкарство двічі поспіль.
Щоб проілюструвати виклик, запустіть програму на цьому файлі:
Take an array as input.
Sort the array.
Output the array.
має вивести щось за рядками
Error on line 1:
'Take an arqay as input.'
^
arqay is not a valid identifier.
і файл, який ви сказали програмі скласти, тепер повинен виглядати так:
Take an arqay as input.
Sort the array.
Output the array.
Ось ще кілька деталей щодо специфікацій програми:
Вашій програмі дозволяється припускати, що заміна будь-якого символу в програмі, який ваш начальник вводить на інший випадковий символ, призведе до граматичної помилки. Ваша програма не повинна використовувати не алфавітні символи для створення помилок у вашому босі. Ваш начальник ніколи не вживав би цифру чи символ, і він дізнався, що щось стоїть на нозі. Ваша програма повинна вводити лише помилки в словах у програмі вашого начальника. Не змінюйте пробілів у реченнях або розділових знаків. Ваша програма не повинна змінювати випадки програми, яку ваш начальник намагається скласти, тобто помилки на зразок arQayнедійсні. Це запобігає помилкам, наприклад, takeзамість того, щоб Takeстатися, або Arrayзамість цього array. Ваша програма повинна вивести помилку, попередньо вказавши, в якому рядку знаходиться помилка:
Error on line <insert line number here>:
Потім слід роздрукувати рядок із помилкою всередині 'символів. У наступному рядку він повинен розмістити ^символ під словом з помилкою, і, нарешті, він повинен мати текст, що описує помилку (ця частина залежить від вас, ви можете сказати все, що завгодно, поки воно описує помилку).
Можна припустити, що вхідний файл існує і він не порожній. Ви також можете припустити, що вхідний файл не має граматичних помилок перед тим, як додати його.
Бонуси:
-60 байт, якщо помилки, введені вашим кодом, не є абсолютно випадковими, але на основі друку, як у цьому питанні.
-60 байт для щонайменше 5 різних повідомлень про помилки, випадково чергуючись.
-60 байт, якщо ваша програма має шанс 1 на 100 або менше, щоб видати якесь демотиваційне повідомлення вашому начальнику.
EDIT: Кількість байтів повідомлень не зараховується до вашого рахунку. (Дякую Мартіну Бюттнеру за цю гарну ідею)
Це кодовий гольф, виграє найкоротший байт. Будь ласка, не гольфуйте вміст повідомлення про помилку, ваш начальник не буде радий, якщо він не може зрозуміти повідомлення про помилки, і попросить вас виправити їх.