Messaggio di errore più breve


135

Sfida

Scrivi il programma più breve che, quando compilato o eseguito, produce un messaggio di errore fatale più piccolo del programma stesso. Il messaggio di errore potrebbe non essere generato dal programma stesso, ad esempio Python raise. Una risposta valida deve includere sia il codice che il messaggio di errore. Vince la risposta più breve valida.

Nessun messaggio di errore non conta come messaggio di errore.

Esempio (Lua)

Codice (46 byte):

[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Errore (45 byte):

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

I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Dennis,

1
@Dennis Immagino che sia un modo per risolvere il problema "L'OP non modifica i chiarimenti in questione".
Ørjan Johansen,

1
Grazie per aver accettato la mia risposta, che ha ottenuto il maggior numero di voti; tuttavia, questo è stato taggato code-golf , quindi dovresti accettare questa risposta , che è la più breve.
MD XF,

@smartpeople è questo: " __main__.CodeException: Raised an &rror." errore mio o è questo: " Raised an &rror."
FantaC

TrumpScript in esecuzione in Cina?
Stan Strum,

Risposte:


58

ed , 3 byte

Nota: la maggior parte delle risposte qui sta ignorando la nuova riga finale stampata come parte del messaggio di errore nel loro conteggio. Ma non vedo nulla nella domanda che giustifichi ignorarlo, e l'autore ha commentato che la nuova riga dovrebbe essere inclusa . Quindi, a meno che la domanda non sia cambiata, la includerò.

Codice (con la nuova riga finale):

??

Errore (con la nuova riga finale):

?


19
In realtà, questo è impossibile da battere. : P
totalmente umano il

1
Può fare test di addizione e primalità? O non è necessario per questo tipo di sfida?
Stephen,

4
@StepHen Sì, può eseguire test di addizione e primalità in unario tramite il solito trucco regex-with-backreferences.
Anders Kaseorg,

1
Molto intelligente, ma "?" non è fatale.
Mark Plotnick,

2
Come sottolineato in un flag, l'errore è fatale se il codice non viene letto da un terminale. Provalo online!
Dennis,

59

C (Linux moderno), 19 byte

Avrei fatto il mio famoso segfault ma lo avrei rubato totalmente.

main(){longjmp(0);}

Uscita (18 byte):

Segmentation fault

Al momento hai un punteggio più alto di me, quindi ... Win-win?
totalmente umano il


Non ci sono altre impostazioni locali con una versione più breve (in modo da poterle utilizzare main(){main();})?
12431234123412341234123

@ 12431234123412341234123 Non che io sappia. Inoltre, main(){main();}non è garantito il seg-fault.
MD XF,

1
@MDXF Non esiste alcuna garanzia (e con l'ottimizzazione abilitata in gcc o clang, finisce in un ciclo infinito o ignora la chiamata). Ma su Code Golf abbiamo bisogno di un'implementazione funzionante, non una garanzia.
12431234123412341234123

48

Python 2, 35 byte

import sys;sys.tracebacklimit=000;a

Dà errore:

NameError: name 'a' is not defined

14
modifica del limite di traceback ... bello
HyperNeutrino

1
Questo è intelligente!
Skyler,

34

JavaScript (Firefox), 31 byte

# This is a comment, right? ...

Genera questo errore:

SyntaxError: illegal character

Testato nella console di Firefox 54.0.1 su Windows 7.


26

Python 2 , 87 79 byte

-8 byte grazie a Zacharý ed Erik the Outgolfer.

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

Provalo online!

Messaggio di errore, 78 byte:

Supponendo che il codice sia memorizzato in un file denominato a.

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

Questo è in realtà un simpatico piccolo uovo di Pasqua in Python. : D


1
Puoi assumere un nome di file con un carattere!
Zacharý,

1
Supponendo un nome file di 1 carattere, puoi giocare a questo .
Erik the Outgolfer,

Heh, carino. - - -
totalmente umano il

1
Ma il messaggio di errore deve essere più piccolo del programma stesso ...
Leaky Nun,

1
Se usi IDLE puoi ottenere \s\sFile "<stdin>", line 1\nSyntaxError: not a chanceche è solo 50 byte [ \sè uno spazio ed \nè una nuova riga], quindi puoi ottenere un programma da 51 byte ..
boboquack,

20

Haskell, 13 byte

main = (main)

Salva come t.hso un altro nome di un carattere, compila ghced esegui. Messaggio di errore (con la nuova riga finale):

t: <<loop>>

19

Taxi , 38 21 byte

Switch to plan "abc".

produce:

error: no such label

Provalo online!

-17 byte grazie all'ingegnere Toast

Cerca di passare a "abc", che non esiste. Avresti da [abc]qualche parte.


4
È possibile ottenere fino a 21 byte con la Switch to plan "abc".produzione error: no such label. Questa potrebbe essere una delle poche sfide del code-golf in cui Taxi batte alcune lingue tradizionali.
Ingegnere Toast,

@EngineerToast grazie, non ci ho pensato.
Stephen,

18

> <> , 26 byte

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

Provalo online!

Ogni messaggio di errore in Fish è something smells fishy..., quindi questo sposta il puntatore giusto abbastanza volte per essere più lungo di quello e tenta di duplicare la parte superiore dello stack, che al momento è vuota.


2
Mi piace, ed è sicuramente la più sospetta tra tutte le soluzioni :-)
Xan-Kun Clark-Davis,

@ Xan-KunClark-Davis sospiro che
dovevi

18

JavaScript (Firefox), 21 byte

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

Errore (20 byte) :TypeError: a is null


2
D'oh! Sapevo che ce
n'era

Ho avuto la stessa idea, mi è venuta in mente una = null; a.x01234567890 Stessa quantità di byte
RuteNL

16

Shell di sistema V, 25 byte

mount /dev/hda1 /mnt/hda1

Messaggio di errore (23 byte):

mount: not a typewriter

"Not a typewriter" o ENOTTYè un codice di errore definito nei errno.hsistemi Unix. Viene utilizzato per indicare che un numero ioctl (controllo input / output) non valido è stato specificato in una chiamata di sistema ioctl. Sul mio sistema, in /usr/include/asm-generic/errno-base.h, posso trovare questa riga:

#define ENOTTY          25      /* Not a typewriter */

Nella versione 6 UNIX e precedenti, l'I / O era limitato ai dispositivi terminali connessi in serie, come un tipo di telefono (TTY). Questi erano generalmente gestiti tramite le chiamate di sistema gttye stty. Se si dovesse provare a utilizzare una di queste chiamate di sistema su un dispositivo non terminale, ENOTTYsarebbe stato generato.

Oggi, naturalmente, non è necessario utilizzare un teletipo. Quando gttye sttysono stati sostituiti ioctl, è ENOTTYstato mantenuto. Alcuni sistemi mostrano ancora questo messaggio; ma la maggior parte dice invece "ioctl inappropriato per dispositivo".


Per favore, spiega ...
Mega Man,

@MegaMan Aggiornato con spiegazione.
MD XF,

1
Voto per una spiegazione davvero illuminante.
Xan-Kun Clark-Davis,

11

QBasic, 11 byte

Esistono due soluzioni di 11 byte in QBasic, una delle quali potrebbe essere ulteriormente migliorata. Il messaggio di errore più breve che ha QBasic è overflowe può essere attivato come tale:

i%=i%+32677

Questo genera overflowperché il massimo per un numero intero ( i%) è 32676. Non avrei potuto giocare a 32677golf senza che QBasic lanciasse questo a lungo ...

Un altro errore, a 11 byte, sarebbe out of data. QBasic contiene DATAistruzioni che memorizzano i dati nel programma, a cui è possibile accedere in seguito tramite READistruzioni. Emettere più READs che DATAs causa l'errore:

READ a$ '--

Si noti che l'istruzione è riempita con un commento per ottenere fino alla lunghezza del messaggio di errore. Sì, ho un messaggio di errore con un programma più breve e un programma con un messaggio di errore più breve ...


11

C (Modern Linux), 19 byte

L'ho suggerito in chat, ma nessuno ha colto l'occasione. : P Ringraziamo la risposta esilarante di MD XF .

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

Messaggio di errore, 18 byte

Segmentation fault

1
Ma il messaggio di errore deve essere più piccolo del programma stesso ...
Leaky Nun,

I conteggi dei byte sono stati rovinati, mio ​​male.
totalmente umano il

9
Questo è un messaggio generico stampato dalla shell quando il sottoprocesso termina con il codice di uscita 139. Il programma C stesso non produce alcun messaggio di errore.
Dennis,

7
@Dennis Il codice di uscita 139 è in realtà un'altra bugia inventata dalla shell. Unix distingue tra segnale 11 ( W_EXITCODE(0, 11) == 11) e codice di uscita 139 ( W_EXITCODE(139, 9) == 139 << 8). Le conchiglie sono impostate in modo $?non suriettivo WIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128, ma la maggior parte delle lingue rivela la differenza.
Anders Kaseorg,

2
@Anders È WIFEXITED(wstatus)equivalente per DIVORCE(alimony)caso?
Janus Bahs Jacquet,

11

Javascript (V8), 24 byte

decodeURIComponent('%');

Errore, 23 byte:

URIError: URI malformed

Testato su Nodejs v6.11.0 e Google Chrome v59.0.3071.115 .

Provalo online!

Si noti che TIO espande il messaggio di errore.


5
Benvenuti in PPCG!
Stephen,


10

PowerShell , 215 189 byte

[]
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Provalo online!

Quindi, PowerShell ha messaggi di errore ... verbosi ... Inoltre, la maggior parte dei messaggi di errore non di sintassi sono eccezioni di runtime, il che significa che non sono fatali, il che riduce questo problema alla necessità di trovare un breve errore di analisi.

Penso che questo sia uno dei più brevi, se non il più breve, @TessellatingHeckler ha dimostrato che questo è l'errore di analisi più breve e pesa ancora in 188byte solo per il messaggio di errore. Quindi abbiamo sostanzialmente bisogno di aggiungere abbastanza 1s per raggiungere 189byte di "codice".

Eseguendolo localmente, c:\a.ps1ad esempio, ridurrà il numero di byte di una manciata in quanto è solo un percorso di file più breve, ma non è disponibile su TIO.

Produce errore:

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

Mi sono state poste tre domande nei commenti, una delle quali tu mi hai fatto, ma le due che non hai fatto sono state entrambe applicate alla tua risposta, e non alla tua.
user72528,

@ user72528 Sì, l'ho trovato anche divertente.
AdmBorkBork,

È possibile utilizzare un nome file con un solo carattere!
Zacharý,

1
@ Zacharý Posso, ma non è riproducibile su TIO a causa di come TIO gestisce il sandboxing. Preferisco mantenerlo utilizzabile su TIO piuttosto che risparmiare qualche byte.
AdmBorkBork,

2
Che ne dite []che sembra un errore più breve Missing type name after '['e che dipende esattamente da come contate potrebbe essere circa 190 - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (preso dalle stringhe di parser qui che mi sembra l'errore di parser più breve ([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc).
TessellatingHeckler,

9

Commodore 64 Basic, 15 byte

?SYNTAX   ERROR

produce

?SYNTAX  ERROR

(Nota due spazi nel messaggio di errore, in cui il programma ha tre)

?SYNTAX ERRORè associato con ?VERIFY ERRORil terzo messaggio di errore più breve che può produrre C64 Basic e il più breve che può essere attivato in modo affidabile dal codice (il messaggio più breve BREAK IN 1, richiede l'interazione dell'utente, mentre ?LOAD ERRORrichiede un nastro o un disco floppy difettoso e ?VERIFY ERRORrichiede la presenza di un floppy o un nastro contenente un file che non corrisponde al programma nella RAM).


1
Ah, non l'ho nemmeno visto quando ho pubblicato il mio . Sempre bello vedere un altro utente BASIC ... +1
MD XF

8

R , 29 28 byte

-1 byte grazie a JarkoDubbeldam

a #abcdefghijklmnopqrstuvwxy

Genera l'errore Error: object 'a' not foundche è di 27 byte.

Provalo online!


2
a #abcdefghijklmnopqrstuvwxyL 'errore Error: object 'a' not foundè più breve di un byte.
JAD,

@JarkoDubbeldam grazie.
Giuseppe,

7

Rubino ( 33 32 byte)

32 byte

&
#abcdefghijklmnopqrstuvwxyz12

Genera l'errore (presupponendo in un file denominato "a"):

31 byte

a:1: syntax error, unexpected &

Modifica : rasato un byte usando &invece di <<grazie a Eric , che ha anche trovato una soluzione Ruby ancora più breve: http://codegolf.stackexchange.com/a/135087/65905


1
Benvenuti in PPCG!
Martin Ender,

@EricDuminil nice! Ho pensato che tutti gli operatori a singolo carattere fossero citati nel messaggio di errore, ma hai ragione: &non lo è. Neat! Inoltre, buona scoperta con la fuga esadecimale. Avevo difficoltà a trovare un messaggio di errore fatale più breve e senza stack, oltre a un errore di sintassi.
ameketa,

@ameketa: In realtà ho scritto un programma bruteforce e testato ogni possibile programma Ruby da 1, 2 e 3 byte: D Grazie per il link.
Eric Duminil,

5

Brainf ** k, 17 byte, questo interprete

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

Brainf ** k è un linguaggio così semplice che quasi tutti gli interpreti hanno un messaggio di errore diverso. Questo viene utilizzato Memory Error: -1per quando il puntatore viene spostato troppo a sinistra e si tenta un'altra operazione


Immagino che scegliere un interprete sia parte della sfida quanto scegliere una lingua.
user72528,

@ user72528 Bene, qui definiamo una lingua dal suo interprete, quindi questa sfida riguarda un po 'la scelta dell'interprete con i messaggi di errore più brevi :)
HyperNeutrino,

1
Chi batte Brainfuck? Nessuno? Tutto a posto.
Erik the Outgolfer,

La soluzione imbattibile sarebbe una soluzione a due byte che causa un errore di 1 carattere.
Zacharý,

@ Zacharý Certamente lol
HyperNeutrino il

5

Lisp comune , 20 byte

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

Provalo online!

Messaggio di errore

/: division by zero

11
o_o parentesi sbilanciate in Lisp ... impari qualcosa di nuovo ogni giorno.
Zacharý,

1
Se sostituisci lo 0 con 1, si verificherà un errore sulle parentesi ma non arriva così lontano con 0. Ho solo bisogno di aggiungere caratteri più lunghi del messaggio
Cheldon,

5

TryAPL, 11 byte

Codice (11):

'abcdefghij

Errore (10):

open quote

5

Javascript (Firefox), 29 27 byte

new Date('-').toISOString()

genera RangeError: invalid dateche è di 24 byte. Testato su Firefox 54.0.1 su Windows 10.


5

ZX Spectrum Basic, 9 byte

RUN USR 8

produce:

Messaggio di errore

Spiegazione:

Sto (eccezionalmente) contando la rappresentazione ASCII del programma per scopi di lunghezza, inclusa la fine della linea (non è molto importante, dato che potremmo sempre riempire un programma più corto di spazi).

Di solito, i messaggi di errore di ZX Spectrum sono più lunghi e più utili di questo: la routine ROM su 0x0008 prevede il codice di errore dopo la chiamata del codice macchina a RST 8. E recupera alcuni byte casuali (deterministici) dalla ROM, che produce questo messaggio di errore senza senso M. 5è il numero di errore, ,viene aggiunto dalla routine di stampa dell'errore ed 0:1è la riga: posizione di comando dell'errore.


In realtà si tratta comunque di 9 byte normalmente, perché ZX Spectrum non valuta i numeri in fase di esecuzione, quindi in realtà ci sono 6 byte nascosti che gli consentono di accedere direttamente alla rappresentazione binaria di 8.
Neil,


4

Perl 5 , 5 byte

die$/

Emette una nuova riga, per un byte.

Provalo online!


._. Ora ... se solo errori perl sul file vuoto!
Zacharý,

4
Aspetta, si tratta di una violazione del "potrebbe non essere generato dal programma stesso"? Non capivo cosa stesse dicendo quella regola.
aschepler,

1
@ Zacharý ... dando un messaggio di errore con uno negativo di lunghezza totale?
aschepler,

1
Questo potrebbe non essere valido ... oppure no, dipende dal fatto che l'OP significasse l' errore o il messaggio di errore
Zacharý

^ chiarimento: se un programma
sbaglia

4

Perl 5 , 11 byte

Dato che non sono chiaro se la mia altra risposta obbedisca alle regole della sfida, ecco un'altra alternativa.

#line 0
die

Uscita errore:

Died.

Con una riga finale, per 6 byte.

Provalo online!

Per qualche motivo la funzione interna dell'interprete Perl Perl_mess_svcontiene:

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

dove CopLINE(cop)ottiene il numero di riga del contesto di codice corrente. Quindi, se quel numero di riga risulta pari a zero, Perl salta l'aggiunta del solito " at <filename> line <n>"al messaggio di errore.


1
Non mi sembra né valido. IIRC dieè per l'uscita del programma.
sergiol,

1
In che modo è diverso da Python raise?
Eric Duminil,

Bene, l'OP potrebbe aver fatto riferimento a generare l' errore o il messaggio di errore . Ho commentato quale intendesse.
Zacharý,

4

ArnoldC , 150 byte

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

Provalo online!

L'errore è di 94 byte (inclusa la nuova riga finale):

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

Conservato perché penso che sia più divertente - spoiler: erano quei pericoli burloni adolescenti.

ArnoldC , 280 byte

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

pseudocodice:

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

Provalo online!

Genera un errore "nessun input". (Quasi tutti gli altri errori in ArnoldC includono un grosso pezzo di boilerplate):

279 byte (inclusa la nuova riga finale):

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 byte

I messaggi di errore più brevi sono 8 byte ciascuno: ERR:DATE, ERR:MODE, ERR:STAT, e ERR:ZOOM. Non ho considerato ERR:DATEperché non funziona sui modelli senza un orologio interno. Inoltre, non ci sono andato ERR:ZOOMperché sembrava troppo difficile da innescare.

Programma (9 byte):

Seq:DrawInv X:::::

Messaggio di errore: ERR:MODE(8 byte)

Programma (9 byte):

median({1},{0::

Messaggio di errore: ERR:STAT(8 byte)


3

Rubino, 25 byte

È stato un esercizio divertente, grazie! Probabilmente c'è un modo per ottenere un messaggio di errore più breve con un SegFault, ma non sono riuscito a trovarne.

/\x
# Invalid hexa regexp

Messaggio di errore:

a:1: invalid hex escape

24 byte, inclusa una nuova riga finale.

Provalo online!

Rubino, 26 byte

Ecco la mia risposta precedente:

08
# No 8 allowed in octal

Messaggio di errore:

a:1: Invalid octal digit

25 byte, inclusa una nuova riga finale.


Penso che dovresti separare le tue risposte.
Solomon Ucko,

@ SolomonUcko: qualche motivo per cui? Ci sono già molte risposte. Volevo solo lasciare una traccia della mia risposta precedente. Le persone di solito modificano il conteggio dei byte con <s> 26 </s> 25, ma spesso si tratta di piccole modifiche.
Eric Duminil,

In realtà, non sono sicuro del perché l'ho detto, quindi non importa.
Solomon Ucko,

3

C ++ (su macOS High Sierra beta), 23 caratteri

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

Uscita: (22 caratteri)

Segmentation fault: 11

Non ricordo se le versioni precedenti di macOS forniscano la Segmentation fault (core dumped)risposta più tradizionale, ma l'aggiunta di spazi al codice per completarlo è piuttosto banale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.