El reto:
Escriba un programa muy corto que, cuando se compila, crea la mayor cantidad de advertencias y errores del compilador. Se puede escribir en cualquier lenguaje de programación.
Tanteo:
La puntuación se determina por la siguiente ecuación: errors_and_warnings_length/code_length
. La puntuación más alta gana.
Ejemplo:
El programa C # class
tiene 5 caracteres de largo y genera 3 advertencias, que es una puntuación de (1/5) * 3 = 0.6.
EDITAR:
Debido a cierta confusión, los programas deben tener al menos 1 char de largo. De lo contrario, obtendría una puntuación de infinito.
gcc -Wall -pedantic
es muy diferente de simple ol`gcc
es diferente detcc
es presumiblemente diferente de algún otro compilador de c.Respuestas:
GCC, la puntuación de 2 200 /36 ≈ 4,5 × 10 58
En realidad no he terminado de compilar este código, pero basado en pruebas y matemáticas simples, debería producir un total de 2 200
#include nested too deeply
errores.Por supuesto, el programa es trivialmente extensible. La adición de una tercera línea trae la puntuación hasta 3 200 /54 ≈ 4,9 × 10 93 . Cuatro líneas dan 4 200 /72 ≈ 3,6 × 10 118 , y así sucesivamente.
fuente
#include
], para evitar la recurrencia fuera de control. El estándar requiere al menos 15 niveles ".C, 0 caracteres - Puntuación = (1/0) * 1 = Infinito
genera 1 error:
Nota: http://ideone.com/xdoJyA
fuente
GCC, puntaje 5586.6 (y más si es necesario)
179 caracteres, 1000003 advertencias / errores (usando
-Wall
)Esto puede extenderse arbitrariamente, por supuesto. Por ejemplo, usar 10
#define
s en lugar de 5 y una duración de 20 "llamadas" en lugar de 10 conduciría a una puntuación de aproximadamente (20 ** 10) / (179 * 4) = 14301675977.65 (y tomaría bastante tiempo ejecutarlo) ;)fuente
#define X(A) A,A,A,A,A,A,A
yX(X(X(X(X(X(A))))))
puede duplicar el código mucho más rápido.CCG dos veces, 86
22 caracteres, 1898 errores + advertencias en mi sistema.
Estoy seguro de que este enfoque se puede mejorar mucho, eligiendo archivos más largos con nombres más cortos.
fuente
/usr/bin/gdb
es significativamente más grande (5.5M vs 760K), pero/vmlinuz
a 5.6M podría ser su mejor apuesta.HQ9 ++, 1 (límite de (n + 29) / n)
Lo siguiente emite la advertencia
Warning: this is not a quine
para cada Q en el código.Lo pequeño es bueno, ¿verdad? Hmm ...
fuente
C, .727
11 caracteres, 5 errores, 3 advertencias, (1/11) * 8 = .727273
fuente
NASM, puntaje 63/40 * 2 ^ 32 ≈ 2.905 * 10 ^ 19
Producirá
c.asm:3: error: label or instruction expected at start of line
2 ^ 64 veces. Nuevamente, esto es fácilmente extensible a salidas mucho más grandes.fuente
C ++ 98 (211 bytes) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Quería ver qué tan bien podría hacerlo en C ++ sin usar el preprocesador. Este programa produce 2,139,390,572 bytes de salida, la mayoría de los cuales es un mensaje de error único.
Sin golf:
Este programa funciona definiendo una plantilla de estructura recursiva R que contiene un typedef D que contiene dos copias de R. Esto da como resultado un nombre de tipo que crece exponencialmente, que se imprime en su totalidad en el mensaje de error. Desafortunadamente, g ++ parece ahogarse al intentar imprimir un mensaje de error de más de (1 << 31) bytes. 2,139,390,572 bytes fue lo más cerca que pude llegar al límite sin pasar. Tengo curiosidad por saber si alguien puede ajustar los límites de recursión y los tipos de parámetros
27, float, 24, int*const*
para acercarse al límite (o encontrar un compilador que pueda imprimir un mensaje de error aún más largo).Extractos del mensaje de error:
2,139,390,572 bytes / 211 bytes = 10,139,291.8fuente
SmileBASIC, 1/1 = 1
Genera el error
Syntax Error in 0:1
fuente