Mensaje de error más corto

135

Desafío

Escriba el programa más corto que, cuando se compila o ejecuta, produce un mensaje de error fatal más pequeño que el propio programa. El mensaje de error no puede ser generado por el programa en sí, como Python raise. Una respuesta válida debe incluir tanto el código como el mensaje de error. La respuesta válida más corta gana.

Ningún mensaje de error no cuenta como mensaje de error.

Ejemplo (Lua)

Código (46 bytes):

[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Error (45 bytes):

[string "[..."]:1: unexpected symbol near '['
usuario72528
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Dennis
1
@ Dennis, supongo que esa es una forma de resolver el problema "OP no edita las aclaraciones en cuestión".
Ørjan Johansen
1
Gracias por aceptar mi respuesta, que obtuvo la mayoría de los votos; sin embargo, esto fue etiquetado code-golf , por lo que debe aceptar esta respuesta , que es la más corta.
MD XF
@smartpeople es esto: " __main__.CodeException: Raised an &rror." mi error o es esto: " Raised an &rror."
FantaC
¿TrumpScript se ejecuta en China?
Stan Strum

Respuestas:

58

ed , 3 bytes

Nota: La mayoría de las respuestas aquí ignoran la nueva línea final impresa como parte del mensaje de error en su recuento. Pero no veo nada en la pregunta que justifique ignorarlo, y el autor comentó que debería incluirse la nueva línea . Entonces, a menos que se cambie la pregunta, la incluiré.

Código (con nueva línea final):

??

Error (con nueva línea final):

?

Anders Kaseorg
fuente
19
En realidad, esto es imposible de superar. : P
totalmente humano
1
¿Puede ed hacer pruebas de suma y primalidad? ¿O no se requiere para este tipo de desafío?
Stephen
44
@StepHen Sí, puede hacer pruebas de suma y primalidad en unario a través del truco habitual de expresiones regulares con referencias inversas.
Anders Kaseorg
1
Muy inteligente, pero '?' no es fatal
Mark Plotnick
2
Como se señala en una bandera, el error es fatal si el código no se lee desde un terminal. Pruébalo en línea!
Dennis
59

C (Linux moderno), 19 bytes

Hubiera hecho mi famoso segfault pero totalmente humano lo robó.

main(){longjmp(0);}

Salida (18 bytes):

Segmentation fault
MD XF
fuente
Actualmente tienes una puntuación más alta que yo, así que ... ¿Ganar-ganar?
totalmente humano
1
Continuemos esta discusión en el chat .
Dennis
¿No hay otra configuración regional con una versión más corta (para que luego pueda usar main(){main();})?
12431234123412341234123
@ 12431234123412341234123 No que yo sepa. Además, main(){main();}no se garantiza la seg-falla.
MD XF
1
@MDXF No hay garantía (y con la optimización habilitada en gcc o clang, termina en un bucle sin fin o ignora la llamada). Pero en Code Golf necesitamos una implementación que funcione, no una garantía.
12431234123412341234123
48

Python 2, 35 bytes

import sys;sys.tracebacklimit=000;a

Da error:

NameError: name 'a' is not defined
orlp
fuente
14
modificando el límite de
rastreo
1
Esto es inteligente!
Skyler
34

JavaScript (Firefox), 31 bytes

# This is a comment, right? ...

Lanza este error:

SyntaxError: illegal character

Probado en la consola de Firefox 54.0.1 en Windows 7.

ETHproducciones
fuente
26

Python 2 , 87 79 bytes

-8 bytes gracias a Zacharý y Erik the Outgolfer.

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

Pruébalo en línea!

Mensaje de error, 78 bytes:

Suponiendo que el código se almacena en un archivo llamado a.

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

En realidad, este es un bonito y pequeño huevo de Pascua en Python. :RE

totalmente humano
fuente
1
¡Puede asumir un nombre de archivo de un carácter!
Zacharý
1
Suponiendo un nombre de archivo 1-char, puede jugar golf a esto .
Erik the Outgolfer
Je, bien. - - -
totalmente humano
1
Pero el mensaje de error tiene que ser más pequeño que el programa en sí ...
Leaky Nun
1
Si utiliza IDLE se puede obtener \s\sFile "<stdin>", line 1\nSyntaxError: not a chanceque está a sólo 50 bytes [ \ses un espacio y \nes un salto de línea], para que pueda obtener un programa de 51 bytes ..
boboquack
20

Haskell, 13 bytes

main = (main)

Guardar como t.hsu otro nombre de un carácter, compilar con ghcy ejecutar. Mensaje de error (con nueva línea final):

t: <<loop>>
Anders Kaseorg
fuente
19

Taxi , 38 21 bytes

Switch to plan "abc".

Produce:

error: no such label

Pruébalo en línea!

-17 bytes gracias a Engineer Toast

Intenta cambiar a "abc", que no existe. Tendrías [abc]algún lugar.

Stephen
fuente
44
Puede bajar a 21 bytes con la Switch to plan "abc".producción error: no such label. Este podría ser uno de los pocos desafíos de código de golf donde Taxi supera algunos idiomas tradicionales.
Engineer Toast
@EngineerToast gracias, no pensé en eso.
Stephen
18

> <> , 26 bytes

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

Pruébalo en línea!

Cada mensaje de error en Fish es something smells fishy..., por lo que solo mueve el puntero a la derecha las veces suficientes para ser más largo que eso e intenta duplicar la parte superior de la pila, que está vacía en ese momento.

Hiperneutrino
fuente
2
Me gusta, y definitivamente es la solución más sospechosa :-)
Xan-Kun Clark-Davis
@ Xan-KunClark-Davis suspiro tenías que ...: P
HyperNeutrino
18

JavaScript (Firefox), 21 bytes

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

Error (20 bytes) :TypeError: a is null

Oliver
fuente
2
D'oh! Sabía que había uno más corto ...
ETHproductions
Tuve la misma idea, se me ocurrió a = nulo; a.x01234567890 Misma cantidad de bytes
RuteNL
16

Sistema V shell, 25 bytes

mount /dev/hda1 /mnt/hda1

Mensaje de error (23 bytes):

mount: not a typewriter

"No es una máquina de escribir" o ENOTTYes un código de error definido en errno.hlos sistemas Unix. Esto se utiliza para indicar que se especificó un número ioctl no válido (control de entrada / salida) en una llamada al sistema ioctl. En mi sistema, en /usr/include/asm-generic/errno-base.h, puedo encontrar esta línea:

#define ENOTTY          25      /* Not a typewriter */

En la Versión 6 UNIX y anteriores, la E / S se limitaba a dispositivos terminales conectados en serie, como un teletipo (TTY). Estos por lo general se administran a través de las gttyy sttyllamadas al sistema. Si se intentara usar cualquiera de estas llamadas del sistema en un dispositivo no terminal, ENOTTYse generaría.

Hoy en día, naturalmente no hay necesidad de usar un teletipo. Cuando gttyy sttyfueron reemplazados por ioctl, ENOTTYse mantuvo. Algunos sistemas todavía muestran este mensaje; pero la mayoría dice "ioctl inapropiado para dispositivo" en su lugar.

MD XF
fuente
Por favor explique ...
Mega Man
@MegaMan Actualizado con explicación.
MD XF
1
Voto por una explicación realmente esclarecedora.
Xan-Kun Clark-Davis
11

QBasic, 11 bytes

Hay dos soluciones de 11 bytes en QBasic, una de las cuales podría desarrollarse aún más. El mensaje de error más corto que tiene QBasic es overflow, y puede activarse como tal:

i%=i%+32677

Esto arroja overflowporque el máximo para un entero ( i%) es 32676. No podría 32677jugar al golf sin QBasic auto-casting esto por mucho tiempo ...

Otro error, a 11 bytes, sería out of data. QBasic tiene DATAdeclaraciones que almacenan datos en el programa, a las que luego se puede acceder mediante READdeclaraciones. Emitir más READs que DATAs provoca el error:

READ a$ '--

Tenga en cuenta que la declaración se rellena con un comentario para obtener la longitud del mensaje de error. Sí, tengo un mensaje de error con un programa más corto y un programa con un mensaje de error más corto ...

Steenbergh
fuente
11

C (Linux moderno), 19 bytes

Sugerí esto en el chat, pero nadie aprovechó la oportunidad. : P Crédito a la hilarante respuesta del MD XF .

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

Mensaje de error, 18 bytes

Segmentation fault
totalmente humano
fuente
1
Pero el mensaje de error tiene que ser más pequeño que el programa mismo ...
Leaky Nun
Los recuentos de bytes fueron jodidos, mi mal.
totalmente humano
99
Este es un mensaje genérico impreso por el shell cuando el subproceso termina con el código de salida 139. El programa C en sí no produce ningún mensaje de error.
Dennis
77
@Dennis El código de salida 139 es en realidad otra mentira inventada por el shell. Unix distingue entre la señal 11 ( W_EXITCODE(0, 11) == 11) y el código de salida 139 ( W_EXITCODE(139, 9) == 139 << 8). Los shells se configuran de forma $?no suryectiva WIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128, pero la mayoría de los idiomas exponen la diferencia.
Anders Kaseorg
2
@Anders ¿Es WIFEXITED(wstatus)equivalente a DIVORCE(alimony)por casualidad?
Janus Bahs Jacquet
11

Javascript (V8), 24 bytes

decodeURIComponent('%');

Error, 23 bytes:

URIError: URI malformed

Probado en Nodejs v6.11.0 y Google Chrome v59.0.3071.115 .

Pruébalo en línea!

Tenga en cuenta que TIO expande el mensaje de error.

Max Sinev
fuente
55
Bienvenido a PPCG!
Stephen
11

TrumpScript , 30 bytes

We love NATO!
America is great

Mensaje de error:

Trump doesn't want to hear it
Timtech
fuente
3
Los códigos de error de PS están en constants.py
Timtech
10

PowerShell , 215 189 bytes

[]
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Pruébalo en línea!

Entonces, PowerShell tiene ... detallados ... mensajes de error. Además, la mayoría de los mensajes de error que no son de sintaxis son Excepciones de tiempo de ejecución, lo que significa que no son fatales, lo que reduce este problema a la necesidad de encontrar un breve error de análisis.

Creo que este es uno de los más cortos, si no el más corto, @TessellatingHeckler ha demostrado que este es el error de análisis más corto, y aún pesa en 188bytes solo para el mensaje de error. Por lo tanto, básicamente necesitamos agregar suficientes 1s para alcanzar 189bytes de "código".

Ejecutar esto localmente, c:\a.ps1por ejemplo, reducirá el recuento de bytes en un puñado, ya que es solo una ruta de archivo más corta, pero luego no está disponible en TIO.

Produce error:

At /tmp/home/.code.tio.ps1:1 char:2
+ []
+  ~
Missing type name after '['.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingTypename
AdmBorkBork
fuente
Me hicieron tres preguntas en los comentarios, una de las cuales usted hizo, pero las dos que no hizo ambas se aplicaron a su respuesta, y no a la suya.
user72528
@ user72528 Sí, eso también me pareció divertido.
AdmBorkBork
Puede usar un nombre de archivo de un carácter
Zacharý
1
@ Zacharý puedo, pero no es reproducible en TIO debido a cómo TIO maneja el sandboxing. Prefiero mantenerlo utilizable en TIO que guardar algunos bytes.
AdmBorkBork
2
¿Qué hay de []que se parece a un error de más corta Missing type name after '['y dependiendo exactamente de cómo se cuente podría ser alrededor de 190 - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (tomado de las cadenas de analizador de aquí que se parece a la de detectar errores, más corto para mí ([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc).
TessellatingHeckler
9

Commodore 64 Basic, 15 bytes

?SYNTAX   ERROR

Produce

?SYNTAX  ERROR

(Tenga en cuenta dos espacios en el mensaje de error, donde el programa tiene tres)

?SYNTAX ERRORestá vinculado con ?VERIFY ERRORel tercer mensaje de error más corto que C64 Basic puede producir, y el más corto que puede ser activado de manera confiable por el código (el mensaje más corto BREAK IN 1requiere interacción del usuario, mientras que ?LOAD ERRORrequiere una cinta defectuosa o un disquete y ?VERIFY ERRORrequiere la presencia de un disquete o cinta que contiene un archivo que no coincide con el programa en la RAM).

marca
fuente
1
Ja, ni siquiera vi esto cuando publiqué el mío . Siempre es bueno ver a otro usuario BÁSICO ... +1
MD XF
8

R , 29 28 bytes

-1 byte gracias a JarkoDubbeldam

a #abcdefghijklmnopqrstuvwxy

Lanza el error Error: object 'a' not foundque es de 27 bytes.

Pruébalo en línea!

Giuseppe
fuente
2
a #abcdefghijklmnopqrstuvwxyEl error de Error: object 'a' not foundes un byte más corto.
JAD
@JarkoDubbeldam gracias.
Giuseppe
7

Rubí ( 33 32 bytes)

32 bytes

&
#abcdefghijklmnopqrstuvwxyz12

Lanza el error (suponiendo en un archivo llamado "a"):

31 bytes

a:1: syntax error, unexpected &

Editar : se eliminó un byte usando en &lugar de <<agradecer a Eric , quien también ideó una solución Ruby aún más corta: http://codegolf.stackexchange.com/a/135087/65905

ameketa
fuente
1
Bienvenido a PPCG!
Martin Ender
@EricDuminil agradable! Pensé que todos los operadores de un solo carácter fueron citados en el mensaje de error, pero tienes razón: &no lo es. ¡Ordenado! Además, buen hallazgo con el escape hexagonal. Estaba luchando por encontrar un mensaje de error fatal más corto y sin seguimiento de pila que no sea un error de sintaxis.
ameketa
@ameketa: en realidad escribí un programa de fuerza bruta y probé todos los posibles programas Ruby de 1, 2 y 3 bytes: D Gracias por el enlace.
Eric Duminil
5

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

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

Brainf ** k es un lenguaje tan simple que casi todos los intérpretes tienen un mensaje de error diferente. Este se usa Memory Error: -1para cuando el puntero se mueve demasiado a la izquierda e intenta otra operación

Hiperneutrino
fuente
Supongo que elegir un intérprete es tan parte del desafío como elegir un idioma.
user72528
@ user72528 Bueno, aquí definimos un idioma por su intérprete, por lo que este desafío consiste en elegir el intérprete con los mensajes de error más cortos :)
HyperNeutrino
1
¿Quién supera a Brainfuck? ¿Nadie? Bien.
Erik the Outgolfer
La solución inmejorable sería una solución de dos bytes que causa un error de 1 carácter.
Zacharý
@ Zacharý Ciertamente lol
HyperNeutrino
5

Lisp común , 20 bytes

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

Pruébalo en línea!

Mensaje de error

/: division by zero
Cheldon
fuente
11
o_o paréntesis desequilibrados en Lisp ... aprendes algo nuevo todos los días.
Zacharý
1
Si reemplaza el 0 con 1, se producirá un error en los padres pero no llega tan lejos con 0. Solo necesito agregar caracteres para ser más largo que el mensaje
Cheldon
5

TryAPL, 11 bytes

Código (11):

'abcdefghij

Error (10):

open quote
Zacharý
fuente
5

Javascript (Firefox), 29 27 bytes

new Date('-').toISOString()

lanza RangeError: invalid dateque es de 24 bytes. Probado en Firefox 54.0.1 en Windows 10.

SuperStormer
fuente
5

ZX Spectrum Basic, 9 bytes

RUN USR 8

produce:

Mensaje de error

Explicación:

Estoy (excepcionalmente) contando la representación ASCII del programa para fines de longitud, incluido el final de línea (no es realmente importante, ya que siempre podríamos rellenar un programa más corto con espacios).

Por lo general, los mensajes de error de ZX Spectrum son más largos y más útiles que esto: la rutina ROM en 0x0008 espera un código de error después de la llamada del código de máquina a RST 8., Y obtiene algún byte aleatorio (determinista) de la ROM, que produce este mensaje de error sin sentido M. 5es el número de error, ,es agregado por la rutina de impresión de error y 0:1es la línea: posición del comando del error.

Radovan Garabík
fuente
En realidad, esto es normalmente de 9 bytes, ya que ZX Spectrum no evalúa los números en tiempo de ejecución, por lo que en realidad hay 6 bytes ocultos que le permiten acceder a la representación binaria de 8 directamente.
Neil
4

Berenjena , 53 bytes

0/0 Lots of wasted space. I don't know how Aubergine.

Salidas SyntaxError: Invalid instruction (0) at character 0.

Pruébalo en línea!

programador 5000
fuente
4

Perl 5 , 5 bytes

die$/

Emite una nueva línea, para un byte.

Pruébalo en línea!

aschepler
fuente
._. Ahora ... ¡si solo errores perl en el archivo vacío!
Zacharý
44
Espera, ¿se trata de una violación de "no puede ser generado por el propio programa"? No entendí lo que decía esa regla.
aschepler
1
@ Zacharý ... dando un mensaje de error con longitud total negativa?
aschepler
1
Esto puede ser inválido ... o no, depende de si el OP significó el error o el mensaje de error
Zacharý
^ aclaración: si un programa comete un error directamente o crea un mensaje de error directamente
Zacharý
4

Perl 5 , 11 bytes

Como no tengo claro si mi otra respuesta obedece las reglas de desafío, aquí hay otra alternativa.

#line 0
die

Salida de error:

Died.

Con una nueva línea final, para 6 bytes.

Pruébalo en línea!

Por alguna razón, la función interna del intérprete Perl Perl_mess_svcontiene:

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

donde CopLINE(cop)obtiene el número de línea del contexto de código actual. Entonces, si ese número de línea se evalúa a cero, Perl omite agregar el " at <filename> line <n>"mensaje de error habitual .

aschepler
fuente
1
No me parece ni válido. IIRC diees para que el programa salga.
sergiol
1
¿Cómo es eso diferente a Python raise?
Eric Duminil
Bueno, el OP podría haberse referido a generar el error o el mensaje de error . Comenté a cuál se refería.
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

Pruébalo en línea!

El error es de 94 bytes (incluida la nueva línea final):

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

Conservado porque creo que esto es más divertido - spoiler: fueron esos malditos bromistas 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

Pseudocódigo:

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

Pruébalo en línea!

Genera un error "sin entrada". (Casi todos los demás errores en ArnoldC incluyen un gran trozo de repetitivo):

279 bytes (incluida la nueva línea final):

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)
TemporalWolf
fuente
4

TI-Basic, 9 bytes

Mensajes de error son más cortas de 8 bytes cada uno: ERR:DATE, ERR:MODE, ERR:STAT, y ERR:ZOOM. No lo consideré ERR:DATEporque eso no funciona en modelos sin reloj interno. Además, no lo hice ERR:ZOOMporque parecía demasiado difícil de activar.

Programa (9 bytes):

Seq:DrawInv X:::::

Mensaje de error: ERR:MODE(8 bytes)

Programa (9 bytes):

median({1},{0::

Mensaje de error: ERR:STAT(8 bytes)

Timtech
fuente
3

Rubí, 25 bytes

Ese fue un ejercicio divertido, ¡gracias! Probablemente haya una manera de obtener un mensaje de error más corto con un SegFault, pero no pude encontrar ninguno.

/\x
# Invalid hexa regexp

Mensaje de error:

a:1: invalid hex escape

24 bytes, incluida una nueva línea final.

Pruébalo en línea!

Rubí, 26 bytes

Aquí está mi respuesta anterior:

08
# No 8 allowed in octal

Mensaje de error:

a:1: Invalid octal digit

25 bytes, incluida una nueva línea final.

Eric Duminil
fuente
Creo que deberías separar tus respuestas.
Solomon Ucko
@SolomonUcko: ¿Alguna razón por la que? Ya hay muchas respuestas. Solo quería dejar un rastro de mi respuesta anterior. Por lo general, las personas solo editan el recuento de bytes con <s> 26 </s> 25, pero a menudo se trata de cambios menores.
Eric Duminil
En realidad, no estoy seguro de por qué dije eso, así que no importa.
Solomon Ucko
3

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

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

Salida: (22 caracteres)

Segmentation fault: 11

No recuerdo si las versiones anteriores de macOS proporcionan la Segmentation fault (core dumped)respuesta más tradicional , pero agregar espacios al código para rellenar eso es bastante trivial.

mullido
fuente