¡Inspirado por no soy el idioma que estás buscando!
Reto
Elija dos lenguajes de programación diferentes y escriba un programa que imprima la siguiente línea en stdout (o equivalente):
This program errors out in <the current language> :P
y luego genera diferentes tipos de error en cada uno de los dos idiomas.
Reglas
Algunas reglas se toman del desafío original.
- En la salida, los nombres de los idiomas deben seguir exactamente:
- El nombre que figura en TIO , excluyendo opcionalmente el número de versión y / o el nombre de implementación (por ejemplo, si lo usa
JavaScript (Node.js)
como uno de sus idiomas, puede usarloJavaScript
para su nombre de idioma, pero noJS
oJavascript
). - El nombre completo en el sitio web oficial (o repositorio de GitHub) si su idioma de elección no está disponible en TIO.
- El nombre que figura en TIO , excluyendo opcionalmente el número de versión y / o el nombre de implementación (por ejemplo, si lo usa
- Ninguno de los programas debe recibir ninguna entrada del usuario.
- Puede usar comentarios en cualquier idioma.
- Dos versiones diferentes del mismo idioma cuentan como idiomas diferentes.
- Si se hace esto, el programa debería generar el número de versión principal y, si se ejecuta en dos versiones menores diferentes, también debería informar la versión menor.
- No debe usar funciones de versión preconstruidas (esto incluye variables que ya se han evaluado en tiempo de ejecución).
- Dos banderas de línea de comando diferentes en el mismo idioma también cuentan como idiomas diferentes según este meta consenso , siempre que las banderas no incluyan fragmentos de código (como
-Dblahblah...
en C).- Si se hace esto, el programa también debería generar la bandera utilizada.
- Dos errores se consideran diferentes a menos que ambos errores sean generados por la misma semántica (como "división por cero", "falla de segmentación" o "índice fuera de rango").
- Si el tiempo de ejecución de un idioma no se cierra después de un error, pero informa el error de alguna manera al usuario, es un error válido.
- Si un idioma no discrimina los mensajes de error pero tiene una lista conocida de los motivos que causan el error, debe especificar el motivo, no el mensaje de error.
Un ejemplo es><>
, que tiene un solo mensaje de errorsomething smells fishy...
, pero la página wiki de esolangs tiene una lista de razones de error.
- El error de sintaxis no está permitido a menos que se genere mediante una llamada
eval()
o similar. - Lanzar algo manualmente (a través de
throw
(JS),raise
(Python),die
(Perl) o similar) está permitido, pero todos se consideran un tipo de error. - También se permite el error por comando no válido en 2D o golflangs (y se trata como un tipo de error).
Ejemplos
Python y Ruby
- Python:
This program errors out in Python :P
a stdout, luego identificador indefinido - Ruby:
This program errors out in Ruby :P
para stdout, luego indexar fuera de límites
C89 y C99
- C89:
This program errors out in C 89 :P
a stdout, luego división por cero - C99:
This program errors out in C 99 :P
a stdout, luego falla de segmentación
Tenga en cuenta que el número de versión siempre debe estar separado del nombre del idioma por un espacio.
Python 2.7.9 y Python 2.7.10
- Python 2.7.9:
This program errors out in Python 2.7.9 :P
a stdout, luego error de sintaxis en eval - Python 2.7.10:
This program errors out in Python 2.7.10 :P
a stdout, luego error clave en dict
Perl y Perl -n
- Perl:
This program errors out in Perl :P
a stdout, luego formato de hora no válido - Perl
-n
:This program errors out in Perl -n :P
para stdout, luego intente abrir un archivo que no existe
Condición ganadora
Este es el código de golf , por lo que gana el código más corto en bytes. Pero siempre se le anima a publicar una respuesta que sea divertida o interesante, incluso si no es muy corta.
This program errors out in ...
contener tabulaciones / espacios mixtos en lugar de solo espacios?Respuestas:
Python 2 / Python 3 , 60 bytes
NameError: name 'a' is not defined
unsupported operand type(s) for *: 'NoneType' and 'int'
Python 2:
/
es división entera, 3/2 tiene 1; int (3/2 * 2) es 2.print((...)*1)
, aquí*1
significa repetir la cadena una vez.Python 3:
(print(...))*1
.print
vuelveNone
; La multiplicación no funcionaNone x int
, por lo que informa "operando no compatible".fuente
C y C ++,
114101 bytes-13 bytes gracias a l4m2 !
Falla de segmentación en C ++, excepción de coma flotante en C.
auto
está predeterminadoint
en C, entonces se(int).5
convierte0
, por lo que tratar de dividirlo es básicamente división entre cero.En C ++
1/d
es 2, agregarlo a la direcciónd
e intentar cambiar el valor de esa dirección arroja un defecto.¡Pruébalo en C ++!
Pruébalo en C!
fuente
"++"+n
, donden
está0
para C ++ y2
para Cd?"++":""
9 caracteres,"++"+4*d
8 caracteres. Pero obtiene C / C ++ al revés. Suspiro.int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}
(105) aunque no sé por quéint
se puede omitirL"⬫"+!d
lugar ded?"++":""
JavaScript + HTML / HTML + JavaScript, 160 bytes
No estoy seguro si esto cuenta dos idiomas, pero es divertido.
fuente
<!-- ... -->
marcadores de comentarios de una sola línea (sé que esto está en la especificación por razones de compatibilidad con versiones anteriores)Java 8 y C99, 172 bytes
Basado en mi respuesta para el desafío 'abc' y 'cba' .
Pruébelo en Java 8, lo que resulta en ArrayIndexOutOfBoundsException: 1 .
Pruébelo en C, lo que da como resultado una excepción de punto flotante: la división por cero no está definida .
Explicación:
Como puede ver en el código resaltado de Java anterior, la primera línea es un comentario debido
//
, y el código C es un comentario debido/* ... */
, lo que resulta en:Por lo tanto, se imprime en STDOUT y luego intenta acceder al segundo argumento de programa (cuando no se proporciona ninguno), por lo que produce la excepción ArrayIndexOutOfBoundsException .
No estoy seguro de cómo habilitar correctamente el resaltado en C, porque
lang-c
da como resultado el mismo resaltado que Java ... Pero//\
comentará la siguiente línea, que es el código Java, lo que resulta en:Entonces se reduce a STDOUT, y luego da una división por cero error.
fuente
//
añadió a C con C99.C99
.a[1]
lugar dea[0]
?1
desde el principio. Podría haber usado0
,9
etc., así. Si tengo algo que editar sobre esta publicación, también lo cambiaré al0
mismo tiempo.Java 8 y espacios en blanco ,
439431428408 bytesPruébelo en Java 8, lo que da como resultado ArrayIndexOutOfBoundsException: 0 .
Pruébelo en espacios en blanco: se produce un error del usuario (No se puede hacer Infix Plus) .
Explicación:
Java 8:
Por lo tanto, imprime en STDOUT y luego intenta acceder al primer argumento de programa (cuando no se proporciona ninguno), por lo que produce la excepción ArrayIndexOutOfBoundsException .
Espacio en blanco:
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Prueba esta versión resaltada.
El espacio en blanco es un lenguaje basado en la pila que ignora todo excepto los espacios, las pestañas y las nuevas líneas. Aquí está el mismo programa en pseudocódigo:
Se producirá un error tan pronto como termine de imprimir todos los valores y la pila esté vacía cuando intente hacer Add (
TSSS
), que requiere dos elementos en la pila.He generado la constante
111
con este programa Java , que también he usado para desafíos anteriores relacionados con ASCII que hice en Whitespace. Además, he usado algunas copias de los espacios para guardar bytes.Una cosa importante a tener en cuenta es el truco que he usado para colocar el programa Java dentro de la respuesta de espacios en blanco. Permítanme comenzar explicando cómo se empuja un número en el espacio en blanco:
S
al principio: Habilite la manipulación de pila;S
: Presione lo que sigue como Número;S
oT
: Positivo o Negativo respectivamente;Algunos
S
y / oT
, seguido de unN
: Número como binario, dondeT=1
yS=0
.Aquí algunos ejemplos:
SSSTN
;SSTTN
;SSSTTSTTTTN
.SSSSN
,SSTSN
,SSSN
,SSTN
,SSSSSSSSSSSSN
, etc. (Cuando se utilizaSSSN
(oSSTN
), no tenemos que especificar la parte binaria, porque es implícitamente 0 después de haber manifestado su signo.)Tan solo
SSSN
es suficiente para empujar el valor0
(utilizado para la letrao
en este caso). Pero, para colocar el programa Java en este programa de espacios en blanco golfizado, necesitaba un espacio adicional, por lo queo
se presionan los primeros dos sSSSN
, pero se presiona el terceroSSSSN
, por lo que tenemos suficientes espacios para la oración del programa Java.fuente
CBM BASIC y código de máquina 6502 (C64),
142144 bytesTuve que agregar 2 bytes después de darse cuenta de que un error de sintaxis no estaba permitido ...
Hexdump de
.prg
archivo:La vista BÁSICA CBM , como se muestra en el editor del C64:
Atención : es imposible ingresar correctamente este programa en el editor BASIC. Ni siquiera intentes editar este programa en el editor BASIC, se bloqueará. Aún así, es un programa BASIC ejecutable;)
La vista de código de máquina 6502 :
Demostración en línea , escriba
run
para ejecutar como BASIC,sys 2049
para ejecutar como código de máquina,list
para mostrarlo interpretado como código BASIC.Ejecutar como BASIC produce
division by zero error in 1
uncan't continue error
Explicación:
Los primeros dos bytes de un
.prg
archivo son la dirección de carga en little endian, aquí es$0801
(decimal2049
), que es la dirección de inicio de los programas BASIC en el C64.run
inicia este programa en el intérprete BASIC, mientras quesys 2049
es el comando para ejecutar un programa de código de máquina en la dirección2049
.Como puede ver, la primera línea en la vista BÁSICA es un comentario (
rem
) que contiene "basura" y parte de la cadena de salida requerida. Este es el programa de código de máquina y algunos bytes de relleno. Verá algunos comandos BASIC "aleatorios" porque los programas CBM-BASIC contienen los comandos "tokenizados" como valores de un solo byte, y algunos de estos valores son los mismos que los códigos de operación utilizados en el código de máquina. El código de máquina reutiliza la cadena presente en la segunda línea de código para su salida.Los primeros dos bytes de una línea de un programa básico son un puntero a la siguiente línea, aquí
$0850
. Esto se elige cuidadosamente porque50 08
también es una instrucción de bifurcación 6502 que salta sobre los siguientes 8 bytes cuando no se establece el indicador de desbordamiento; esto se usa para saltar en algún lugar en el medio de esta línea de "comentario" cuando se ejecuta como código de máquina. El50
es el código de operación utilizado aquí, por lo que la segunda línea tiene que comenzar0850
para que el truco funcione. Es por eso que ve una secuencia de 520
bytes (caracteres de espacio) para completar. El código de máquina salta activamente a la rutina de manejo de errores de ROM para dar un error de "no puede continuar".El código BÁSICO es bastante sencillo; Como segundo argumento para "imprimir",
0
se dividen dos variables no inicializadas (que tienen un valor de en CBM BASIC), lo que provoca el error "división por cero".fuente
> <> y Foo , 42 bytes
Pruébalo en> <>!
Pruébalo en Foo!
Foo imprime todo
"
, como está bien documentado, e intenta dividir por cero al final. Ignora el'><>'
.><>
empuja el "Foo" a la pila, pero inmediatamente lo saca usandop
. Después de que imprime todo en la pila#o<
, sale cuando la pila está vacía con el único mensaje de error que conoce,something smells fishy...
fuente
><>
tiene una lista de razones de error, por lo que creo que debe especificar una de ellas, nosomething smells fishy...
.p
para explotarFoo
es muy inteligente!C y Python,
126116bytes-10 bytes gracias a @Bubbler!
En Python print () es un None, por lo que tratar de obtener su negativo no tiene sentido, por lo que Python arroja un error.
En C printf () devuelve un int, entonces dividirlo por cero da una excepción de coma flotante.
Pruébalo en C!
¡Pruébalo en Python!
fuente
-print(...)
para elevar unTypeError
en Python, y luego puede hacer un error de coma flotante (división por cero) en C. Combinado con algunas líneas nuevas redundantes, aquí hay 116 bytes ( Python , C ).Attache + Wolfram Language (Mathematica) , 82 bytes
¡Prueba Attache en línea! ¡Prueba Mathematica en línea!
Esto gira sobre el significado del operador
=
en los dos idiomas. En Attache, compara la igualdad, pero en Mathematica, realiza la asignación de variables.:=
realiza asignaciones variables en ambos idiomas.Ahora, en Attache,
Print
devuelve una matriz de cadenas impresas, y la sustracción no es posible con cadenas y enteros (es decir,0
). Entonces, se produce un error de tipo. En Mathematica,Print
retornosNull
, y Mathematica está muy bien restando0
de eso. Pero, tiramos manualmente ese nulo conThrow
, dando unnocatch
error.fuente
Python (2) y QB64 , 82 bytes
Para probar la versión de Python, ¡puede probarla en línea! Para probar la versión QB64, deberá descargar QB64.
Lo que ve Python
La primera línea es solo la expresión desnuda
1
(un no-op) seguida de un comentario.La segunda línea se establece
s
en la cadena"QB64"
, pero la tercera línea la cambia inmediatamente a"Python"
. La cuarta línea imprime el mensaje en consecuencia.La quinta línea es otra expresión desnuda, pero plantea un
NameError
por el nombre indefinidoCLS
.Lo que ve QB64
La primera línea, numerada
1#
, define cada variable cuyo nombre comienza conS
(sin distinción entre mayúsculas y minúsculas) como una variable de cadena. Esto significa que no tenemos que usars$
, lo que sería un error de sintaxis en Python.La segunda línea se establece
s
en la cadena"QB64"
.'
comienza un comentario en QB64, por lo que la tercera línea no hace nada. La cuarta línea imprime el mensaje en consecuencia.La quinta línea intenta
CLS
(borrar la pantalla) con un argumento de-1
. Pero ya queCLS
sólo acepta los argumentos de0
,1
o2
, lo que produce el errorIllegal function call
. El error crea un cuadro de diálogo que le pregunta al usuario si desea continuar con la ejecución o abortar. Técnicamente, esto significa que el error no es fatal (en este caso, puede elegir "continuar ejecución" y el programa simplemente termina sin más problemas); pero el OP ha permitido explícitamente idiomas que pueden continuar después de un error, por lo que el comportamiento de QB64 debería estar bien.fuente
Perl 5 y JavaScript (Node.js) , 96 bytes
Esto hace uso del hecho de que
(...)
es una lista en Perl queprintf
usará el elemento más a la izquierda y el hecho de que es el operador de coma en JavaScript, que devolverá el argumento más a la derecha.Provoca un error de división por cero en Perl y un Error de referencia porque
$
no está definido en JavaScript.Prueba el Perl en línea!
¡Prueba el JavaScript en línea!
fuente
Octava y MATLAB, 67 bytes
Pruébalo en línea!
Notas: El código asume que MATLAB está instalado sin cajas de herramientas (o que los nombres de cualquier caja de herramientas instalada no comienzan con las letras A a M).
Cómo funciona:
El código obtiene los datos de la versión para el intérprete y las cajas de herramientas que utilizan
ver
. Runningv(1).Name
extrae el nombre del primer producto, esto devolveráOctave
oMATLAB
suponiendo que la nota anterior sea cierta.El programa mostrará la cadena requerida, completa con
Octave
oMATLAB
según sea necesario.Finalmente lo hacemos
v(--pi)
.En Octave,
--
es el operador de pre-decremento. Como tal, intenta pre-decrementar lo que falla ya que la variablepi
no existe (enpi
realidad es función, no una variable).En MATLAB, el operador de decremento previo no existe. Como tal, la declaración se interpreta como
v(-(-pi))
que es igual a justov(pi)
. Sin embargo,pi
no es un número entero, por lo que no se puede usar para indexar en lav
matriz, dando un error.fuente
C ++ 14 (gcc) / C ++ 17 (gcc) ,
107105bytesPruébalo en línea! (C ++ 14)
Pruébalo en línea! (C ++ 17)
Supone que
<cstdio>
declaraprintf
en el espacio de nombres global (además destd
) y que el conjunto de caracteres de ejecución básica usa valores ASCII, que son ciertos usando g ++ en Linux.El problema básico aquí es que C ++ 17 eliminó los trigrafos del lenguaje.
En C ++ 14,
"??/0"
contiene un trigrafo y es equivalente a"\0"
. Entonces*"??/0"
es cero, yc
se establece en cero. El número 4 se pasa como argumento aprintf
, luego la división porc
causa un comportamiento indefinido. En Linux, esto sucede antes de que*p
entre en escena y el programa obtiene unSIGFPE
.En C ++ 17,
"??/0"
es exactamente la longitud de 4 cadenas que parece ser. Así*"??/0"
es'?'
o 63, yc
se establece en 3. El número 7 se pasa como argumento aprintf
, y esta vez la división porc
es válida. Dado quep
es un miembro del espacio de nombres, se inicializa a cero al inicio del programa y tiene un valor de puntero nulo, por lo que*p
es un comportamiento indefinido. En Linux, debido a que el programa intenta modificar la memoria en la dirección cero, el programa obtiene unSIGSEGV
.fuente
main
Se puede omitir el tipo de retorno, por lo que -3 bytes.Perl 5 y Perl 6 , 55 bytes
¡Prueba Perl 5 en línea! (División ilegal por cero)
¡Prueba Perl 6 en línea! (No existe tal método)
El prefijo
~
es stringificación en Perl 6 y esencialmente un no-op en el programa anterior. En Perl 5, no es bit a bit, convirtiendo -1 a 0..
es la sintaxis de llamada al método en Perl 6 y la concatenación en Perl 5.fuente
C (gcc) / Stax , 109 bytes
Pruébalo en línea! (C (gcc))
Pruébalo en línea! (Stax) o Ejecutar y depurarlo! (Stax)
Segfault en C. Operación no válida en Stax. Me encanta cómo todo lo que no es un comentario se usa realmente en Stax.
do
Así es como C lo ve. La primera línea es no-op. La segunda línea imprime el mensaje con
printf
y luego segfaults debido a=0
.Stax
El programa Stax termina cada vez que intenta saltar o echar un vistazo desde la pila vacía. Esto lo hace un poco complicado y tenemos que preparar una pila que no esté vacía.
AA=~1;
hace esto sin dejar de ser una declaración válida en C.Lo que es realmente útil es
~
que prepara una pila de entrada no vacía para que;
se pueda ejecutar sin salir del programa. Sin embargo, los dos1
s en la pila principal también se usan más tarde.La segunda línea comienza con una pestaña y comienza un comentario de línea en Stax.
La operación no válida está intentando realizar una
/
operación para una cadena como TOS (segundo operando) y el número1
de (*) como primer operando, que no es válido.Si se intercambian los dos operandos, sería una operación válida en Stax.
fuente
Jelly and M , 39 bytes
Pruébalo en gelatina!
Pruébalo en M!
Ambas lenguas se aplican inversa
İ
a0
la que da lugarinf
a la jalea yzoo
de M. no sé quézoo
representa el infinito en M. Pregunta Dennis.La diferencia importante es que el infinito de Jelly es igual a sí mismo, mientras que el infinito de M no lo es. Así, la mónada "es igual a sí misma"
=`
rinde1
en Jelly y0
en M. A partir de aquí:El error de Jelly es
EOFError: EOF when reading a line
.El error de M es
TypeError: '>' not supported between instances of 'str' and 'int'
.fuente
Foo / CJam ,
5150 bytesEsto sale con un error de división por cero en Foo, y a
NumberFormatException
en CJam.A CJam:
/
intenta dividir la cadenaThis program errors out in
en la subcadenaFoo
. Dado que la cadena no contiene la subcadena, esto produce una matriz singleton que contiene la cadena original, que se muestra exactamente de la misma manera.'x
es un carácter literal parax
, que se imprime de la misma manera que una cadena de un carácter. De esta manera, podemos enviar datos para CJam que Foo ignora (no he descubierto cómo hacer que un bucle no se ejecute en Foo).Li
intenta convertir la cadena vacía en un entero, que falla. Todo de la pila está impreso.Para Foo:
/
intenta dividir la celda actual por el elemento de la pila superior (que es un implícito0
). Por alguna razón, los errores de división por 0 no son fatales en Foo, por lo que esto solo imprime el mensaje STDERR y sigue adelante.'C'J'a'm
yLi
) se ignoran.fuente
Only Jon Skeet can divide by zero.
producirse unPython y Lua ,
111110102989585 bytesErrores: Python 3:
Lua
Claramente distinto.
Abusa de múltiples diferencias:
<var>=<a>,<b>,...
crea una tupla en Python, pero en Lua crea una lista de argumentos, de la que solo se toma el primer miembro.#
comienza un comentario en Python, pero es el operador de longitud en Lua. Accesorios adicionales para Python para permitir que las tuplas terminen en una coma.[[...]]
es la sintaxis de cadena multilínea de Lua, lo que significa que ni siquiera ve la función de impresión de Python; esto es necesario debido a que Lua usa la..
concatenación de cadenas y no+
.a
, una variable indefinida; Lua despuész=#print(x.."Lua :P")
. Usar solo#print(x.."Lua :P")
para Lua no funciona, ya que genera un error incluso antes de que se ejecute el código.Ediciones:
"".join
en Python, -1 bytex
una cadena en ambos idiomas y colóquelaPython
en una cadena literal en la función de impresión, -8 bytes#[[]]
es más corto que#""
y--[[]]
, -4 bytes#1
como clave de tabla, -3 bytesprint(x.."Lua :P")
obras, aparentemente; -1 bytefuente
Java y C #
242235Abusar de diferentes manejos de escape entre Java y C # (los escapes Unicode se analizan antes del análisis de código en Java y no en C #) como una especie de preprocesador, ese es el trabajo del
\u0027
magia, el resto son algunos "comentarios de alternancia"Editar: Golfed 8 bytes gracias a un puntero de @KevinCruijssen
Editar: regla derp fija
fuente
String
envar
(Java 10 lo admite). (O 5 cambiandoString s="...";
aString s="...",x;
y retirarString
delante dex=
en Java 9 o antes).AutoHotKey / C #,
155133128122 bytesEl resaltado de sintaxis lo explica mejor de lo que podría:
C # RuntimeBinderException: 'No se puede invocar un tipo no delegado'
Error de AutoHotkey : se produjo una excepción.
Ediciones:
fuente
i+=i[-1]
. System.IndexOutOfRangeException: 'El índice estaba fuera de los límites de la matriz'.dynamic
lugar devar
y lanzar Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'No se puede invocar un tipo no delegado' coni()
.PHP 7+ / JavaScript,
9089 bytesUtiliza 2 idiomas con una sintaxis muy similar, lo que permite escribir este código en ambos idiomas.
La separación del lenguaje se realiza mediante una propiedad no presente en JavaScript: PHP considera
[]
(matriz vacía) un valor falso mientras es verdadero en JavaScript (porque es un objeto y los objetos son siempre verdaderos, inclusonew Boolean(false)
).Ejecución:
Se centrará en el siguiente fragmento de código:
([]?console.log($X,'JavaScript'):printf($X,PHP))();
.La atribución de cadena funciona igual en ambos idiomas.
Este código utiliza el "operador ternario" ( Javascript , PHP ), que funciona principalmente de la misma manera en ambos idiomas.
Javascript
Javascript ejecutará la
console.log($X,'JavaScript')
pieza, que vuelveundefined
.Más adelante, cuando intentas ejecutar
(...)()
, obtienes unUncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function
(en Google Chrome).PHP
PHP ejecutará la
printf($X,PHP)
pieza.En PHP, la
printf
función devuelve la longitud de la salida .PHP tiene una funcionalidad interesante: puede ejecutar funciones cuyo nombre se almacena en una variable (o, desde PHP7, como resultado de una expresión), lo que evita un error de sintaxis.
Entonces PHP intentará ejecutar la función cuyo nombre es el resultado de la expresión
[]? ... :printf($X,PHP)
(que es el número33
).Pero esa funcionalidad interesante tiene una advertencia: solo acepta cadenas (¡duh!).
Esto causa un
Fatal error: Function name must be a string
, porque33
es unint
.¡Gracias a Shieru Asakoto por salvarme 1 byte!
fuente
[]
es más corto'0'
y también se evalúa de manera diferente en JS y PHP, ¿entonces quizás un byte -1 aquí?[]
tiene que ser utilizado en lugar de'0'
,'\0'
,'\0'=="0"
, y usado que[]
antes también. Pero gracias por detectar esta pregunta.Perl 5 y C, 95 bytes
//;
es básicamente un NOP en perl, y es un comentario en C.Entonces el programa C es efectivamente:
Que imprime la cadena requerida, luego intenta ejecutarse
puts(32)
. Este es un comportamiento técnicamente indefinido en C, pero causa una falla de segmentación en TIO y en todos los sistemas a los que tengo acceso.El programa perl trata todo el programa C como una cadena, usa la expresión regular
/T.*n /
para que coincidaThis program errors out in
y luego imprime eso yperl :P
.die
hace que el programa se bloquee con el errorDied at script_name line 2
.Si no le gusta eso como un error,
1/0
tiene la misma longitud y se bloquea con unIllegal division by zero
error. Simplemente me gustadie
más;)Pruébalo en línea! (DO)
Pruébalo en línea! (Perl)
fuente
VBScript, JScript, 72 bytes
VBScript imprimirá "Error de tiempo de ejecución de Microsoft VBScript: No coincide el tipo: 'y'"
JScript imprimirá "Error de tiempo de ejecución de Microsoft JScript: 'y' no está definido"
fuente
JavaScript y Python 3,
10591 bytesErrores por
NameError: name 'console' is not defined
en Python 3Pruébalo en línea!
... y
TypeError: console.log(...) is not a function
en JavaScript.Pruébalo en línea!
fuente
Java (JDK) / JavaScript (Node.js), 154 bytes
Pruébalo en línea! (Java)
Pruébalo en línea! (JavaScript)
Salida en Java:
Salida en JavaScript (a stderr):
Esto aprovecha el tipeo débil de JavaScript (
1=='1'
) para detectar el lenguaje, y las mismas palabras clave en Java y JavaScript (var
,class
), y los constructores de error similares (new Error()
) para hacer el políglota.fuente
PowerShell v6 y PowerShell v2, 73 bytes
Pruébalo en línea!
Esto arrojará un error de análisis en v2 porque
-shl
se introdujo en v3. v3 + podrá cambiar correctamente el valor antes de intentar dividirlo por 0, arrojando convenientemente un error de división por cero. Ambas versiones tienen el hashmap $ PSVersionTable que contiene elPSVersion
campofuente
C (gcc) en Linux / C (gcc) en Mac (160)
No probado en Mac; básicamente, John Cook señaló (en su blog ) que POSIX no define gamma; Linux usa el registro de la función gamma (log (gamma (1)) devolverá 0, lo que desencadenará una excepción de coma flotante); OSX usa la función gamma "verdadera" (que oficialmente se llama tgamma por POSIX); esto devuelve 1 que luego golpeará la declaración abortar; Traté de hacer que arrojara un error de coma flotante diferente (por ejemplo, sqrt (-1) pero me estoy olvidando de cómo hacer que arroje un error frente a solo devolver cero)
fuente
Perl, Bash (78 bytes)
Salida en Perl:
Salida en Bash:
(Tenga en cuenta que Bash está mostrando el
line 4
error, a pesar de que la línea 3 no termina con un avance de línea ...)fuente
C y ECPP, 112 bytes
Hangup
.Illegal instruction
.fuente
C (gcc) y Haskell , 135 bytes
¡Pruébelo en línea (С)! ¡Pruébelo en línea (Haskell)!
El resultado se logra entretejiendo los comentarios, siendo la versión C esencialmente esta:
(La falla se logra escribiendo antes del comienzo de la cadena).
La versión de Haskell, por otro lado, se reduce a lo siguiente:
(El fracaso se logra tomando la cola de una lista vacía)
fuente