Ваш босс недавно узнал об этом интересном языке программирования, который называется английский . У него была эта «революционная» идея, он хочет написать вместе с вами, чтобы удвоить скорость производства кода! Поскольку он не разбирается в технологиях, он хочет, чтобы вы написали для него компилятор, чтобы он тоже мог писать код!
Теперь вы злой ленивый программист и, очевидно, не напишете программу для компиляции этого нелепо сложного языка. Вместо этого вы должны быть уверены, что в коде вашего босса всегда есть ошибка, так что он никогда не доберется до фактической компиляции и застрянет, исправляя грамматические ошибки вместо кодирования.
Задача состоит в том, чтобы написать программу, которая может быть запущена из терминала и принимает путь к файлу в качестве аргумента. Программа должна:
- изменить ввод файла, введя опечатку.
- Притворяться, что сборка не удалась из-за обнаруженной вами опечатки.
- Запуск программы на копиях одного и того же файла не должен вводить одну и ту же опечатку дважды подряд.
Чтобы проиллюстрировать проблему, запустите вашу программу в этом файле:
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 или меньше, чтобы вывести какое-то демотивационное сообщение вашему боссу.
РЕДАКТИРОВАТЬ: Количество байтов сообщений не учитывается в ваш счет. (Спасибо Мартину Бюттнеру за эту хорошую идею)
Это код-гольф, выигрывает самый короткий счетчик байтов. Пожалуйста, не играйте в содержание сообщений об ошибках, ваш босс не будет счастлив, если он не сможет понять сообщения об ошибках, и попросит вас исправить их за него.
Ответы:
TI-BASIC, 77 - 34 (текст ошибки) = 43
В случае, если он хочет сделать на своем калькуляторе TI-83/84;)
Стандартно для функций должна быть указана строка файла,
Ans
чтобы она могла возвращать и отображать вывод.Обратите внимание, что многие токены являются одним байтом.
источник
inString
,Ans
,sub
,Else
,Then
,End
,Disp
,Str1
... не те все 1 байт для калькулятора?Ans
не совпадает с байтом, представленнымAns
. Один изA*n*s
них дает любой результат, который хочет калькулятор, другой возвращает значение последнего арифметического выражения. Принимая это во внимание, я думаю, что непринятие значения REAL делает это неправильным представлением кода.