¡Adiós mundo cruel!

49

Antecedentes

Hola golfistas! ¡Me gustaría aprender todos los lenguajes de programación! Pero tengo un poco de atención ... y copiar todos los ejemplos de Hello World se vuelve aburrido ... ¡pero me gusta el fuego! ^ w ^

Desafío

¡Así que aquí está el plan! Quiero que todos escriban el código más pequeño que compilará, imprimirá Goodbye Cruel World!y luego se bloqueará. O, como desafío adicional, imprima Hello World!y bloquee conGoodbye Cruel World!

Reglas

  • Su puntuación será el recuento total de caracteres utilizado. La respuesta debe ser un programa ejecutable completo.
  • Su programa debe imprimir Goodbye Cruel World!a la salida y luego bloquearse (error inesperado).
    • Para obtener una bonificación de puntaje, debe imprimir Hello World!en la salida, pero el mensaje de error también debe contener Goodbye Cruel World!. Si completa el desafío de bonificación, puede dividir su puntaje por 2. (¡Incluya a! Al final de su puntaje si reclama el bono!)
  • Mientras la salida estándar todavía se imprima, y ​​el error estándar aún se imprima, el orden no importa. Siempre y cuando ninguno pueda impedir que el otro suceda.
  • La salida debe contener el contenido de lo anterior; "no debería aparecer en la salida.
  • La salida debe contener la cadena especificada y nada más.
  • El informe de bloqueo puede contener cualquier cosa, pero para reclamar la bonificación, la siguiente expresión regular debe coincidir /Goodbye Cruel World!/mi(es decir, contiene, ignorar mayúsculas y minúsculas)
  • Las cadenas Hello World!y no Goodbye Cruel World!distinguen entre mayúsculas y minúsculas, pero de lo contrario deberían aparecer exactamente como se indica arriba.
  • Si el idioma es capaz de bloquearse (no puede cambiar su código de salida), debe bloquearse. De lo contrario, utilice el "informe de error" estándar (es decir, STDERR) para el idioma.

Puedo bloquear Python 3, así que he incluido un ejemplo de respuesta Python 3. ¡Ahora vamos a prender fuego al mundo! ^ W ^

Tezra
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Dennis
as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"?
Magic Octopus Urn
Supongamos que estoy trabajando en un lenguaje como Java, donde STDOUT y STDERR están, por supuesto, impresos en diferentes hilos. Esto significa que, aunque el programa, en orden, imprime "Hola mundo" y luego se bloquea, es posible que la traza de la pila se imprima primero ... ¿Está permitido?
Phoenix Socrático
@SocraticPhoenix Mientras STDOUT todavía se imprima y STDERR aún se imprima, el orden no importa. Siempre y cuando ninguno pueda impedir que el otro suceda.
Tezra
1
¡Esto es muy divertido, no puedo dejar de hacer soluciones!
Adám

Respuestas:

36

Jalea , 12 bytes

“¿µƝɓṭỵae»Ȯ:

Pruébalo en línea!

Explicación:

“¿µƝɓṭỵae»Ȯ:

          Ȯ     Print
“¿µƝɓṭỵae       A string...
         »      Decoded from base-250
           :    Integer division

Como la división entera es una diada, tomará implícitamente el valor actual de la cadena como ambos argumentos, que es una cadena. Se bloquea porque espera enteros.

dispersión
fuente
77
Bienvenido a PPCG!
Dennis
¡Gracias! ¡He estado al acecho por un tiempo, pero esta es la primera vez que encuentro un desafío que siento que realmente puedo resolver decentemente!
dispersión
28
Respuesta impresionante, aunque casi todas las respuestas de Jelly son impresionantes, tanto por la longitud como por el hecho de que lograste aprender Jelly.
Gryphon - Restablece a Monica el
44
A base-250 encoded stringEs genial y aterrador que puedas hacer eso. X3
Tezra
3
Esto es significativamente más corto que la cadena "¡Adiós mundo cruel!" (20 bytes). Crazy ...
Adam Plocher
35

C, 43 bytes

main(){puts(puts("Goodbye Cruel World!"));}

Imprime la cadena y luego intenta usar el valor de retorno como un puntero para que se imprima otra cadena, lo que provoca un error de segmentación.

Pruébalo en línea!

C, 42 bytes

Gracias a @Ruslan!

main(i){i=puts("Goodbye Cruel World!")/0;}

Pruébalo en línea!

Solo por diversión: C (en Linux de 64 bits), 149 bytes

Modificado de este programa Hello World aquí .

const int main[]={-443987883,440,113408,-1922629632,4149,1358336,84869120,15544,266023168,1869563654,1702453860,1970422560,1461742693,1684828783,33};

Pruébalo en línea!

Steadybox
fuente
Me gusta este enfoque, pero las instrucciones dicenThe answer must be a whole executable program.
Cody
1
main(i){i=puts("Goodbye Cruel World!")/0;}quita un byte.
Ruslan
1
No es necesario i. puts("")/0;es una declaración sintácticamente correcta.
rici
1
@rici Sí, pero no se bloquea (al menos en TIO).
Steadybox
1
@ Steadybox: esa es la optimización para usted.
rici
11

SOGL , 15 25 17 bytes / 2 = 8.5!

Q7┌θ/²?‘■←#c℮‘o0n

Explicación:

...‘           push "goodbye cruel world!"
    ...‘       push "hello world!"
         o     output "Hello World!"
           0n  attempt to make an array where each line is 0 characters long, making the array
               required to be infinite, which crashes (OutOfMemoryError)

(Ab) usa el hecho de que SOGL usa STDERR como salida de depuración, por lo que hay mucho texto, junto con la línea

`∑`@22: ["goodbye cruel world!"]

Si canalizaste el STDOUT del boceto Procesando a un archivo, el "¡Adiós mundo cruel!" estaría allí.

dzaima
fuente
Dado que el desafío menciona " Las cadenas Hello World!y no Goodbye Cruel World!distinguen entre mayúsculas y minúsculas, pero de lo contrario deberían aparecer exactamente como se indica arriba ", puede jugar golf su código al deshacerse de la función por completo y simplemente emitir en minúsculas.
Kevin Cruijssen
@KevinCruijssen ¡oh, gracias!
dzaima
10

> <> , 25 bytes

"!dlroW leurC eybdooG">o<

Básicamente agrega la cadena a la pila (hacia atrás, la última entrada, la primera salida) y luego hace el equivalente de:

while(1):
  pop the stack
  print the character

Cuando no quedan caracteres en la pila (se ha impreso toda la cadena) al abrir la pila aparece un error

AGourd
fuente
+1. Llegó a #o<"Goodbye Cruel World!", que es básicamente lo mismo.
hakr14
9

sed, 32 bytes

iGoodbye Cruel World!
w/dev/full

iinserta una línea y wescribe en un archivo. /dev/fullen este caso porque todas las escrituras regresan ENOSPC("No queda espacio en el dispositivo").

Sin embargo, todavía necesita una sola línea de entrada para funcionar.

$ echo 1 | sed -f crash.sed
Goodbye, cruel world!
sed: couldn't flush /dev/full: No space left on device
chico albaricoque
fuente
3
¡Ni siquiera sabía que existe tal dispositivo!
Ruslan
9

Lua, 31 , 30 bytes

a=-print'Goodbye Cruel World!'

primero imprime '¡Adiós mundo cruel!' y luego se bloquea al intentar agregar un valor nulo y 0.

Salida:

Goodbye Cruel World!
input:1: attempt to perform arithmetic on a nil value

Crédito a GalladeGuy por 1 byte menos

eniallator
fuente
2
imprime "¡Adiós mundo cruel!" y luego se bloquea, aunque pensé que simplemente tendría que bloquearse para ser aceptado.
eniallator
@Trebuchette El requisito es "Su programa debe imprimir Goodbye Cruel World! Para que salga y luego se bloquee", el OP no especificó si "salida" significa stderr, stdout, un cuadro de mensaje o cualquiera de los anteriores.
Pharap
@Pharap Oh, ya veo. STDERR solo importa si vas por la bonificación. ¡Gracias!
Trebuchette
@Trebuchette Nope. Dice "O, como un desafío de giro adicional, imprima Hello World! Y choque con Goodbye Cruel World!". 'crash' no necesariamente implica stderr, 'crash' también puede significar (entre otras cosas) una excepción lanzada. A menos que el OP lo defina más, está abierto a interpretación. También algunas aplicaciones de Lua tienen ningún concepto de stderr (por ejemplo Lua incrustado como un lenguaje de programación para juegos) y en su lugar imprimir en un cuadro de mensaje o un archivo de registro, etc.
Pharap
1
Puede guardar un byte haciendo esto en su lugar:a=-print"Goodbye Cruel World!"
GalladeGuy
8

Python 3 | Puntuación: 24.5! 23 22!

print("Hello World!")+"Goodbye Cruel World!"

Imprima "Hello World", que utilice el operador no válido '+' en "Goodbye Cruel World!" al elemento de retorno NoneType. (recortar \ n \ r de la versión anterior)

Pruébalo en línea!

Python 3 | Puntuación: 34 30

+print("Goodbye Cruel World!")

Print Goodbye, que hacer una operación unaria + no válida en el resultado de impresión (NoneType)

Pruébalo en línea!

Tezra
fuente
+"Goodbye Cruel World!"es más corto en 3 bytes y genera un TypeError.
Gábor Fekete
print("Goodbye Cruel World!")/0es más corto para el segundo (¿3 bytes?)
matsjoyce
@matsjoyce Tenía miedo de que se bloqueara antes de la impresión. Pero como se imprime primero, solo haré unary en el 'resultado' de impresión: 3
Tezra
24
2.585e + 22 es un puntaje bastante grande ... ¿estás seguro de que no podrías jugar más?
tuskiomi
1
@tuskiomi El '!' significa que la puntuación final se modifica por el desafío de bonificación.
Tezra
6

¡AWK , 72 bytes, puntaje 36!

BEGIN{print"Hello World!";print"Goodbye Cruel World!">"/dev/stderr";0/0}

Pruébalo en línea!

AWK no le gusta tratar de dividir por 0.

Robert Benson
fuente
6

CJam , 34 bytes, puntaje 17!

"Goodbye Cruel World!"D>"Hello"ooo

Pruébalo en línea! (Ver panel de depuración para STDERR)

Explicación

"Goodbye Cruel World!"              e# Push "Goodbye Cruel World!".
                      D>            e# Slice after index 13: " World!".
                        "Hello"o    e# Push "Hello" and print it.
                                o   e# Print " World!".
                                 o  e# Attempt to print from an empty stack. Crashes.

En TIO, genera este mensaje de error:

"Goodbye Cruel World!"D>"Hello"ooo
                                 ^
RuntimeException: The stack is empty
Java exception:
java.lang.RuntimeException: The stack is empty
    at net.aditsu.cjam.CJam.pop(CJam.java:75)
    at net.aditsu.cjam.Op1.run(Op1.java:10)
    at net.aditsu.cjam.Block.run(Block.java:304)
    at net.aditsu.cjam.CJam.runCode(CJam.java:210)
    at net.aditsu.cjam.CJam.main(CJam.java:240)
Gato de negocios
fuente
6

Preprocesador C, 27 bytes

#error Goodbye Cruel World!

Salida:

fatal error C1189: #error:  Goodbye Cruel World!
Govind Parmar
fuente
1
Puede acortarlo aún más con solo#Goodbye Cruel World!
albaricoquero
@apricotboy Eso aún produciría un error, pero el compilador no emite el mensaje de error completo "adiós mundo cruel" (al menos en MSVC)
Govind Parmar
@Gorvind Parmar ah. Bueno, definitivamente lo hace en gcc: i.imgur.com/qmGnoJv.png
albaricoquero
6

APL (Dyalog) , 17.5 bytes

Sin bono, 20 bytes

Goodbye Cruel World!

Pruébalo en línea!

Tenga en cuenta que el código no está entre comillas, por lo que APL intenta ejecutarlo pero Worldno está definido, lo que provoca un bloqueo de VALOR ERROR con la línea de código ofensiva incluida en el mensaje de error.

Con bonificación, 35 ÷ 2 = 17.5 bytes

'Hello World!'
Goodbye Cruel World!

Pruébalo en línea!

Primero imprime la cadena requerida, luego se bloquea como el programa anterior.

Versión de bonificación más sofisticada, 35 ÷ 2 = 17.5 bytes

'Goodbye Cruel',5↓⎕←'Hello World!'

Pruébalo en línea!

Imprime la primera cadena, luego suelta los primeros cinco caracteres de ese ( 5↓), luego concatena ese ( ,) a un nuevo prefijo, y luego intenta ejecutar ( ) eso, causando el mismo error que el anterior.

Adán
fuente
1
@Cyoce Typo. Gracias
Adám
5

Bash 20.5! 18.5!

No voy a golpear a gelatina, pero soy un poco tímido de mi golpe al descifrar un script de golpe rápido. 18.5 no es tan malo para un lenguaje que no sea de golf. (Tenga en cuenta que esto tiene que ser un script, bash interactivo intentará interpretarlo !como una búsqueda de historial)

echo Hello World!
Goodbye\ Cruel\ $_

Devuelve con el código de error 127 y:

Hello World!
bash.sh: line 2: Goodbye Cruel World!: command not found

Según lo solicitado no "'s ... en cualquier lugar :). Como lo sugerí apricot boy, ahora busco el último argumento del comando anterior para guardar 4 bytes.

gmatht
fuente
Traté de vencerte ... ¡y fallé con 21! bytes :) W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
reitermarkus
1
Probablemente se podría cambiar la segunda línea Goodbye\ Cruel\ !$, no al 100%, pero bastante seguro de que !$es "la última palabra del último comando"
muchacho de albaricoque
Pero, ¿y si un ejecutable llamado "Adiós mundo cruel" existe en la RUTA? :)
Spuck
Verificado OK en TIO.run ... supera mi respuesta zsh: /
roblogic
4

TeX, 19!

Hello World!#\bye Goodbye Cruel World!

Para forzar a TeX a producir un archivo dvi / pdf sin intervención manual, compile con -interaction=nonstopmode.

Imprime Hello World!, arroja un error para usar #cuando no se supone que debe hacerlo y luego detiene la compilación \bye. Sin embargo, todo \byelo que sigue se muestra en el mensaje de error, por lo que se aplica para la bonificación.

cp.fe.cp
fuente
4

WinDBG (depuración del kernel local de Windows XP / Vista), 33 bytes

.echo Goodbye Cruel World!;.crash

Advertencia: Esto bloqueará toda la máquina, no solo el programa.

La depuración local del kernel solo está permitida en Windows XP y Vista (pero no está habilitada de forma predeterminada en Vista). El cuadro de diálogo WinDBG sobre la depuración del kernel local no menciona ningún otro sistema operativo Windows, así que supongo que ni siquiera se puede habilitar para esos. Presumiblemente para otros sistemas operativos Windows, puede conectarlo a una máquina remota para la depuración del kernel, pero es la máquina remota la que fallará, así que no creo que esta solución cuente allí.

Leche
fuente
La depuración del kernel local también es compatible con Windows 7, y no he oído que se haya eliminado desde entonces (pero es posible que lo haya perdido).
Cody Gray
4

JS (ES5), 46/2 = 23 bytes!

alert("Hello, World!")["Goodbye Cruel World!"]

Alertas Hello, World!, luego errores conUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined


fuente
4

PowerShell, 26 bytes

'Goodbye Cruel World!';1/0

Creo que dividir por 0 es la forma más fácil de arrojar un error.

PowerShell, 35/2 = 17.5 Bytes

"Hello World!";Goodbye Cruel World!

por TessellatingHeckler , arroja el error así:

PS C:\Users\Connor> "Hello World!";Goodbye Cruel World!
Hello World!
Goodbye : The term 'Goodbye' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:16
+ "Hello World!";Goodbye Cruel World!
colsw
fuente
¿No debería ser $w='World!'(con un !)?
gmatht
"Hello World!";Goodbye Cruel World!es de 17.5 bytes, arroja una excepción porque Goodbye no se reconoce como un comando, y el mensaje de excepción incluye la línea completa para que coincida con la expresión regular ..
TessellatingHeckler
1
Usando la misma lógica que la respuesta de 17.5b, 'Goodbye Cruel World!';xahorraría dos bytes para 24
Veskah
4

Lenguaje de script Operation Flashpoint , 45/2 = 22.5 bytes

f={hint"Hello World!";a Goodbye Cruel World!}

Llamar con:

call f;

Salida:

Steadybox
fuente
4

Node.js, Puntuación: 25.5 24.5!

Ahorró 1 punto gracias a ETHproductions

Un programa completo sintácticamente correcto que se bloquea en tiempo de ejecución porque console.log()no devuelve una función.

console.log('Hello World!')`Goodbye Cruel World!`

Pruébalo en línea!

Arnauld
fuente
Lamentablemente, no hay factorial para 25.5...: ((
Mr. Xcoder
@ Mr.Xcoder Es Gamma(26.5), como con la definición de Mathematica.
user202729
1
@ user202729 ¿Quién dijo que Mathematica no está roto? :)))
Sr. Xcoder
¿Puedes eliminar el X(y tal vez incluso la nueva línea)?
ETHproductions
@ETHproductions Sí, de hecho. ¡Gracias!
Arnauld
3

Aceto , puntuación: 21.5!

yeru
b Ce+
do l"d
GoWorl
"!dl
p"or
HeW
"llo

Imprime Hello World!, luego se bloquea con

Traceback (most recent call last):
  File "/Users/l3viathan/bin/aceto", line 230, in _plus
    self.push(y+x)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/l3viathan/bin/aceto", line 811, in <module>
    A.run()
  File "/Users/l3viathan/bin/aceto", line 104, in run
    raise e
  File "/Users/l3viathan/bin/aceto", line 98, in run
    self.step()
  File "/Users/l3viathan/bin/aceto", line 152, in step
    method(self, cmd)
  File "/Users/l3viathan/bin/aceto", line 233, in _plus
    raise CodeException(f"Can't add {x!r} to {y!r}")
__main__.CodeException: Can't add 'Goodbye Cruel World' to 0
L3viatán
fuente
3

Pyth, 28 24 bytes

"GOODBYE CRUEL WORLD!"hY

Imprime una cadena, luego intenta obtener el primer elemento de la lista vacía.

¡Prueba esto!

KarlKastor
fuente
3

AHK, 50/2 = 25! (no competidor)

No competir porque un requisito adicional hizo que la respuesta no sea válida. No puedo encontrar una manera de compilarlo, generar el texto y bloquearlo. Lo que sea que intente falla al menos uno de esos requisitos.


Send,Hello World!
OutputDebug,Goodbye Cruel World!

Esta es la solución más aburrida que se me ocurre. En realidad no se bloquea, pero técnicamente no es un requisito. Todo lo que tiene que hacer es enviar un mensaje a la ventana de depuración. Lo hace porque le digo que lo haga.

Tostadas de ingeniero
fuente
Esto no es válido actualmente. OP afirma que el programa debe bloquearse si el idioma es capaz, si eso es lo que es AHK.
internet_user
@pycoder Ah, eso fue agregado 40 minutos después de que publiqué. Actualizaré la nueva regla, pero costará bytes.
Engineer Toast
3

Japt , 22 bytes

°Oo`!dlžW ¤¨C eybºoG`w
°Oo`!dl&#158;W ¤¨C eybºoG`w
 Oo                            output
   `!dl&#158;W ¤¨C eybºoG`     the compressed string "!dlroW leurC eybdooG"
                          w    reversed.
°                              ° transpiles to ++, causing an error; a string can't be incremented

Pruébalo en línea!

Guardado 3 bytes gracias a obarakon y ETHproductions

Tom
fuente
Puede comprimir la cadena usando Oc"<string>"y luego reemplazar la cadena actual con la versión comprimida y rodeada por comillas.
Luke
Una explicación estaría bien.
iFreilicht
1
Explicación @iFreilicht agregada.
Tom
3

C #, 116/2 = 58 bytes!

using System;class P{static void Main(){Console.Write("Hello World!");throw new Exception("Goodbye Cruel World!");}}

Versión normal para 94 87 bytes:

class P{static void Main(){System.Console.Write("Goodbye Cruel World!");int n=0;n/=n;}}

Guardado 7 bytes gracias a @KevinCruijssen.

TheLethalCoder
fuente
int n=0;n/=n;es más corto para tu primera respuesta.
Kevin Cruijssen
@KevinCruijssen Buen lugar, estaba teniendo problemas para que compilara sin división por error constante cero.
TheLethalCoder
Sí, en Java puedes hacerlo int n=1/0;, pero aparentemente eso no es posible en C # (que en realidad es algo bueno para el lenguaje, pero malo para codegolfing). Por cierto, ¿por qué no está el bono en la parte superior? Ese es más corto.
Kevin Cruijssen
@KevinCruijssen No estaba seguro de si calificaba, ya que no estaba claro cuando publiqué mi respuesta, ya que se ha aclarado aún más que los cambié.
TheLethalCoder
3

Jalea , 10.5! bytes

“,ḷṅḳȦ»¹“¿µƝɓṭỵae»+/R

Pruébalo en línea!

Esto explota el comportamiento indefinido, utilizando cadenas de Python (cadenas) en lugar de cadenas Jelly (lista de cadenas 1-char). La conversión se realiza mediante la reducción de la cadena Jelly por adición, y Python +concatena dos cadenas, por lo que dos cadenas sumadas se concatenan en Python. Luego, usa la mónada (rango) apropiada para que Python intsea ​​llamado en la cadena, lo que resulta en un error que siempre contendrá Goodbye Cruel World!.

Explicación:

“,ḷṅḳȦ»¹“¿µƝɓṭỵae»+/R Main Link, niladic.
“,ḷṅḳȦ»¹              Print "Hello World!"
        “¿µƝɓṭỵae»+/  Convert "Goodbye Cruel World!" to a Python string
                    R Make a range out of it
Erik el Outgolfer
fuente
3

Ruby, 43 42 bytes / 2 = 21!

puts"Hello World!"
-"Goodbye cruel World!"

Se salvó medio byte con la ayuda de Alexis Andersen, reemplazándolo "String"/0por -"String". ¡Esto solo "funciona" con versiones de Ruby inferiores a la 2.3, en las que el método menos unario en realidad se agregó a la clase String!

Con Ruby <2.3:

$ ruby -e 'puts"Hello World!";-"Goodbye cruel World!"'
Hello World!
-e:1:in `<main>': undefined method `-@' for "Goodbye cruel World!":String (NoMethodError)

Con Ruby> = 2.3:

$ ruby -e 'puts"Hello World!";"Goodbye cruel World!"/0'
hello world!
-e:1:in `<main>': undefined method `/' for "Goodbye cruel World!":String (NoMethodError)
daniero
fuente
puede guardar (medio) un byte utilizando -la cadena en lugar de, por /ejemplo-"Goodbye crueld World!"
Alexis Andersen
@AlexisAndersen gracias! Hoy también aprendí sobre un nuevo método en la clase String (ver publicación actualizada)
daniero
3

Código binario x86-64 (con llamadas al sistema Linux), 43 bytes

Desmontaje

0:  31 c0                   xor    eax,eax
2:  ff c0                   inc    eax            ; write syscall number = 1
4:  31 ff                   xor    edi,edi
6:  ff c7                   inc    edi            ; stdout file descriptor = 1
8:  48 8d 35 07 00 00 00    lea    rsi,[rip+0x7]  ; load the string at offset 16 into rsi
f:  31 d2                   xor    edx,edx
11: b2 15                   mov    dl,0x15        ; 21 byte string
13: 0f 05                   syscall
15: f4                      hlt
16: 47 6f 6f 64 62 79 65 20 43 72 75 65 6c 20 57 6f 72 6c 64 21 0a .ascii "Goodbye Cruel World!\n"

Note: 0x16 code bytes + 0x15 string bytes = 0x2B = 43 total bytes

Este programa agrupa los datos que necesita (la cadena "Goodbye Cruel World!\n") en su propio código. Carga un puntero a esa cadena usando el ripdireccionamiento relativo, y llama a la llamada al writesistema directamente en lugar de hacerlo a través de un contenedor glibc, por lo que es completamente independiente de la posición, y podemos probarlo fácilmente incrustando el código en una constcadena y convirtiendo esa cadena en una función puntero. Para bloquear el programa, lo finalizo con una hltinstrucción, que con privilegios de anillo 0 silenciaría el procesador para siempre (o al menos hasta que llegue la próxima interrupción), pero con privilegios de anillo 3 (típico para programas de usuario) obtenemos mucho menos dramática Segmentation Fault.

Programa de prueba:

#include <stdio.h>

const char code[43] = "\x31\xC0\xFF\xC0\x31\xFF\xFF\xC7\x48\x8D\x35\x07\x00\x00\x00\x31\xD2\xB2\x15\x0F\x05\xF4Goodbye Cruel World!\n";

int main() {
    printf("Code bytes: %zi\nNow running the code:\n\n", sizeof(code));
    ((void(*)())code)();
    printf("Failed to crash, now exiting!\n");
    return 0;
}

Salida:

Code bytes: 43
Now running the code:

Goodbye Cruel World!
Segmentation fault

Tenga en cuenta que el código de 43 bytes es un programa completo según lo especificado por el desafío, no solo una función. No depende de la mainfunción del programa de prueba para funcionar correctamente; aún imprimirá la cadena y se bloqueará si el cargador la carga y salta directamente a ella.

Tuerca calculadora
fuente
Ahorre algunos bytes usando push/ poppara cargar registros. Por ejemplo, las dos primeras instrucciones pueden ser push 1+ pop rax, que es 1 byte más corto. Luego, las siguientes dos instrucciones se pueden reemplazar por mov edi, eax2 bytes más cortas. El mismo push/ poptruco se puede aplicar a las instrucciones 6 y 7: push 0x15+ pop rdx.
Cody Gray
3

Pyth , 38/2 = 19 bytes! 36/2 = 18 bytes!

"Hello World!"v"Goodbye Cruel World!

¡Pruébalo en línea!

Explicaciones

Imprime Hello World!, luego intenta evaluar Goodbye Cruel World!. No lo hace porque esa cadena no es un código válido.

El resultado es:

Hello World!
Traceback (most recent call last):
  File "pyth.py", line 760, in <module>
  File "<string>", line 4, in <module>
  File "/app/macros.py", line 1085, in Pliteral_eval
  File "/app/.heroku/python/lib/python3.4/ast.py", line 46, in literal_eval
  File "/app/.heroku/python/lib/python3.4/ast.py", line 35, in parse
  File "<unknown>", line 1
    Goodbye Cruel World!
                ^
SyntaxError: invalid syntax
Jim
fuente