Identifique o compilador

11

O desafio
Você recebe uma função compile(s: String): Integerque retorna 0se spuder ser compilada e qualquer outra coisa que 0não seja a falha (o código resultante não é importante).

O problema é que você não sabe para qual idioma a função é criada; portanto, cabe a você descobrir isso dando pequenos trechos de código à função e observando o que ela retorna. A parte boa é que uma equipe de cientistas tentou antes de você e reduziu a lista para C, C ++, C #, Java e JavaScript (essas são as únicas linguagens comuns que têm sintaxe semelhante em que eu poderia pensar).

Regras

  • Aplicam-se as regras gerais de código-golfe.
  • Não há formato de saída estrito; desde que seja legível e compreensível, tudo bem.
  • Se esses 5 idiomas não forem suficientes, você poderá adicionar seus próprios favoritos e será recompensado com estrelas extras (★) (que não fazem nada).

Nota 1 : o compilador está atualizado com o padrão mais recente de qualquer idioma para o qual foi projetado.
Nota 2 : Eu sei que o JavaScript não é compilado , mas passa por algum processo de análise; se for um código JavaScript válido, ele passa

adrianton3
fonte
2
O que devemos fornecer? O conjunto de strings que podem ser usados ​​para diferenciar os compiladores, minimizando o comprimento total das strings?
Geoff Reedy
@GeoffReedy eu estava olhando apenas para o código para determinar o idioma, mas as explicações que você forneceu são mais que bem-vindo
adrianton3

Respostas:

7

Comprimento total do snippet 8; programa de teste 83 (C)

Distinguir JavaScript e C de C ++, Java e C #

a;

Distinguir JavaScript de C

0

Distinguir C ++ de C # e Java

#

Distinguir C # e Java

[:a]

Código C para determinar o idioma

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

Snippets testados com

C: gcc 4.7.2 com -std = c99
C ++: g ++ 4.7.2 com -std = c ++ 11
Java: javac 1.7.0_09
JavaScript: JavaScript-C 1.8.5
C #: compilador Mono C # versão 2.10.8.0

Geoff Reedy
fonte
#define C(x)compile(#x)?economiza um espaço e muitas citações.
ugoren
@ugoren obrigado, na verdade, eu pensei que eu tentei a coisa de cordificação, mas não funcionou por algum motivo; I deve ter tido algum outro problema também, porque ele funciona bem agora
Geoff Reedy
Mas você de alguma forma confundiu - C(#x)não vai funcionar.
ugoren