Identifiez le compilateur

11

Le défi
On vous donne une fonction compile(s: String): Integerqui retourne 0si elle speut être compilée et autre chose que 0si elle a échoué (le code résultant n'est pas important).

Le fait est que vous ne savez pas pour quelle langue la fonction est conçue, c'est donc à vous de le comprendre en donnant à la fonction de petits extraits de code et en observant ce qu'elle retourne. La bonne partie est qu'une équipe de scientifiques a essayé avant vous et a réduit la liste en C, C ++, C #, Java et JavaScript (ce sont les seuls langages répandus qui ont une syntaxe similaire à laquelle je pourrais penser).

Règles

  • Les règles générales du code-golf s'appliquent.
  • Il n'y a pas de format de sortie strict; tant qu'il est lisible et compréhensible, c'est ok.
  • Si ces 5 langues ne vous suffisent pas, vous pouvez ajouter vos propres favoris et vous serez récompensé par des étoiles supplémentaires (★) (qui ne font rien).

Remarque 1 : le compilateur est à jour avec la dernière norme de la langue pour laquelle il est conçu.
Remarque 2 : je sais que JavaScript ne compile pas , mais il passe par un processus d'analyse; si c'est du code JavaScript valide, il passe

adrianton3
la source
2
Que devons-nous fournir? L'ensemble de chaînes qui peut être utilisé pour différencier les compilateurs, en minimisant la longueur totale des chaînes?
Geoff Reedy
@GeoffReedy Je cherchais juste le code pour déterminer la langue, mais les explications que vous avez fournies sont plus que bienvenues
adrianton3

Réponses:

7

Longueur totale de l'extrait 8; programme d'essai 83 (C)

Distinguer JavaScript et C de C ++, Java et C #

a;

Distinguer JavaScript de C

0

Distinguer C ++ de C # et Java

#

Distinguer C # et Java

[:a]

Code C pour déterminer la langue

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

Extraits testés avec

C: gcc 4.7.2 avec -std = c99
C ++: g ++ 4.7.2 avec -std = c ++ 11
Java: javac 1.7.0_09
JavaScript: JavaScript-C 1.8.5
C #: Compilateur mono C # version 2.10.8.0

Geoff Reedy
la source
#define C(x)compile(#x)?économise un espace et beaucoup de citations.
ugoren
@ugoren merci, je pensais vraiment avoir essayé la chose de stringification mais cela n'a pas fonctionné pour une raison quelconque; J'ai dû aussi avoir un autre problème, car ça fonctionne bien maintenant
Geoff Reedy
Mais vous l'avez en quelque sorte mélangé - C(#x)ne fonctionnera pas.
ugoren