多重语言是同时在多种编程语言中有效的程序。大多数这样的多语言文字以一种语言的某些构造被解释为另一种语言的注释的方式(例如,#define
在C 语言中被解释为几种脚本语言的注释)。
我很好奇,是否有可能制作一个不包含注释的非平凡的多语种,但是当您删除任何非空白字符时也会立即更改,因此,我向您提出这样一个程序。
具体规则如下:
- (输出)。您的程序必须使用每种语言在控制台上产生一些输出。也就是说,您的程序不允许不打印任何内容而直接退出。
- (方差)。作为对标准多语言定义的放松,程序的输出可能会因语言而异。
- (错误)。您的程序不得在任何一种语言下产生任何错误(广义定义)。对于大多数语言,这被定义为从编译器和/或解释器返回非零退出代码。
- (限制)。从代码中删除任何单个非空白字符都将导致您的程序在每种语言下更改其行为。程序可以通过对该语言无效或更改生成的输出来“更改”。
- 这是一个代码挑战。优胜者是在大多数编程语言中都有效的程序。为了缩短程序长度,将打破联系。
限制规则不适用于删除多个字符。也就是说,如果同时删除多个字符不会对您的一种语言造成任何影响,那就很好。
请注意,该限制规则表明您不能将空格用作您的一种语言,因为删除任何非空格字符不会改变空格程序的行为。
这是一个满足以下所有限制的程序的简单示例,适用于Python 2和Python 3:
print("Hello World!")
删除中的任何字符print
将导致两种语言都抛出NameError
;删除任何括号或引号将引发SyntaxError
,删除任何字符串字符将更改两种语言的输出。(请注意,print("hello", "world")
根据上述规则,这是一个更微妙但仍然有效的程序)。
这个示例有点la脚,因为Python 2和Python 3非常相似,因此我不会接受任何其他仅使用同一语言的不同版本的解决方案(尤其是Python 2和Python 3)。
print("Hello World!")
也是有效的Ruby代码