Определить компилятор

11

Задача
Вам дана функцияcompile(s: String): Integer которая возвращает, 0если sможно было бы скомпилировать, и что-либо, кроме 0того, что не удалось (результирующий код не важен).

Дело в том, что вы не знаете, для какого языка предназначена функция, так что вы должны выяснить это, предоставив функции небольшие фрагменты кода и наблюдая за тем, что она возвращает. Хорошая часть заключается в том, что команда ученых попробовала перед вами и сузила список до C, C ++, C #, Java и JavaScript (это единственные широко распространенные языки с похожим синтаксисом, который я мог придумать).

правила

  • Применяются общие правила игры в гольф.
  • Нет строгого формата вывода; пока это читабельно и понятно, все в порядке.
  • Если вам не хватает этих 5 языков, вы можете добавить свои избранные, и вы будете вознаграждены дополнительными звездочками (★) (которые ничего не делают).

Примечание 1 : компилятор соответствует последним стандартам любого языка, для которого он предназначен.
Примечание 2 : я знаю, что JavaScript не компилируется , но идет через процесс синтаксического анализа; если это правильный код JavaScript, то он проходит

adrianton3
источник
2
Что мы должны предоставить? Набор строк, которые можно использовать, чтобы отличить компиляторы, минимизируя общую длину строк?
Джефф Риди
@GeoffReedy Я искал только код для определения языка, но предоставленные вами объяснения более чем приветствуются
adrianton3

Ответы:

7

Общая длина фрагмента 8; тестовая программа 83 (С)

Различают JavaScript и C от C ++, Java и C #

a;

Различают JavaScript от C

0

Различают C ++ от C # и Java

#

Различают C # и Java

[:a]

С-код для определения языка

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

Отрывки проверены с

C: gcc 4.7.2 с -std = c99
C ++: g ++ 4.7.2 с -std = c ++ 11
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 спасибо, я на самом деле думал, что попробовал что-то по строчкам, но почему-то это не сработало; Должно быть, у меня была и другая проблема, потому что теперь она работает нормально
Джефф Риди,
Но ты как-то перепутал - C(#x)не получится.
Угорен