Introducción
Este sitio está construyendo rápidamente un gran conjunto de datos de fragmentos de código, ¡así que hagamos algo con él!
Aquí hay un archivo de datos . Contiene 9.066 idiomas únicos + pares de fragmentos para 113 idiomas, todos tomados de este sitio. El formato está separado por tabulaciones (idioma-TAB-fragmento), con todas las líneas nuevas en los fragmentos reemplazadas por <LF>
, y todas las pestañas reemplazadas por 4 espacios. Hay al menos 5 fragmentos para cada idioma.
[Actualización: he realizado un pequeño cambio en el archivo de datos para fusionar algunas versiones de Python y RegExp que me perdí antes: el enlace de arriba se ha actualizado]
Reto
Escriba un programa o función que tome un fragmento de código y genere el idioma en el que está escrito (consulte los detalles a continuación). El tamaño total de su fuente + cualquier dato que necesite debe ser de 300 bytes o menos, y su programa debe generar el idioma correcto cuando se le dé su propio código fuente. La mayor precisión (la mayoría de las respuestas correctas en el conjunto de datos anterior) gana.
Reglas
- El tamaño total de su código fuente, recursos y cualquier indicador de compilación / tiempo de ejecución requerido no debe exceder los 300 bytes.
- Su respuesta será probada contra el conjunto de datos anterior; se le dará uno de los valores "Snippet" como entrada y su salida se comparará con la salida "correcta" según el conjunto de datos. Esto se repetirá para todas las entradas en el conjunto de datos y el número final de respuestas correctas es su puntaje.
- Puede elegir la codificación de entrada. Asumiré UTF-8, así que si necesita otra codificación, especifíquela en su respuesta.
- No necesita usar el
<LF>
reemplazo para líneas nuevas; Si su entrada espera recibir nuevas líneas como nuevas líneas literales (char 10), especifíquelo en su respuesta. - Su entrada debe generar el idioma en el que cree que está escrito el fragmento de entrada. Para evitar la necesidad de comprimir muchas cadenas de idioma, permitiré asignaciones (si desea generar 3 para "Java", está bien); solo tenga en cuenta las asignaciones en su respuesta.
- Solo puede tener 1 asignación de salida para cada idioma (es decir, si 3 significa "Java", tampoco puede tener 4 que significa "Java").
- Cuando se le da su propio código fuente, su programa debe producir la respuesta correcta (debe mostrar el idioma en el que está escrito).
- No necesita admitir todos los idiomas en el conjunto de datos, y puede admitir idiomas adicionales si lo desea (por ejemplo, si su entrada no está en uno de los idiomas del conjunto de datos).
- Su programa debe ser determinista (proporcionar la misma entrada dos veces debe producir la misma salida).
Romper el lazo
- Los empates se decidirán reduciendo el conjunto de datos hasta que gane una entrada. El conjunto de datos se reducirá eliminando todos los fragmentos del idioma más popular (es decir, los lazos se rompen por la precisión en los idiomas más raros). Por ejemplo, si A y B obtienen un 70% en el conjunto de datos completo, se eliminarán todos los fragmentos de Python. Si A y B ahora obtienen un puntaje de 60%, CJam será eliminado. Si A ahora obtiene un 50% pero B obtiene un 55%, B es el ganador.
- Si se logra una precisión del 100%, los lazos se decidirán utilizando un segundo conjunto de datos (ciego) que contenga más muestras para los mismos idiomas.
Ejemplo 1
El script de Python:
print("python")
Este script produce con éxito "python" cuando se le da su propio código fuente, por lo que es válido. En el conjunto de datos, obtiene un puntaje de 1008/9066 = 11.1%
Ejemplo 2
La función de JavaScript:
function f(s){return /function/.test(s)?1:2}
Con las asignaciones 1 → javascript, 2 → python. Nuevamente, produce con éxito 1 ("javascript") para su propia fuente, y en el conjunto de datos obtiene un puntaje de 1092/9066 = 12.0%
¿De dónde provienen los datos?
Creé una consulta SEDE para extraer muestras de desafíos [code-golf] en este sitio. De las 10,000 respuestas resultantes, utilicé un script de python pirateado para encontrar el código y el nombre del idioma para cada uno, luego filtré cualquier idioma con menos de 5 ejemplos. Los datos no están 100% limpios (sé que hay algunos fragmentos que no son de código), pero deberían ser lo suficientemente buenos.
Inspirado por este desafío de principios de año: ¿Quién dijo eso? Elección presidencial de 2016
También en parte relacionado con ¿Cuál es el idioma?