Le défi:
Ecrivez un programme très court qui, une fois compilé, crée le plus grand nombre d’avertissements et d’erreurs du compilateur. Il peut être écrit dans n’importe quel langage de programmation.
Notation:
Le score est déterminé par cette équation: errors_and_warnings_length/code_length
. Le score le plus élevé gagne.
Exemple:
Le programme C # class
longueur de 5 caractères et génère 3 avertissements, soit un score de (1/5) * 3 = 0,6.
MODIFIER:
En raison d'une certaine confusion, les programmes doivent durer au moins 1 caractère. Sinon, cela donnerait un score d'infini.
gcc -Wall -pedantic
est très différent de plain ol`gcc
est différent detcc
probablement un autre compilateur C.Réponses:
GCC, partition 2 200 /36 ≈ 4,5 × 10 58
Je n'ai pas encore fini de compiler ce code, mais d'après des tests et des calculs mathématiques simples, il devrait générer un total de 2 200
#include nested too deeply
erreurs.Bien sûr, le programme est trivialement extensible. L' ajout d' une troisième ligne amène le score à 3 200 /54 ≈ 4,9 × 10 93 . Quatre lignes donnent 4 200 /72 ≈ 3,6 × 10 118 , et ainsi de suite.
la source
#include
], pour éviter une récursion effrénée. La norme requiert au moins 15 les niveaux."C, 0 caractères - Score = (1/0) * 1 = Infini
génère 1 erreur:
Remarque: http://ideone.com/xdoJyA
la source
GCC, score 5586.6 (et plus si nécessaire)
179 caractères, 1000003 avertissements / erreurs (utilisation
-Wall
)Cela peut être étendu arbitrairement, bien sûr. Par exemple, utiliser 10
#define
s au lieu de 5 et une longueur de 20 "appels" au lieu de 10 donnerait un score d'environ (20 ** 10) / (179 * 4) = 14301675977.65 (et prendrait un certain temps à courir ;)la source
#define X(A) A,A,A,A,A,A,A
etX(X(X(X(X(X(A))))))
vous pouvez dupliquer le code beaucoup plus rapidement.GCC deux fois, 86
22 caractères, 1898 erreurs + avertissements sur mon système.
Je suis sûr que cette approche peut être grandement améliorée en choisissant des fichiers plus longs avec des noms plus courts.
la source
/usr/bin/gdb
est nettement plus grande (5,5 M contre 760 K), mais/vmlinuz
à 5,6 M pourrait être votre meilleur pari.HQ9 ++, 1 (limite de (n + 29) / n)
Ce qui suit émet l'avertissement
Warning: this is not a quine
pour chaque Q dans le code.Petit c'est bien, non? Hmm ...
la source
C, .727
11 caractères, 5 erreurs, 3 avertissements, (1/11) * 8 = .727273
la source
MSNA, score de 63/40 * 2 ^ 32 ≈ 2,905 * 10 ^ 19
Sortie
c.asm:3: error: label or instruction expected at start of line
2 ^ 64 fois. Encore une fois, ceci est facilement extensible à des sorties beaucoup plus grandes.la source
C ++ 98 (211 octets) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Je voulais voir comment je pouvais faire en C ++ sans utiliser le préprocesseur. Ce programme produit 2 139 390 572 octets de sortie, dont la plupart sont un seul message d'erreur.
Ungolfed:
Ce programme fonctionne en définissant un modèle de structure récursif R qui contient une typedef D contenant deux copies de R. Il en résulte un nom de type à croissance exponentielle, qui est imprimé intégralement dans le message d'erreur. Malheureusement, g ++ semble s’étouffer en essayant d’imprimer un message d’erreur de plus de (1 << 31) octets. 2 139 390 572 octets était le nombre le plus proche auquel je pouvais me rendre sans dépasser la limite. Je suis curieux de savoir si quelqu'un peut ajuster les limites de récursivité et les types de paramètres
27, float, 24, int*const*
pour se rapprocher de la limite (ou trouver un compilateur pouvant imprimer un message d'erreur encore plus long).Extraits du message d'erreur:
2 139 390 592 octets / 211 octets = 10 139 291,8la source
SmileBASIC, 1/1 = 1
Génère l'erreur
Syntax Error in 0:1
la source