Zidentyfikuj kompilator

11

Wyzwanie
Otrzymujesz funkcję, compile(s: String): Integerktóra zwraca, 0jeśli smożna ją skompilować i wszystko inne, niż 0jeśli się nie powiedzie (wynikowy kod nie jest ważny).

Chodzi o to, że nie wiesz, dla jakiego języka jest tworzona funkcja, więc to od Ciebie zależy, czy podasz funkcji małe fragmenty kodu i obserwujesz, co ona zwraca. Zaletą jest to, że zespół naukowców próbował przed tobą i zawęził listę do C, C ++, C #, Java i JavaScript (są to jedyne szeroko rozpowszechnione języki o podobnej składni, o których mogłem pomyśleć).

Zasady

  • Obowiązują ogólne zasady gry w golfa.
  • Nie ma ścisłego formatu wyjściowego; pod warunkiem, że jest czytelny i zrozumiały, jest w porządku.
  • Jeśli te 5 języków nie wystarcza, możesz dodać własne ulubione, a otrzymasz dodatkowe gwiazdki (★) (które nic nie robią).

Uwaga 1 : kompilator jest na bieżąco z najnowszym standardem w jakimkolwiek języku, dla którego został zaprojektowany.
Uwaga 2 : Wiem, że JavaScript się nie kompiluje , ale przechodzi pewien proces analizy; jeśli jest to poprawny kod JavaScript, to przechodzi

adrianton3
źródło
2
Co mamy zapewnić? Zestaw ciągów znaków, których można użyć do rozróżnienia kompilatorów, minimalizując całkowitą długość ciągów?
Geoff Reedy
@GeoffReedy Szukałem tylko kodu do określenia języka, ale podane przez ciebie wyjaśnienia są bardzo mile widziane
adrianton3

Odpowiedzi:

7

Całkowita długość fragmentu 8; program testowy 83 (C)

Odróżnij JavaScript i C od C ++, Java i C #

a;

Odróżnij JavaScript od C.

0

Odróżnij C ++ od C # i Java

#

Rozróżnij C # i Java

[:a]

Kod C określający język

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

Fragmenty testowane przy użyciu

C: gcc 4.7.2 z -std = c99
C ++: g ++ 4.7.2 z -std = c ++ 11
Java: javac 1.7.0_09
JavaScript: JavaScript-C 1.8.5
C #: Wersja kompilatora Mono C # 2.10.8.0

Geoff Reedy
źródło
#define C(x)compile(#x)?oszczędza miejsce i wiele cytatów.
ugoren
@ugoren, dzięki, naprawdę myślałem, że spróbowałem czegoś ze strikowaniem, ale z jakiegoś powodu nie zadziałało; Musiałem też mieć inny problem, ponieważ teraz działa dobrze
Geoff Reedy
Ale jakoś to pomieszałeś - C(#x)nie zadziała.
ugoren