Su desafío es tomar algún código fuente como entrada y salida en qué lenguaje de programación está escrito.
Por ejemplo, podría tener la entrada
class A{public static void main(String[]a){System.out.println("Hello, World!");}}
Y salida
Java
Sus dos objetivos principales son la diversidad (cuántos lenguajes de programación puede detectar) y la precisión (qué tan bueno es para detectar estos lenguajes).
Para los políglotas (programas válidos en más de un idioma), puede decidir qué hacer. Simplemente podría generar el lenguaje que su programa cree que es más probable, o podría generar un error, o podría generar una variedad de posibles opciones (¡lo que probablemente obtendría más votos positivos que solo un error!).
Este es un concurso de popularidad , porque sería muy difícil especificar un criterio objetivo diferente para ganar. Votantes, voten cuántos idiomas puede detectar y qué tan exactos son.
fuente

print("")puede usarse en muchos idiomas.class A{public static void main(String[]a){System.println.out("Hello, World!");}}que no es válida.<!DOCTYPE html>seguido por el<html>,<body>y otras etiquetas (comometa) en su orden correcto?Respuestas:
234 formatos de texto - Unix Shell
(no todos son idiomas, necesito contarlos cuidadosamente)
Dudo en publicar esta respuesta algo inteligente, una $$, pero no veo nada en las reglas que lo prohíben y la
fileutilidad de shell realmente hace un buen trabajo al respecto. p.ej:Además, puede usar la
-kopción para "continuar" cuando pruebe un políglota:Además, la
-lopción le dará una idea de qué tan bueno es el algoritmo para diferentes idiomas:Esto es
file-5.09(en Ubuntu 12.04)fuente
ln -s /usr/bin/file /usr/local/bin/myspecialtool. Si su respuesta cuenta, ¿no cuenta esto también? (No te preocupes, no hablo en serio.)Bash - acerca de
5035 bytes por idioma compilableEl truco es simplemente compilar, entonces no tiene que preocuparse por vincular errores de bibliotecas faltantes, y es más indulgente si solo tiene fragmentos de código.
¡Gracias a Shahbaz por formas más cortas!
etc ...
fuente
gcc -c $1 && (echo C; exit 0)&&y||en bash son realmente útiles y ayudan mucho a limpiar el código. De ninguna manera se usan para ofuscar, por lo que sería bueno aprenderlos.-fsyntax-onlypara verificar solo la sintaxis y omitir la compilación real.18 lenguajes de programación, 1002 bytes, precisión: prueba por ti mismo :)
(sí, sé que esto no es golf de código, sino por diversión)
El programa busca fragmentos de código icónicos, las comprobaciones se ordenan de manera que las comprobaciones más claras están en la parte superior y los lenguajes de programación incrustados en otros lenguajes de programación están debajo (por ejemplo, HTML en PHP).
Obviamente, esto falla para programas como
System.out.println('<?php');Uso en nodo:
coffee timwolla.coffee < Example.javaDemostración ( demostración en línea en JSFiddle ):
fuente
coffeealgún argumento? Acababa de intentar redirigir archivos a él, pero simplemente ejecutarlo y continuar^Dtampoco hace nada.npm install coffee-script && node_modules/.bin/coffee timwolla.coffee < timwolla.coffeeen una carpeta temporal, esto debería escupirAPL. (suponiendo que tenga instalada una versión reciente de nodo y npm)Esta respuesta es una prueba de concepto, que probablemente no recibirá más trabajo de mi parte.
Se queda corto de varias maneras:
La idea es establecer una lista de palabras clave / caracteres / frases que puedan identificar un idioma específico y asignar una puntuación a esa palabra clave para cada idioma. Luego, verifique el (los) archivo (s) de origen para estas palabras clave y calcule los puntajes para cada idioma para el que encuentre palabras clave. Al final, el idioma con la puntuación más alta es el probable ganador. Esto también atiende a los programas políglotas, ya que ambos (o todos) los idiomas relevantes obtendrán una puntuación alta.
Lo único para agregar más idiomas es identificar sus "firmas" y agregarlas al mapeo.
También puede asignar diferentes puntajes a diferentes palabras clave por idioma. Por ejemplo, si cree que
volatilese usa más en Java que en C, establezca la puntuación para lavolatilepalabra clave en 2 para Java y 1 para C.fuente
Solo unas pocas generalizaciones amplias.
Creo que es bastante exacto.
Este es Ruby por cierto. Toma entrada (multilínea) de stdin.
fuente
iniarchivos yphp\$\w+después del perl para detectar PHP. También(\w+)::~\1suele ser un destructor de C ++Javascript - 6 idiomas - alta precisión
Lenguajes actuales: Java, C, HTML, PHP, CSS, Javascript
Trabajo según el principio de que cada vez que una entrada satisface un criterio, se le da un puntaje, y en función de ese puntaje se dan los resultados.
caracteristicas:
xidioma al ver una palabra clave.Si siente que alguna de sus entradas de los programas (que he hecho hasta ahora) no se detecta o no obtiene resultados no válidos, informe y me complacerá solucionarlos.
Entrada de muestra 1:
Salida de muestra 1:
Explicación:
Esto debería haber fallado el programa y habría impreso
PHP, pero dado que mi programa funciona sobre la base de puntajes, nada falla e identifica fácilmente Java en primer lugar, seguido de otros posibles resultados.Entrada de muestra 2:
Salida de muestra 2:
Entrada de muestra 3:
Salida de muestra 3:
El código:
fuente