Соревнование:
Напишите очень короткую программу, которая при компиляции создает наибольшее количество предупреждений и ошибок компилятора. Это может быть написано на любом языке программирования.
Подсчет очков:
Оценка определяется этим уравнением: errors_and_warnings_length/code_length
. Самый высокий балл выигрывает.
Пример:
Программа на C # class
имеет длину 5 символов и генерирует 3 предупреждения, что составляет оценку (1/5) * 3 = 0,6.
РЕДАКТИРОВАТЬ:
Из-за некоторой путаницы программы должны иметь длину не менее 1 символа. Иначе это получило бы счет бесконечности.
gcc -Wall -pedantic
что сильно отличается от обычного,gcc
отличается отtcc
предположительно другого компилятора c.Ответы:
НКУ, оценка 2 в 200 /36 ≈ 4,5 × 10 58
На самом деле я не закончил компиляцию этого кода, но, основываясь на тестировании и простой математике, он должен дать в общей сложности 2 200
#include nested too deeply
ошибок.Конечно, программа тривиально расширяема. Добавление третьей линии приносит счет до 3 200 /54 ≈ 4,9 × 10 93 . Четыре линии дают 4 200 /72 ≈ 3,6 × 10 118 , и так далее.
источник
#include
], чтобы избежать убегающей рекурсии. Стандарт требует как минимум 15 уровни «.C, 0 символов - Счет = (1/0) * 1 = Бесконечность
генерирует 1 ошибку:
Примечание: http://ideone.com/xdoJyA
источник
GCC, оценка 5586,6 (и более при необходимости)
179 символов, 1000003 предупреждений / ошибок (использование
-Wall
)Конечно, это можно продлить произвольно. Например, использование 10
#define
с вместо 5 и длительность 20 «вызовов» вместо 10 приведет к значению около (20 ** 10) / (179 * 4) = 14301675977,65 (и потребуется довольно много времени для запуска ;)источник
#define X(A) A,A,A,A,A,A,A
иX(X(X(X(X(X(A))))))
вы можете дублировать код гораздо быстрее.GCC дважды, 86
22 символа, 1898 ошибок + предупреждения в моей системе.
Я уверен, что этот подход может быть значительно улучшен путем выбора более длинных файлов с более короткими именами.
источник
/usr/bin/gdb
значительно больше (5,5 млн. против 760 тыс.), но/vmlinuz
на 5,6 млн. может быть вашим лучшим выбором.HQ9 ++, 1 (предел (n + 29) / n)
Далее выдается предупреждение
Warning: this is not a quine
для каждого Q в коде.Малый это хорошо, правда? Хм ...
источник
С, 0,727
11 символов, 5 ошибок, 3 предупреждения, (1/11) * 8 = .727273
источник
NASM, оценка 63/40 * 2 ^ 32 ≈ 2.905 * 10 ^ 19
Будет выводить
c.asm:3: error: label or instruction expected at start of line
2 ^ 64 раза. Опять же, это легко расширяется до гораздо больших результатов.источник
C ++ 98 (211 байт) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Я хотел посмотреть, насколько хорошо я могу сделать в C ++, вообще не используя препроцессор. Эта программа производит 2 139 390 572 байта выходных данных, большая часть которых представляет собой одно сообщение об ошибке.
Ungolfed:
Эта программа работает путем определения рекурсивного структурного шаблона R, который содержит typedef D, содержащий две копии R. Это приводит к тому, что имя типа растет в геометрической прогрессии, которое полностью выводится в сообщении об ошибке. К сожалению, g ++, кажется, задыхается при попытке напечатать сообщение об ошибке длиннее (1 << 31) байта. 2,139,390,572 байта были самыми близкими, я мог добраться до предела, не переходя. Мне интересно, если кто-нибудь может настроить пределы рекурсии и типы параметров
27, float, 24, int*const*
чтобы приблизиться к пределу (или найти компилятор, который может напечатать еще более длинное сообщение об ошибке).Выдержки из сообщения об ошибке:
2 139 390 572 байта / 211 байтов = 10 139 291,8источник
SmileBASIC, 1/1 = 1
Генерирует ошибку
Syntax Error in 0:1
источник