Mensagem de erro mais curta


135

Desafio

Escreva o programa mais curto que, quando compilado ou executado, produz uma mensagem de erro fatal menor que o próprio programa. A mensagem de erro pode não ser gerada pelo próprio programa, como o do Python raise. Uma resposta válida deve incluir o código e a mensagem de erro. A resposta válida mais curta vence.

Nenhuma mensagem de erro não conta como uma mensagem de erro.

Exemplo (Lua)

Código (46 bytes):

[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Erro (45 bytes):

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

Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Dennis

1
@ Dennis Acho que essa é uma maneira de resolver o problema "O OP não edita esclarecimentos em questão".
Ørjan Johansen

1
Obrigado por aceitar minha resposta, que obteve mais votos; no entanto, foi marcado como code-golf , portanto, você deve aceitar esta resposta , que é a mais curta.
MD XF

@smartpeople é este: " __main__.CodeException: Raised an &rror." meu erro ou é este: " Raised an &rror."
FantaC

TrumpScript rodando na China?
Stan Strum

Respostas:


58

ed , 3 bytes

Nota: A maioria das respostas aqui está ignorando a nova linha final impressa como parte da mensagem de erro em sua contagem. Mas não vejo nada na pergunta que justifique ignorá-lo, e o autor comentou que a nova linha deveria ser incluída . Então, a menos que a pergunta seja alterada, eu vou incluí-la.

Código (com nova linha à direita):

??

Erro (com nova linha à direita):

?


19
Na verdade, isso é impossível de vencer. : P
totallyhuman

1
É possível fazer testes de adição e primalidade? Ou isso não é necessário para esse tipo de desafio?
Stephen

4
@StepHen Sim, ele pode fazer testes de adição e primalidade de forma unária, por meio do truque habitual de regex com referências anteriores.
Anders Kaseorg

1
Muito esperto, mas '?' não é fatal.
21817 Mark-Plotnick

2
Como apontado em um sinalizador, o erro é fatal se o código não for lido em um terminal. Experimente online!
214 Dennis

59

C (Linux moderno), 19 bytes

Teria feito meu famoso segfault, mas totalmente humano roubou.

main(){longjmp(0);}

Saída (18 bytes):

Segmentation fault

Você atualmente tem uma pontuação mais alta do que eu, então ... Vantajoso para as duas partes?
totallyhuman


Não há outro local com uma versão mais curta (para que você possa usar main(){main();})?
12431234123412341234123

@ 12431234123412341234123 Não que eu saiba. Além disso, main(){main();}não há garantia de falha de seg.
MD XF

1
@MDXF Não há garantia (e com a otimização ativada no gcc ou no clang, ele termina em um loop sem fim ou ignora a chamada). Mas no Code Golf, precisamos de uma implementação funcional e não de uma garantia.
12431234123412341234123

48

Python 2, 35 bytes

import sys;sys.tracebacklimit=000;a

Dá erro:

NameError: name 'a' is not defined

14
modificando o limite de rastreamento ... nice one
HyperNeutrino

1
Isso é inteligente!
Skyler

34

JavaScript (Firefox), 31 bytes

# This is a comment, right? ...

Lança este erro:

SyntaxError: illegal character

Testado no console do Firefox 54.0.1 no Windows 7.


26

Python 2 , 87 79 bytes

-8 bytes graças a Zacharý e Erik, o Outgolfer.

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

Experimente online!

Mensagem de erro, 78 bytes:

Supondo que o código é armazenado em um arquivo chamado a.

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

Este é realmente um pequeno ovo de Páscoa em Python. : D


1
Você pode assumir um nome de arquivo de um caractere!
Zacharý

1
Assumindo um nome de arquivo de 1 caractere, você pode jogar golfe nisso .
Erik the Outgolfer

Heh, legal. - - -
totallyhuman

1
Mas a mensagem de erro tem que ser menor do que o programa em si ...
Leaky Nun

1
Se você usar o IDLE você pode obter \s\sFile "<stdin>", line 1\nSyntaxError: not a chanceque fica a apenas 50 bytes [ \sé um espaço e \né uma nova linha], para que possa obter um programa de 51 byte ..
boboquack

20

Haskell, 13 bytes

main = (main)

Salve como t.hsou outro nome de um caractere, compile ghce execute. Mensagem de erro (com nova linha à direita):

t: <<loop>>

19

Táxi , 38 21 bytes

Switch to plan "abc".

Produz:

error: no such label

Experimente online!

-17 bytes graças ao Engineer Toast

Tenta mudar para "abc", que não existe. Você teria em [abc]algum lugar.


4
Você pode obter 21 bytes na Switch to plan "abc".produção error: no such label. Esse pode ser um dos poucos desafios do código-golfe em que o táxi supera alguns idiomas tradicionais.
Engineer Toast

@ EngineerToast obrigado, não pensei nisso.
21717 Stephen

18

> <> , 26 bytes

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

Experimente online!

Toda mensagem de erro no Fish é something smells fishy..., portanto, isso apenas move o ponteiro o tempo suficiente para ser maior que isso e tenta duplicar a parte superior da pilha, que está vazia no momento.


2
Eu gosto dele, e é definitivamente o mais suspeito de todas as soluções :-)
Xan-Kun Clark-Davis

@ Xan-KunClark-Davis suspiro que você tinha que ...: P
HyperNeutrino

18

JavaScript (Firefox), 21 bytes

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

Erro (20 bytes) :TypeError: a is null


2
D'oh! Eu sabia que havia um menor ...
ETHproductions

Eu tive a mesma idéia, surgiu com a = null; a.x01234567890 mesma quantidade de bytes
RuteNL

16

Shell do sistema V, 25 bytes

mount /dev/hda1 /mnt/hda1

Mensagem de erro (23 bytes):

mount: not a typewriter

"Não é uma máquina de escrever" ou ENOTTYé um código de erro definido em errno.hsistemas Unix. Isso é usado para indicar que um número ioctl (controle de entrada / saída) inválido foi especificado em uma chamada do sistema ioctl. No meu sistema, em/usr/include/asm-generic/errno-base.h , posso encontrar esta linha:

#define ENOTTY          25      /* Not a typewriter */

Na versão 6 UNIX e mais antiga, a E / S estava limitada a dispositivos terminais conectados em série, como um teletipo (TTY). Estes eram geralmente gerenciados através das chamadas gttye do sttysistema. Se alguém tentasse usar uma dessas chamadas do sistema em um dispositivo não terminal, ENOTTYfoi gerado.

Atualmente, naturalmente, não há necessidade de usar um teletipo. Quando gttye sttyforam substituídos por ioctl, ENOTTYfoi mantido. Alguns sistemas ainda exibem esta mensagem; mas a maioria diz "ioctl inadequado para o dispositivo".


Por favor, explique ...
Mega Man

@MegaMan Atualizado com explicação.
MD XF

1
Voto positivo para explicação realmente esclarecedora.
Xan-Kun Clark-Davis

11

QBasic, 11 bytes

Existem duas soluções de 11 bytes no QBasic, uma das quais pode ser jogada ainda mais. A menor mensagem de erro que o QBasic possui é overflowe pode ser acionada da seguinte maneira:

i%=i%+32677

Isso ocorre overflowporque o máximo para um número inteiro ( i%) é 32676. Eu não conseguia 32677jogar golfe sem o QBasic converter isso por muito tempo ...

Outro erro, com 11 bytes, seria out of data. QBasic possui DATAinstruções que armazenam dados no programa, que podem ser acessadas posteriormente por READinstruções. A emissão de mais READs que DATAs causa o erro:

READ a$ '--

Observe que a instrução é preenchida com um comentário para obter o comprimento da mensagem de erro. Sim, tenho uma mensagem de erro com um programa mais curto e um programa com uma mensagem de erro mais curta ...


11

C (Linux moderno), 19 bytes

Sugeri isso no chat, mas ninguém aproveitou a oportunidade. : P Crédito à resposta hilária do MD XF .

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

Mensagem de erro, 18 bytes

Segmentation fault

1
Mas a mensagem de erro tem que ser menor do que o programa em si ...
Leaky Nun

As contagens de bytes foram erradas, meu problema.
totallyhuman

9
Essa é uma mensagem genérica impressa pelo shell quando o subprocesso termina com o código de saída 139. O próprio programa C não produz nenhuma mensagem de erro.
Dennis

7
@Dennis O código de saída 139 é na verdade outra mentira inventada pelo shell. O Unix distingue entre o sinal 11 ( W_EXITCODE(0, 11) == 11) e o código de saída 139 ( W_EXITCODE(139, 9) == 139 << 8). Os shells são definidos de maneira $?não-adjetiva WIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128, mas a maioria dos idiomas expõe a diferença.
Anders Kaseorg

2
@ Anders É WIFEXITED(wstatus)equivalente DIVORCE(alimony)por acaso?
Janus Bahs Jacquet

11

Javascript (V8), 24 bytes

decodeURIComponent('%');

Erro, 23 bytes:

URIError: URI malformed

Testado no Nodejs v6.11.0 e Google Chrome v59.0.3071.115 .

Experimente online!

Observe que o TIO expande a mensagem de erro.


5
Bem-vindo ao PPCG!
Stephen


10

PowerShell , 215 189 bytes

[]
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Experimente online!

Portanto, o PowerShell possui ... mensagens de erro ... detalhadas. Além disso, a maioria das mensagens de erro que não são de sintaxe são Exceções de Tempo de Execução, o que significa que não são fatais, o que reduz esse problema à necessidade de encontrar um pequeno erro de análise.

Acho que este é um dos mais curtos, se não o mais curto, @TessellatingHeckler demonstrou que este é o menor erro de análise e ainda pesa em 188bytes apenas para a mensagem de erro. Então, basicamente precisamos acrescentar 1s suficientes para alcançar189 bytes de "código".

Executando isso localmente em c:\a.ps1 por exemplo, reduzirá a contagem de bytes em um punhado, pois é apenas um caminho de arquivo mais curto, mas não estará disponível no TIO.

Produz erro:

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

Me fizeram três perguntas nos comentários, uma das quais você perguntou, mas as duas que você não fez se aplicavam à sua resposta, e não à sua.
user72528

@ user72528 Sim, achei isso divertido também.
AdmBorkBork

Você pode usar um nome de arquivo de um caractere!
Zacharý

1
@ Zacharý Eu posso, mas não é reproduzível no TIO devido à maneira como o TIO lida com o sandbox. Prefiro mantê-lo utilizável no TIO do que salvar alguns bytes.
AdmBorkBork

2
Que tal []parecer um erro mais curto Missing type name after '['e, dependendo de exatamente como você conta, pode estar em torno de 190 - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (extraído das cadeias de caracteres do analisador aqui que parece o menor erro de analisador para mim ([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc).
TessellatingHeckler

9

Commodore 64 Básico, 15 bytes

?SYNTAX   ERROR

Produz

?SYNTAX  ERROR

(Observe dois espaços na mensagem de erro, onde o programa possui três)

?SYNTAX ERRORestá associada ?VERIFY ERRORà terceira menor mensagem de erro que o C64 Basic pode produzir e a menor que pode ser acionada com segurança por código (a menor mensagem BREAK IN 1, requer interação do usuário, ?LOAD ERRORrequer uma fita ou disquete com defeito e ?VERIFY ERRORexige a presença de um disquete ou fita contendo um arquivo que não corresponde ao programa na RAM).


1
Ha, nem vi isso quando publiquei o meu . Sempre bom ver outro usuário BASIC ... +1
MD XF

8

R , 29 28 bytes

-1 byte graças a JarkoDubbeldam

a #abcdefghijklmnopqrstuvwxy

Lança o erro Error: object 'a' not found que é 27 bytes.

Experimente online!


2
a #abcdefghijklmnopqrstuvwxyO erro de Error: object 'a' not foundum byte é menor.
23417 JAD

@JarkoDubbeldam obrigado.
Giuseppe

7

Ruby ( 33 32 bytes)

32 bytes

&
#abcdefghijklmnopqrstuvwxyz12

Lança o erro (assumindo um arquivo chamado "a"):

31 bytes

a:1: syntax error, unexpected &

Edit : Raspei um byte usando em &vez de <<agradecer a Eric , que também veio com uma solução Ruby ainda mais curta: http://codegolf.stackexchange.com/a/135087/65905


1
Bem-vindo ao PPCG!
Martin Ender

@EricDuminil nice! Eu pensei que todos os operadores de caracteres únicos foram citados na mensagem de erro, mas você está certo: &não é. Arrumado! Além disso, boa localização com o escape hexadecimal. Eu estava lutando para encontrar uma mensagem de erro fatal mais curta e sem rastreamento de pilha que não fosse um erro de sintaxe.
23717 ameketa

@ameketa: Na verdade, escrevi um programa bruteforce e testei todos os programas Ruby possíveis de 1, 2 e 3 bytes: D Obrigado pelo link.
Eric Duminil

5

Brainf ** k, 17 bytes, este intérprete

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

Brainf ** k é uma linguagem tão simples que quase todo intérprete tem uma mensagem de erro diferente. Este é usado Memory Error: -1para quando o ponteiro é movido demais para a esquerda e você tenta outra operação


Eu acho que escolher um intérprete é tão parte do desafio quanto escolher um idioma.
user72528

@ user72528 Bem aqui, definimos uma linguagem por seu intérprete, de modo que este desafio é um pouco sobre a escolha do intérprete com as mensagens de erro mais curtos :)
HyperNeutrino

1
Quem vence o cérebro? Ninguém? Tudo bem.
Erik the Outgolfer

A solução imbatível seria uma solução de dois bytes que causa um erro de 1 caractere.
Zacharý

@ Zacharý Certamente lol
HyperNeutrino

5

Lisp comum , 20 bytes

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

Experimente online!

Mensagem de erro

/: division by zero

11
o_o parênteses desequilibrados no Lisp ... você aprende algo novo todos os dias.
Zacharý 21/07

1
Se você substituir o 0 por 1, ocorrerá um erro nas parênteses, mas não chegará tão longe com 0. Eu só precisava adicionar caracteres para ser maior que a mensagem
Cheldon

5

TryAPL, 11 bytes

Código (11):

'abcdefghij

Erro (10):

open quote

5

Javascript (Firefox), 29 27 bytes

new Date('-').toISOString()

lança RangeError: invalid dateque é de 24 bytes. Testado no Firefox 54.0.1 no Windows 10.


5

ZX Spectrum Basic, 9 bytes

RUN USR 8

produz:

Mensagem de erro

Explicação:

Estou (excepcionalmente) contando a representação ASCII do programa para fins de comprimento, incluindo o final da linha (não é realmente importante, pois sempre podemos preencher um programa mais curto com espaços).

Normalmente, as mensagens de erro do ZX Spectrum são mais longas e mais úteis que isso - a rotina da ROM em 0x0008 espera o código de erro após a chamada do código da máquina para RST 8. E busca algum byte aleatório (determinístico) da ROM, que produz essa mensagem de erro sem sentido M. 5é o número do erro, ,é adicionado pela rotina de impressão de erros e 0:1é a linha: posição de comando do erro.


Na verdade, são 9 bytes normalmente, de qualquer maneira, porque o ZX Spectrum não avalia números em tempo de execução; portanto, existem 6 bytes ocultos que permitem acessar diretamente a representação binária de 8.
Neil


4

Perl 5 , 5 bytes

die$/

Gera uma nova linha, por um byte.

Experimente online!


._. Agora ... se apenas erros perl no arquivo vazio!
Zacharý

4
Aguarde, isso é uma violação do "não pode ser gerado pelo próprio programa"? Não entendi o que essa regra estava dizendo.
aschepler

1
@ Zacharý ... dando uma mensagem de erro com comprimento total negativo?
Aschepler

1
Isso pode ser inválido ... ou não, depende se o OP significou o erro ou a mensagem de erro
Zachary

^ Esclarecimento: se um programa de erros direta ou cria uma mensagem de erro diretamente
Zachary

4

Perl 5 , 11 bytes

Como não estou claro se minha outra resposta obedece às regras do desafio, aqui está outra alternativa.

#line 0
die

Saída de erro:

Died.

Com uma nova linha final, por 6 bytes.

Experimente online!

Por alguma razão, a função interna do interpretador Perl Perl_mess_svcontém:

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

onde CopLINE(cop)obtém o número da linha do contexto de código atual. Portanto, se esse número de linha for avaliado para zero, o Perl ignorará a adição do" at <filename> line <n>" à mensagem de erro.


1
Parece nem válido para mim. O IIRC dieé para o programa sair.
sergiol

1
Como isso é diferente de python raise?
Eric Duminil

Bem, o OP pode estar se referindo à geração do erro ou à mensagem de erro . Eu comentei sobre qual ele quis dizer.
Zacharý

4

ArnoldC , 150 bytes

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

Experimente online!

O erro é 94 bytes (incluindo a nova linha à direita):

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

Preservado porque acho isso mais engraçado - spoiler: eram aqueles brincalhões adolescentes.

ArnoldC , 280 bytes

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

Pseudo-código:

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

Experimente online!

Gera um erro "sem entrada". (Quase todos os outros erros no ArnoldC incluem um grande pedaço de clichê):

279 bytes (incluindo nova linha à direita):

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 bytes

Mais curtas mensagens de erro são 8 bytes cada: ERR:DATE, ERR:MODE, ERR:STAT, e ERR:ZOOM. Eu não considerei ERR:DATEporque isso não funciona em modelos sem um relógio interno. Além disso, não fui atrás ERR:ZOOMporque parecia muito difícil de desencadear.

Programa (9 bytes):

Seq:DrawInv X:::::

Mensagem de erro: ERR:MODE(8 bytes)

Programa (9 bytes):

median({1},{0::

Mensagem de erro: ERR:STAT(8 bytes)


3

Ruby, 25 bytes

Foi um exercício divertido, obrigado! Provavelmente existe uma maneira de obter uma mensagem de erro mais curta com um SegFault, mas não consegui encontrar nenhuma.

/\x
# Invalid hexa regexp

Mensagem de erro:

a:1: invalid hex escape

24 bytes, incluindo uma nova linha à direita.

Experimente online!

Ruby, 26 bytes

Aqui está a minha resposta anterior:

08
# No 8 allowed in octal

Mensagem de erro:

a:1: Invalid octal digit

25 bytes, incluindo uma nova linha à direita.


Eu acho que você deve separar suas respostas.
Solomon Ucko

@SolomonUcko: Alguma razão para isso? Já existem muitas respostas. Eu só queria deixar um rastro da minha resposta anterior. As pessoas geralmente apenas editam a contagem de bytes com <s> 26 </s> 25, mas geralmente é para pequenas alterações.
Eric Duminil

Na verdade, não sei por que disse isso, então deixa pra lá.
Solomon Ucko

3

C ++ (no macOS High Sierra beta), 23 caracteres

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

Saída: (22 caracteres)

Segmentation fault: 11

Não me lembro se as versões anteriores do macOS fornecem a Segmentation fault (core dumped)resposta mais tradicional, mas adicionar espaços ao código para compensar isso é bastante trivial.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.