识别编译器


11

挑战
给您提供了一个函数compile(s: String): Integer,该函数将返回0是否s可以编译以及0是否失败(返回的代码并不重要)。

问题是您不知道该函数使用哪种语言,因此您可以通过向该函数提供少量代码片段并观察其返回内容来弄清楚该函数是什么。好消息是,一组科学家在您之前进行了尝试,并将清单缩小到了C,C ++,C#,Java和JavaScript(这是我能想到的仅有的使用相似语法的唯一广泛使用的语言)。

规则

  • 通用代码高尔夫球规则适用。
  • 没有严格的输出格式。只要它是可读和可理解的就可以。
  • 如果这5种语言对您来说还不够,那么您可以添加自己的收藏夹,您将获得额外的星星(★)奖励(不做任何事情)。

注意1:编译器采用最新的标准,无论其设计用于哪种语言。
2:我知道JavaScript不会编译,但是经过一些解析过程。如果它是有效的JavaScript代码,那么它将通过


2
我们提供什么?可以用来区分编译器的一组字符串,以最小化字符串的总长度吗?
杰夫·里迪

@GeoffReedy我只是在寻找确定语言的代码,但是您提供的解释不受欢迎
adrianton3

Answers:


7

摘要总长度为8;测试程序83(C)

将JavaScript和C与C ++,Java和C#区别开

a;

从C区分JavaScript

0

从C#和Java区分C ++

#

区分C#和Java

[:a]

确定语言的C代码

#define C(x)compile(#x)?
main(){puts(C(a;)C(#)C([:a])"J":"C#":"C+":C(0)"C":"JS");}

片段经过测试

C:具有-std = c99的gcc 4.7.2
C ++:具有-std = c ++ 11的g ++ 4.7.2
Java:javac 1.7.0_09
JavaScript:JavaScript-C 1.8.5
C#:Mono C#编译器版本2.10.8.0


#define C(x)compile(#x)?节省空间和大量的引号。
ugoren 2013年

@ugoren谢谢,我实际上以为我尝试了字符串化操作,但是由于某种原因它没有起作用;我肯定也遇到了其他问题,因为它现在可以正常工作
Geoff Reedy 2013年

但是您莫名其妙地把它弄混了- C(#x)不起作用。
ugoren 2013年
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.