为老板编写英文


16

您的老板最近了解了这种有趣的编程语言,称为英语。他有这个“革命性”的想法,他想和您一起编码以使编码生产率提高一倍!由于他不是一个精通技术的人,他希望您为此编写一个编译器,以便他也可以编码!

现在,您是个懒惰的程序员,显然不会编写程序来编译这种可笑的复杂语言。相反,您将确保老板的代码中始终存在错误,以使他永远不会进入实际的编译过程,并且卡在修正语法错误而不是编码上。

挑战在于编写一个可以从终端运行的程序,并接受文件路径作为参数。该程序必须:

  1. 通过输入错字来修改文件输入。
  2. 由于遇到您输入的错字,假装编译失败。
  3. 在相同文件的副本上运行该程序不应连续两次引入相同的错字。

为了说明这一挑战,请在此文件上运行程序:

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提出的好主意)

这是代码高尔夫球,最短字节数获胜。请不要查看错误消息的内容,如果老板不理解错误消息,他会很高兴,并会要求您为他修复错误消息。


我必须处理不包含字母的行吗?
2014年

您只能用字母字符创建一个错字,并且可以假定输入文件是存在的有效非空文件。
rodolphito

7
我不喜欢将错误消息留给我们。即使我们“不要打错错误信息”,如果我们要获得第二个奖金,它们仍然可以改变几个字节,甚至可能只有两个字节。那可能很多。我认为在公平的高尔夫比赛中,您应该指定5条错误消息和一条无用的消息,或者让我们从字节数中减去其字符串长度。
马丁·恩德

感谢您的提示,我曾想过要有预定义的消息,但是我想为此提供更多的自由。从分数中减去消息字节数是一个好主意。
rodolphito 2014年

Answers:


3

TI-BASIC 77-34(错误文本)= 43

如果他想使用他的TI-83 / 84计算器;)

作为函数的标准,文件字符串应位于其中,Ans以便它可以返回并显示输出。

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

请注意,许多令牌是一个字节。


我在哪里可以运行此代码?
rodolphito 2014年

TI-83 / 84计算器或一个仿真器。
Timtech

inStringAnssubElseThenEndDisp Str1...不是那些对计算器的所有1个字节?
Ismael Miguel 2014年

4
什么?????????????????这就像说8位不是1字节!!!!!!!!! 如果我以二进制形式在汇编中提供代码,那么它们还会将字节计为5个字节以上的1个宏吗?那真是愚蠢!(对不起的话,但确实很愚蠢!)这不代表您的代码。我的意思Ans是与所代表的字节不同Ans。一个A*n*s返回计算器想要的任何结果,另一个返回最后一个算术表达式的值。考虑到这一点,我认为不接受REAL计数会使此代码表示错误。
Ismael Miguel

5
它似乎并没有随机修改文件,看起来总是在第1行显示更改,如果第一个字母为A,则将其更改为B,否则将其更改为A。
rodolphito
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.