您的老板最近了解了这种有趣的编程语言,称为英语。他有这个“革命性”的想法,他想和您一起编码以使编码生产率提高一倍!由于他不是一个精通技术的人,他希望您为此编写一个编译器,以便他也可以编码!
现在,您是个懒惰的程序员,显然不会编写程序来编译这种可笑的复杂语言。相反,您将确保老板的代码中始终存在错误,以使他永远不会进入实际的编译过程,并且卡在修正语法错误而不是编码上。
挑战在于编写一个可以从终端运行的程序,并接受文件路径作为参数。该程序必须:
- 通过输入错字来修改文件输入。
- 由于遇到您输入的错字,假装编译失败。
- 在相同文件的副本上运行该程序不应连续两次引入相同的错字。
为了说明这一挑战,请在此文件上运行程序:
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个字节,而是本问题中基于错字的。
至少5个不同错误消息的-60个字节,随机交替。
-60字节,如果您的程序有100分之一或更少的机会向老板输出一些负面消息。
编辑:消息的字节数不计入您的分数。 (感谢MartinBüttner提出的好主意)
这是代码高尔夫球,最短字节数获胜。请不要查看错误消息的内容,如果老板不理解错误消息,他会很高兴,并会要求您为他修复错误消息。