O desafio:
Escreva um programa muito curto que, quando compilado, crie a maior quantidade de avisos e erros do compilador. Pode ser escrito em qualquer linguagem de programação.
Pontuação:
A pontuação é determinada por esta equação: errors_and_warnings_length/code_length
. Maior pontuação ganha.
Exemplo:
O programa C # class
tem 5 caracteres e gera 3 avisos, com uma pontuação de (1/5) * 3 = 0,6.
EDITAR:
Por causa de alguma confusão, os programas precisam ter pelo menos 1 caractere. Caso contrário, obteria uma pontuação infinita.
gcc -Wall -pedantic
é muito diferente do comum ol`gcc
é diferente detcc
presumivelmente diferente de algum outro compilador c.Respostas:
GCC, pontuação de 2 200 /36 ≈ 4,5 × 10 58
Na verdade, eu não terminei de compilar esse código, mas com base em testes e em matemática simples, ele deve produzir um total de 2 200
#include nested too deeply
erros.Obviamente, o programa é trivialmente extensível. Adicionando uma terceira linha traz a pontuação até 3 200 /54 ≈ 4,9 × 10 93 . Quatro linhas dar 4 200 /72 ≈ 3,6 × 10 118 , e assim por diante.
fonte
#include
], para evitar recursões descontroladas. O padrão requer pelo menos 15 níveis ".C, 0 caracteres - Pontuação = (1/0) * 1 = Infinito
gera 1 erro:
Nota: http://ideone.com/xdoJyA
fonte
GCC, pontuação 5586,6 (e mais, se necessário)
179 caracteres, 1000003 avisos / erros (usando
-Wall
)Isso pode ser estendido arbitrariamente, é claro. Por exemplo, usar 10
#define
s em vez de 5 e um comprimento de 20 "chamadas" em vez de 10 levaria a uma pontuação de aproximadamente (20 ** 10) / (179 * 4) = 14301675977.65 (e levaria algum tempo para ser executado ;)fonte
#define X(A) A,A,A,A,A,A,A
eX(X(X(X(X(X(A))))))
você pode duplicar o código muito mais rapidamente.GCC duas vezes, 86
22 caracteres, 1898 erros + avisos no meu sistema.
Tenho certeza de que essa abordagem pode ser muito melhorada, escolhendo arquivos mais longos com nomes mais curtos.
fonte
/usr/bin/gdb
é significativamente maior (5,5 milhões vs 760 mil), mas/vmlinuz
5,6 milhões pode ser sua melhor aposta.HQ9 ++, 1 (limite de (n + 29) / n)
A seguir, emite o aviso
Warning: this is not a quine
para cada Q no código.Pequeno é bom, certo? Hmm...
fonte
C, .727
11 caracteres, 5 erros, 3 avisos, (1/11) * 8 = 0,727273
fonte
NASM, pontuação 63/40 * 2 ^ 32 ≈ 2.905 * 10 ^ 19
Produzirá
c.asm:3: error: label or instruction expected at start of line
2 ^ 64 vezes. Novamente, isso é facilmente extensível a saídas muito maiores.fonte
C ++ 98 (211 bytes) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Eu queria ver o quão bem eu poderia fazer em C ++ sem usar o pré-processador. Este programa produz 2.139.390.572 bytes de saída, a maioria dos quais é uma única mensagem de erro.
Ungolfed:
Este programa funciona definindo um modelo de estrutura recursiva R que contém um typedef D contendo duas cópias de R. Isso resulta em um nome de tipo que cresce exponencialmente, que é impresso na íntegra na mensagem de erro. Infelizmente, o g ++ parece engasgar ao tentar imprimir uma mensagem de erro maior que (1 << 31) bytes. 2.139.390.572 bytes foi o mais próximo que pude chegar ao limite sem ultrapassar. Estou curioso
27, float, 24, int*const*
para saber se alguém pode ajustar os limites de recursão e os tipos de parâmetros para se aproximar do limite (ou encontrar um compilador que possa imprimir uma mensagem de erro ainda mais longa).Trechos da mensagem de erro:
2.139.390.572 bytes / 211 bytes = 10.139.291,8fonte
SmileBASIC, 1/1 = 1
Gera o erro
Syntax Error in 0:1
fonte