Wyzwanie:
Napisz bardzo krótki program, który po skompilowaniu tworzy najwięcej ostrzeżeń i błędów kompilatora. Można go napisać w dowolnym języku programowania.
Punktacja:
Wynik określa się równaniem: errors_and_warnings_length/code_length
. Najwyższy wynik wygrywa.
Przykład:
Program C # class
ma 5 znaków i generuje 3 ostrzeżenia, co stanowi wynik (1/5) * 3 = 0,6.
EDYTOWAĆ:
Z powodu pewnych nieporozumień programy muszą mieć co najmniej 1 znak długości. W przeciwnym razie uzyskałoby wynik nieskończoności.
gcc -Wall -pedantic
bardzo różni się od zwykłego ol`gcc
różni się odtcc
jest prawdopodobnie różni się od jakiegoś innego kompilatora c.Odpowiedzi:
GCC wynik 2 200 /36 ≈ 4,5 x 10 58
Właściwie nie skończyłem kompilować tego kodu, ale w oparciu o testy i prostą matematykę powinien on wygenerować łącznie 2 200
#include nested too deeply
błędów.Oczywiście program jest trywialnie rozszerzalny. Dodanie trzeciego wiersza doprowadza wynik do 3 200 /54 ≈ 4,9 x 10 93 . Cztery linie nadają 4 200 /72 ≈ 3,6 x 10 118 , i tak dalej.
źródło
#include
], aby uniknąć niekontrolowanej rekurencji. Standard wymaga co najmniej 15 poziomy ”.C, 0 znaków - Wynik = (1/0) * 1 = Nieskończoność
generuje 1 błąd:
Uwaga: http://ideone.com/xdoJyA
źródło
GCC, wynik 5586.6 (i więcej w razie potrzeby)
179 znaków, 1000003 ostrzeżeń / błędów (za pomocą
-Wall
)Oczywiście można to dowolnie rozszerzyć. Na przykład użycie 10
#define
s zamiast 5 i długości 20 „wywołań” zamiast 10 doprowadziłoby do wyniku około (20 ** 10) / (179 * 4) = 14301675977.65 (i zajęłoby sporo czasu, aby uruchomić ;)źródło
#define X(A) A,A,A,A,A,A,A
iX(X(X(X(X(X(A))))))
możesz powielać kod znacznie szybciej.GCC dwa razy, 86
22 znaki, 1898 błędów + ostrzeżenia w moim systemie.
Jestem pewien, że to podejście można znacznie ulepszyć, wybierając dłuższe pliki o krótszych nazwach.
źródło
/usr/bin/gdb
jest znacznie większy (5,5 mln vs 760 tys.), ale/vmlinuz
przy 5,6 mln może być najlepszym wyborem.HQ9 ++, 1 (limit (n + 29) / n)
Poniższe emituje ostrzeżenie
Warning: this is not a quine
dla każdego Q w kodzie.Małe jest dobre, prawda? Hmm ...
źródło
C, .727
11 znaków, 5 błędów, 3 ostrzeżenia, (1/11) * 8 = .727273
źródło
NASM, wynik 63/40 * 2 ^ 32 ≈ 2,905 * 10 ^ 19
Wyjdzie
c.asm:3: error: label or instruction expected at start of line
2 ^ 64 razy. Ponownie można to łatwo rozszerzyć na znacznie większe wyniki.źródło
C ++ 98 (211 bajtów) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Chciałem zobaczyć, jak dobrze sobie radzę w C ++ bez korzystania z preprocesora. Ten program generuje 2139 390 572 bajtów danych wyjściowych, z których większość jest pojedynczym komunikatem o błędzie.
Nie golfowany:
Ten program działa poprzez zdefiniowanie rekurencyjnego szablonu struktury R, który zawiera typedef D zawierający dwie kopie R. Daje to nazwę typu, która rośnie wykładniczo, która jest drukowana w całości w komunikacie o błędzie. Niestety, g ++ wydaje się dusić podczas próby wydrukowania komunikatu o błędzie dłuższego niż (1 << 31) bajtów. 2 139 3990 572 bajtów było najbliżej limitu bez przekroczenia limitu. Jestem ciekawy, czy ktoś może dostosować limity rekurencji i typy parametrów,
27, float, 24, int*const*
aby zbliżyć się do limitu (lub znaleźć kompilator, który może wydrukować jeszcze dłuższy komunikat o błędzie).Fragmenty komunikatu o błędzie:
2 139 3990 572 bajtów / 211 bajtów = 10 139 291,8źródło
SmileBASIC, 1/1 = 1
Generuje błąd
Syntax Error in 0:1
źródło