Message d'erreur le plus court


135

Défi

Ecrivez le programme le plus court qui, une fois compilé ou exécuté, génère un message d'erreur fatal plus petit que le programme lui-même. Le message d'erreur peut ne pas être généré par le programme lui-même, tel que celui de Python raise. Une réponse valide doit inclure à la fois le code et le message d'erreur. La réponse valide la plus courte gagne.

Aucun message d'erreur ne compte pas comme un message d'erreur.

Exemple (Lua)

Code (46 octets):

[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Erreur (45 octets):

[string "[..."]:1: unexpected symbol near '['

Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
Dennis

1
@ Dennis Je suppose que c'est une façon de résoudre le problème "OP ne modifie pas les clarifications en question".
Ørjan Johansen

1
Merci d'avoir accepté ma réponse, qui a recueilli le plus grand nombre de votes. Cependant, cela a été marqué code-golf , vous devriez donc accepter cette réponse , qui est la plus courte.
MD XF

@smartpeople est ceci: " __main__.CodeException: Raised an &rror." mon erreur ou est-ce: " Raised an &rror."
FantaC

TrumpScript s'exécute en Chine?
Stan Strum

Réponses:


58

ed , 3 octets

Remarque: la plupart des réponses ignorent la fin de ligne imprimée dans le message d'erreur dans leur nombre. Mais je ne vois rien dans la question qui justifie de l'ignorer, et l'auteur a commenté que la nouvelle ligne devrait être incluse . Donc, à moins que la question ne soit modifiée, je vais l'inclure.

Code (avec une nouvelle ligne):

??

Erreur (avec fin de ligne nouvelle):

?


19
En fait, c'est impossible à battre. : P
totalement humain

1
Est-ce que ed peut faire des tests d'addition et de primalité? Ou n'est-ce pas nécessaire pour ce type de défi?
Stephen

4
@StepHen Oui, il peut effectuer des tests d'addition et de primalité de manière unaire en utilisant l'astuce habituelle regex-back-references.
Anders Kaseorg

1
Très intelligent, mais '?' n'est pas fatal.
Mark Plotnick

2
Comme indiqué dans un drapeau, l'erreur est fatale si le code n'est pas lu par un terminal. Essayez-le en ligne!
Dennis

59

C (Linux moderne), 19 octets

J'aurais fait mon fameux segfault mais totalement humain l'a volé.

main(){longjmp(0);}

Sortie (18 octets):

Segmentation fault

Vous avez actuellement un score plus élevé que moi alors ... gagnant-gagnant?
totalement humain


N'y a-t-il pas d'autres paramètres régionaux avec une version plus courte (pour pouvoir ensuite les utiliser main(){main();})?
12431234123412341234123

@ 12431234123412341234123 Pas que je sache. En outre, il main(){main();}n'est pas garanti que seg-faute.
MD XF

1
@MDXF Il n'y a aucune garantie (et avec l'optimisation activée dans gcc ou clang, cela aboutit dans une boucle sans fin ou ignore l'appel). Mais sur Code Golf, nous avons besoin d’une implémentation qui fonctionne et non d’une garantie.
12431234123412341234123 le

48

Python 2, 35 octets

import sys;sys.tracebacklimit=000;a

Donne une erreur:

NameError: name 'a' is not defined

14
modification de la limite de
traceback

1
C'est malin!
Skyler

34

JavaScript (Firefox), 31 octets

# This is a comment, right? ...

Lance cette erreur:

SyntaxError: illegal character

Testé dans la console de Firefox 54.0.1 sur Windows 7.


26

Python 2 , 87 79 octets

-8 octets grâce à Zacharý et à Erik l'Outgolfer.

from __future__ import braces
#i am most surely seriously actually totallyhuman

Essayez-le en ligne!

Message d'erreur, 78 octets:

En supposant que le code est stocké dans un fichier nommé a.

  File "a", line 1
    from __future__ import braces
SyntaxError: not a chance

C'est en fait un joli petit œuf de Pâques en Python. :RÉ


1
Vous pouvez prendre un nom de fichier à un caractère!
Zacharý

1
En supposant un nom de fichier 1-char, vous pouvez jouer au golf à ce .
Erik the Outgolfer

Heh, gentil. - - -
totallyhuman

1
Mais le message d'erreur doit être plus petit que le programme lui-même ...
Leaky Nun

1
Si vous utilisez IDLE, vous pouvez obtenir \s\sFile "<stdin>", line 1\nSyntaxError: not a chancece qui est seulement 50 octets [ \sest un espace et \nest une nouvelle ligne], de sorte que vous pouvez obtenir un programme de 51 octets ..
boboquack

20

Haskell, 13 octets

main = (main)

Enregistrer sous t.hsou un autre nom à un caractère, compiler avec ghcet exécuter. Message d'erreur (avec fin de ligne nouvelle):

t: <<loop>>

19

Taxi , 38 21 octets

Switch to plan "abc".

Produit:

error: no such label

Essayez-le en ligne!

-17 octets grâce à l'ingénieur Toast

Essaie de passer à "abc", qui n'existe pas. Vous auriez [abc]quelque part.


4
Vous pouvez obtenir 21 octets avec la Switch to plan "abc".production error: no such label. Cela pourrait être l’un des rares défis du code-golf où Taxi bat certaines langues traditionnelles.
Ingénieur Toast

@ IngénieurToast merci, n'a pas pensé à celui-là.
Stephen

18

> <> , 26 octets

>>>>>>>>>>>>>>>>>>>>>>>>>:

Essayez-le en ligne!

Chaque message d'erreur dans Fish est something smells fishy... , de sorte que cela déplace le pointeur suffisamment de fois pour qu'il soit plus long que cela et tente de dupliquer le haut de la pile, qui est vide à ce moment-là.


2
Je l'aime bien, et c'est certainement la plus louche des solutions :-)
Xan-Kun Clark-Davis

@ Xan-KunClark-Davis soupir vous deviez ...: P
HyperNeutrino

18

JavaScript (Firefox), 21 octets

(a=null)=>a.charAt(1)

Erreur (20 octets) :TypeError: a is null


2
D'oh! Je savais qu'il y en avait un plus court ...
ETHproductions

J'ai eu la même idée, est venu avec un = null; a.x01234567890 Même nombre d'octets
RuteNL

16

Shell System V, 25 octets

mount /dev/hda1 /mnt/hda1

Message d'erreur (23 octets):

mount: not a typewriter

"Pas une machine à écrire" ou ENOTTYest un code d'erreur défini dans errno.hles systèmes Unix. Ceci est utilisé pour indiquer qu'un numéro ioctl (contrôle d'entrée / sortie) non valide a été spécifié dans un appel système ioctl. Sur mon système, dans /usr/include/asm-generic/errno-base.h, je peux trouver cette ligne:

#define ENOTTY          25      /* Not a typewriter */

Dans les versions 6 et antérieures d'UNIX, les E / S étaient limitées aux terminaux connectés en série, tels qu'un télétype (TTY). Celles-ci étaient généralement gérées via les appels système gttyet stty. Si l’on essayait d’utiliser l’un ou l’autre de ces appels système sur un appareil non terminal,ENOTTY était généré.

De nos jours, il n’est naturellement pas nécessaire d’utiliser un téléscripteur. Quand gttyet sttyont été remplacés par ioctl, a ENOTTYété conservé. Certains systèmes affichent toujours ce message. mais la plupart disent "ioctl inapproprié pour device" à la place.


S'il vous plaît expliquer ...
Mega Man

@MegaMan Mise à jour avec explication.
MD XF

1
Vote positif pour une explication réellement éclairante.
Xan-Kun Clark-Davis

11

QBasic, 11 octets

Il y a deux solutions de 11 octets dans QBasic, l'une d'entre elles pouvant être jouée plus loin. Le message d'erreur le plus court que QBasic a est overflowet peut être déclenché en tant que tel:

i%=i%+32677

Cela jette overflowparce que le maximum pour un entier ( i%) est 32676. Je ne pouvais pas jouer au 32677golf sans QBasic pour lancer ceci trop longtemps ...

Une autre erreur, à 11 octets, serait out of data. QBasic contient des DATAinstructions qui stockent des données dans le programme, auxquelles les READinstructions peuvent accéder ultérieurement . L'émission de plus de READs que de DATAs provoque l'erreur:

READ a$ '--

Notez que l’instruction est complétée par un commentaire pour l’obtenir à la longueur du message d’erreur. Oui, j'ai un message d'erreur avec un programme plus court et un programme avec un message d'erreur plus court ...


11

C (Linux moderne), 19 octets

Je l'ai suggéré dans le chat, mais personne n'a pris l'opportunité. : P crédit à la réponse hilarante de MD XF .

main(){puts('s');;}

Message d'erreur, 18 octets

Segmentation fault

1
Mais le message d'erreur doit être plus petit que le programme lui-même ...
Leaky Nun

Le nombre d'octets était foutu, mon mauvais.
totalement humain

9
Il s'agit d'un message générique imprimé par le shell lorsque le sous-processus se termine avec le code de sortie 139. Le programme C lui-même ne produit aucun message d'erreur.
Dennis

7
@Dennis Le code de sortie 139 est en réalité un autre mensonge constitué par le shell. Unix distingue le signal 11 ( W_EXITCODE(0, 11) == 11) du code de sortie 139 ( W_EXITCODE(139, 9) == 139 << 8). Les coquilles sont définies de manière $?non surjective WIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128, mais la plupart des langues exposent la différence.
Anders Kaseorg

2
@Anders Est WIFEXITED(wstatus)équivalent à DIVORCE(alimony)par hasard?
Janus Bahs Jacquet le

11

Javascript (V8), 24 octets

decodeURIComponent('%');

Erreur, 23 octets:

URIError: URI malformed

Testé sur Nodejs v6.11.0 et Google Chrome v59.0.3071.115 .

Essayez-le en ligne!

Notez que TIO développe le message d'erreur.


5
Bienvenue chez PPCG!
Stephen


10

PowerShell , 215 189 octets

[]
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Essayez-le en ligne!

PowerShell a donc ... des messages d'erreur ... verbeux. En outre, la plupart des messages d'erreur non syntaxiques sont des exceptions d'exécution, ce qui signifie qu'elles ne sont pas fatales, ce qui réduit le problème à la nécessité de rechercher une erreur d'analyse syntaxique courte.

Je pense que c'est l'une des plus courtes, sinon la plus courte, @TessellatingHeckler a démontré qu'il s'agissait de l'erreur d'analyse la plus courte, et qu'elle pèse toujours en 188octets uniquement pour le message d'erreur. Nous avons donc besoin d'ajouter assez de 1s pour atteindre les 189octets de "code".

Exécuter ceci localement, c:\a.ps1par exemple, réduira le nombre d'octets d'une poignée car il s'agit simplement d'un chemin de fichier plus court, mais il n'est pas disponible sur TIO.

Produit une erreur:

At /tmp/home/.code.tio.ps1:1 char:2
+ []
+  ~
Missing type name after '['.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingTypename

On m'a posé trois questions dans les commentaires, dont l'une que vous avez posée, mais les deux que vous n'avez pas posées à la fois s'appliquaient à votre réponse et non la vôtre.
user72528

@ user72528 Ouais, j'ai trouvé ça amusant aussi.
AdmBorkBork

Vous pouvez utiliser un nom de fichier à un caractère!
Zacharý

1
@ Zacharý je peux, mais ce n'est pas reproductible sur TIO en raison de la manière dont TIO gère le sandboxing. Je préfère le garder utilisable sur TIO que de sauvegarder quelques octets.
AdmBorkBork

2
Qu'en est-il de []ce qui ressemble à une erreur plus courte Missing type name after '['et selon exactement comment vous comptez pourrait être environ 190 - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (tiré de la chaîne d' analyse ici qui ressemble à l'erreur d'analyse la plus courte pour moi ([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc).
TessellatingHeckler

9

Commodore 64 Basic, 15 octets

?SYNTAX   ERROR

Produit

?SYNTAX  ERROR

(Notez deux espaces dans le message d'erreur, où le programme en a trois)

?SYNTAX ERRORest ?VERIFY ERRORle troisième message d'erreur le plus court pouvant être généré par C64 Basic, et le plus court pouvant être déclenché de manière fiable par un code (le message le plus court BREAK IN 1, requiert une interaction de l'utilisateur, ?LOAD ERRORrequiert une bande ou une disquette défectueuse, et ?VERIFY ERRORrequiert la présence de une disquette ou une bande contenant un fichier ne correspondant pas au programme en RAM).


1
Ha, je n'ai même pas vu cela quand j'ai posté le mien . Toujours bon de voir un autre utilisateur BASIC ... +1
MD XF

8

R , 29 28 octets

-1 octet grâce à JarkoDubbeldam

a #abcdefghijklmnopqrstuvwxy

Lance l'erreur Error: object 'a' not foundqui est 27 octets.

Essayez-le en ligne!


2
a #abcdefghijklmnopqrstuvwxyL'erreur Error: object 'a' not foundest un octet plus court.
JAD

@JarkoDubbeldam merci.
Giuseppe

7

Ruby ( 33 32 octets)

32 octets

&
#abcdefghijklmnopqrstuvwxyz12

Lance l'erreur (en supposant que dans un fichier nommé "a"):

31 octets

a:1: syntax error, unexpected &

Edit : Rasé un octet en utilisant &au lieu de<< grâce à Eric , qui a également mis au point une solution Ruby encore plus courte: http://codegolf.stackexchange.com/a/135087/65905


1
Bienvenue chez PPCG!
Martin Ender

@ EricDuminil nice! Je pensais que tous les opérateurs à caractère unique étaient cités dans le message d'erreur, mais vous avez raison: &non. Soigné! Aussi, bonne trouvaille avec l'évasion hexagonale. Je me débattais pour trouver un message d'erreur irrécupérable plus court et sans trace de pile, autre qu'une erreur de syntaxe.
ameketa

@ameketa: En fait, j'ai écrit un programme bruteforce et testé tous les programmes Ruby possibles de 1, 2 et 3 octets: D Merci pour le lien.
Eric Duminil

5

Brainf ** k, 17 octets, cet interprète

+++++++++++++++<<

Brainf ** k est un langage si simple que presque tous les interprètes ont un message d'erreur différent. Celui-ci est utilisé Memory Error: -1lorsque le pointeur est trop déplacé vers la gauche et que vous tentez une autre opération.


Je suppose que choisir un interprète fait tout autant partie du défi que choisir une langue.
user72528

@ user72528 Eh bien, ici, nous définissons une langue par son interprète. Ce défi consiste donc à choisir l'interprète avec les messages d'erreur les plus courts :)
HyperNeutrino

1
Qui bat le cerveau? Personne? Bien.
Erik the Outgolfer

La solution imbattable serait une solution de deux octets qui provoque une erreur de 1 caractère.
Zacharý

@ Zacharý Certainement lol
HyperNeutrino

5

Common Lisp , 20 octets

(/ 1 0))))))))))))))

Essayez-le en ligne!

Message d'erreur

/: division by zero

11
o_o parenthèses déséquilibrées dans Lisp ... vous apprenez quelque chose de nouveau chaque jour.
Zacharý

1
Si vous remplacez le 0 par le 1, il générera une erreur sur les parenthèses, mais il n'ira pas aussi loin avec le 0. Je devais simplement ajouter des caractères plus longs que le message
Cheldon

5

TryAPL, 11 octets

Code (11):

'abcdefghij

Erreur (10):

open quote

5

Javascript (Firefox), 29 27 octets

new Date('-').toISOString()

jette RangeError: invalid datequi est de 24 octets. Testé sur Firefox 54.0.1 sur Windows 10.


5

ZX Spectrum Basic, 9 octets

RUN USR 8

produit:

Message d'erreur

Explication:

Je compte (exceptionnellement) la représentation ASCII du programme à des fins de longueur, y compris en fin de ligne (ce n'est pas vraiment important, car nous pourrions toujours ajouter un programme plus court avec des espaces).

En règle générale, les messages d'erreur ZX Spectrum sont plus longs et plus utiles que cela - la routine ROM à 0x0008 prévoit le code d'erreur suivant le code machine appel à RST 8, et va chercher un certain octet aléatoire (déterministe) du ROM, qui produit ce message d'erreur absurde. M. 5est le numéro d'erreur,, est ajouté par la routine d'impression d'erreur et 0:1constitue la ligne: position de commande de l'erreur.


En fait, il s’agit normalement de 9 octets, car le ZX Spectrum n’évalue pas les nombres au moment de l’exécution. Il existe donc 6 octets cachés qui lui permettent d’accéder directement à la représentation binaire de 8.
Neil


4

Perl 5 , 5 octets

die$/

Affiche une nouvelle ligne, pour un octet.

Essayez-le en ligne!


._. Maintenant ... si seulement les erreurs Perl sur le fichier vide!
Zacharý

4
Attendez, est-ce une violation du "ne peut pas être généré par le programme lui-même"? Je n'ai pas compris ce que disait cette règle.
Aschepler

1
@ Zacharý ... donnant un message d'erreur avec une longueur totale négative?
Aschepler

1
Cela peut être invalide ... ou pas, cela dépend si le PO signale l' erreur ou le message d'erreur
Zacharý

^ clarification: si un programme fait une erreur directement ou crée un message d'erreur directement
Zacharý

4

Perl 5 , 11 octets

Puisque je ne sais pas si mon autre réponse obéit aux règles du défi, voici une autre alternative.

#line 0
die

Erreur de sortie:

Died.

Avec une nouvelle ligne de fin, pour 6 octets.

Essayez-le en ligne!

Pour une raison quelconque, la fonction interne de l'interpréteur Perl Perl_mess_svcontient:

if (CopLINE(cop))
    Perl_sv_catpvf(aTHX_ sv, " at %s line %" IVdf,
                    OutCopFILE(cop), (IV)CopLINE(cop));

CopLINE(cop)obtient le numéro de ligne du contexte de code actuel. Donc, si ce numéro de ligne est évalué à zéro, Perl ignore l'ajout du " at <filename> line <n>"message d'erreur habituel .


1
Cela ne semble ni valable pour moi. IIRC dieest pour que le programme se termine .
sergiol

1
En quoi est-ce différent du python raise?
Eric Duminil

L’opérateur a peut-être fait référence à la génération de l’ erreur ou au message d’erreur . J'ai commenté lequel il voulait dire.
Zacharý

4

ArnoldC , 150 octets

IT'S SHOWTIME
HEY CHRISTMAS TREE b
YOU SET US UP 0
GET TO THE CHOPPER b
HERE IS MY INVITATION b
HE HAD TO SPLIT 0
ENOUGH TALK
YOU HAVE BEEN TERMINATED

Essayez-le en ligne!

L'erreur est de 94 octets (y compris le saut de ligne final):

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at code.main(Hello.java)

Conservé parce que je pense que c'est plus drôle - spoiler: c'était ces farces adolescentes dang.

ArnoldC , 280 octets

IT'S SHOWTIME
HEY CHRISTMAS TREE BRBDoorBetterNotBeThosePeskyTeenagePranksters
YOU SET US UP 0
GET YOUR ASS TO MARS BRBDoorBetterNotBeThosePeskyTeenagePranksters
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
YOU HAVE BEEN TERMINATED

Pseudocode:

start program
new variable
set to 0
set new variable to output from function
call function
take input
end program

Essayez-le en ligne!

Génère une erreur "pas d'entrée". (Presque toutes les autres erreurs dans ArnoldC incluent un gros morceau de passe-partout):

279 octets (y compris les retours à la ligne):

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at code.main(Hello.java)

4

TI-Basic, 9 octets

Les messages d'erreur les plus courts sont 8 octets chacun: ERR:DATE, ERR:MODE, ERR:STAT, et ERR:ZOOM. Je n'ai pas envisagé, ERR:DATEcar cela ne fonctionne pas sur des modèles sans horloge interne. Aussi, je ne suis pas allé pourERR:ZOOM parce que cela semblait trop difficile à déclencher.

Programme (9 octets):

Seq:DrawInv X:::::

Message d'erreur: ERR:MODE(8 octets)

Programme (9 octets):

median({1},{0::

Message d'erreur: ERR:STAT(8 octets)


3

Ruby, 25 octets

C'était un exercice amusant, merci! Il existe probablement un moyen d’obtenir un message d’erreur plus court avec un SegFault, mais je n’en ai trouvé aucun.

/\x
# Invalid hexa regexp

Message d'erreur:

a:1: invalid hex escape

24 octets, y compris une fin de ligne.

Essayez-le en ligne!

Ruby, 26 octets

Voici ma réponse précédente:

08
# No 8 allowed in octal

Message d'erreur:

a:1: Invalid octal digit

25 octets, y compris un retour à la ligne.


Je pense que vous devriez séparer vos réponses.
Solomon Ucko

@SolomonUcko: Une raison pour laquelle? Il y a déjà beaucoup de réponses. Je voulais juste laisser une trace de ma réponse précédente. Les utilisateurs modifient généralement le nombre d'octets avec <s> 26 </ s> 25, mais il s'agit souvent de modifications mineures.
Eric Duminil

En fait, je ne sais pas pourquoi j'ai dit ça, alors tant pis.
Solomon Ucko

3

C ++ (sur macOS High Sierra bêta), 23 caractères

int main(){*(int*)0=0;}

Sortie: (22 caractères)

Segmentation fault: 11

Je ne me souviens pas si les versions précédentes de macOS fournissaient la Segmentation fault (core dumped)réponse plus traditionnelle , mais l'ajout d'espaces dans le code pour compléter cette opération est assez simple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.