Identifica el compilador

11

El desafío
Se le asigna una función compile(s: String): Integerque devuelve 0si sse puede compilar y cualquier otra cosa que no sea 0si falla (el código resultante no es importante).

La cuestión es que no sabe para qué idioma está hecha la función, por lo que depende de usted averiguarlo dando pequeños fragmentos de código a la función y observando lo que devuelve. Lo bueno es que un equipo de científicos lo ha intentado antes y ha reducido la lista a C, C ++, C #, Java y JavaScript (estos son los únicos lenguajes generalizados que tienen una sintaxis similar en la que podría pensar).

Reglas

  • Se aplican reglas generales de código de golf.
  • No hay un formato de salida estricto; siempre y cuando sea legible y comprensible, está bien.
  • Si estos 5 idiomas no son suficientes para usted, entonces puede agregar sus propios favoritos y será recompensado con estrellas adicionales (★) (que no hacen nada).

Nota 1 : el compilador está actualizado con el último estándar de cualquier idioma para el que esté diseñado.
Nota 2 : Sé que JavaScript no se compila , pero pasa por algún proceso de análisis; si es un código JavaScript válido, entonces pasa

adrianton3
fuente
2
¿Qué debemos proporcionar? ¿El conjunto de cadenas que se pueden usar para distinguir a los compiladores, minimizando la longitud total de las cadenas?
Geoff Reedy
@ GeoffReedy Estaba buscando solo el código para determinar el idioma, pero las explicaciones que proporcionó son más que bienvenidas
adrianton3

Respuestas:

7

Longitud total del fragmento 8; programa de prueba 83 (C)

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

a;

Distinguir JavaScript de C

0

Distinguir C ++ de C # y Java

#

Distinguir C # y Java

[:a]

Código C para determinar el idioma

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

Fragmentos probados con

C: gcc 4.7.2 con -std = c99
C ++: g ++ 4.7.2 con -std = c ++ 11
Java: javac 1.7.0_09
JavaScript: JavaScript-C 1.8.5
C #: versión del compilador Mono C # 2.10.8.0

Geoff Reedy
fuente
#define C(x)compile(#x)?ahorra espacio y muchas citas.
ugoren
@ugoren gracias, en realidad pensé que probé el proceso de stringificación pero no funcionó por alguna razón; Debo haber tenido otro problema también, porque funciona bien ahora
Geoff Reedy
Pero de alguna manera lo confundiste C(#x), no funcionará.
Ugoren