Визначте компілятор


11

Виклик
Вам надається функція, compile(s: String): Integerяка повертається, 0якщо її sможна було скласти, і будь-що інше, ніж 0якщо вона не вдалася (отриманий код не важливий).

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

Правила

  • Діють загальні правила коду-гольфу.
  • Немає суворого формату виводу; до тих пір, поки це читається і зрозуміло, це нормально.
  • Якщо цих 5 мов вам недостатньо, ви можете додати своїх улюблених, і ви отримаєте нагороду додатковими зірками (★) (які нічого не роблять).

Примітка 1 : компілятор в курсі останніх стандартів незалежно від мови, для якої він призначений.
Примітка 2 : Я знаю, що JavaScript не компілюється , але він проходить певний процес розбору; якщо це дійсний код JavaScript, то він проходить


2
Що ми маємо надати? Набір рядків, які можна використовувати для розрізнення компіляторів, мінімізуючи загальну довжину рядків?
Джефф Ріді

@GeoffReedy Я шукав лише код для визначення мови, але пояснення, які ви надали, більш ніж вітаються
adrianton3

Відповіді:


7

Загальна довжина фрагмента 8; тестова програма 83 (C)

Розрізняють JavaScript та C від C ++, Java та C #

a;

Відрізнити JavaScript від C

0

Відрізнити C ++ від C # та Java

#

Розрізняють C # і Java

[:a]

C код для визначення мови

#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

@ugoren спасибі, я насправді думав, що я спробував рішучу структуру, але це чомусь не вийшло; У мене, мабуть, була і якась інша проблема, тому що вона працює нормально
Джефф Реді

Але ти якось перемішав - C(#x)не вийде.
ugoren
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.