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
file
utilidad de shell realmente hace un buen trabajo al respecto. p.ej:Además, puede usar la
-k
opción para "continuar" cuando pruebe un políglota:Además, la
-l
opció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-only
para 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.java
Demostración ( demostración en línea en JSFiddle ):
fuente
coffee
algún argumento? Acababa de intentar redirigir archivos a él, pero simplemente ejecutarlo y continuar^D
tampoco hace nada.npm install coffee-script && node_modules/.bin/coffee timwolla.coffee < timwolla.coffee
en 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
volatile
se usa más en Java que en C, establezca la puntuación para lavolatile
palabra 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
ini
archivos yphp
\$\w+
después del perl para detectar PHP. También(\w+)::~\1
suele 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:
x
idioma 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