Adeus mundo cruel!

49

fundo

Olá golfistas! Eu gostaria de aprender todas as linguagens de programação! Mas eu tenho um pouco de atenção ... e copiar todos os exemplos do Hello World fica chato ... mas eu gosto de fogo! ^ w ^

Desafio

Então aqui está o plano! Quero que todos escrevam o menor código que será compilado, impresso Goodbye Cruel World!e travado. Ou, como um desafio adicional, imprima Hello World!e trava comGoodbye Cruel World!

Regras

  • Sua pontuação será a contagem total de caracteres usada. A resposta deve ser um programa executável inteiro.
  • Seu programa deve imprimir Goodbye Cruel World!na saída e travar (erro inesperado).
    • Para obter um bônus de pontuação, você deve imprimir Hello World!a saída, mas a mensagem de erro também deve conter Goodbye Cruel World!. Se você completar o desafio do bônus, poderá dividir sua pontuação por 2. (Inclua um! No final da sua pontuação, se estiver reivindicando o bônus!)
  • Desde que a saída padrão ainda seja impressa e o erro padrão ainda seja impresso, o pedido não importa. Contanto que nenhum deles possa impedir que o outro aconteça.
  • A saída deve conter o conteúdo acima; "não deve aparecer na saída.
  • A saída deve conter a sequência especificada e nada mais.
  • O relatório de falha pode conter qualquer coisa, mas para reivindicar o bônus, a seguinte expressão regular deve corresponder /Goodbye Cruel World!/mi(aka, contém, ignorar maiúsculas / minúsculas)
  • As strings Hello World!e Goodbye Cruel World!não diferenciam maiúsculas de minúsculas, mas devem aparecer exatamente como acima.
  • Se o idioma for capaz de travar (não pode alterar seu código de saída), ele precisará travar. Caso contrário, use o "relatório de erros" padrão (ou seja, STDERR) para o idioma.

Posso travar o Python 3, por isso incluí um exemplo de resposta do Python 3! Agora vamos todos incendiar o mundo! ^ W ^

Tezra
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Dennis
as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"?
Magic Octopus Urn
Suponha que eu esteja trabalhando em uma linguagem como Java, onde STDOUT e STDERR são, é claro, impressos em diferentes threads. Isso significa que, embora o programa, em ordem, imprima "Hello world" e depois trava, é possível que o rastreamento da pilha seja impresso primeiro ... Isso é permitido?
socrático Phoenix
@SocraticPhoenix Desde que STDOUT ainda imprima e STDERR ainda imprima, o pedido não importa. Contanto que nenhum deles possa impedir que o outro aconteça.
Tezra
11
Isso é muito divertido, não consigo parar de criar soluções!
Adám

Respostas:

36

Gelatina , 12 bytes

“¿µƝɓṭỵae»Ȯ:

Experimente online!

Explicação:

“¿µƝɓṭỵae»Ȯ:

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

Como a divisão inteira é uma díade, implicitamente assumirá o valor atual da cadeia como ambos os argumentos - que é uma sequência. Falha porque espera números inteiros.

dispersão, espalhar
fonte
7
Bem-vindo ao PPCG!
Dennis
Obrigado! Estou espreitando por um tempo agora, mas esta é a primeira vez que encontrei um desafio que eu sentia que poderia resolver decentemente!
scatter
28
Resposta impressionante, embora quase todas as respostas do Jelly sejam impressionantes, tanto pelo tamanho quanto pelo fato de você ter aprendido o Jelly.
Gryphon - Restabelece Monica
4
A base-250 encoded stringIsso é legal e assustador, você pode fazer isso. X3
Tezra
3
Isso é significativamente mais curto que a string "Adeus mundo cruel!" (20 bytes). Louco ...
Adam Plocher
35

C, 43 bytes

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

Imprime a sequência e tenta usar o valor de retorno como um ponteiro para outra sequência a ser impressa, o que causa uma falha de segmentação.

Experimente online!

C, 42 bytes

Graças a @Ruslan!

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

Experimente online!

Apenas por diversão: C (no Linux de 64 bits), 149 bytes

Modificado a partir deste programa Hello World aqui .

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

Experimente online!

Steadybox
fonte
Eu gosto desta abordagem, mas as instruções dizem,The answer must be a whole executable program.
Cody
11
main(i){i=puts("Goodbye Cruel World!")/0;}retira um byte.
Ruslan
11
Você não precisa i. puts("")/0;é uma declaração sintaticamente correta.
rici
11
@rici Sim, mas não trava (pelo menos no TIO).
Steadybox
11
@Steadybox: isso é otimização para você.
rici
11

SOGL , 15 25 17 bytes / 2 = 8,5!

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

Explicação:

...‘           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 o fato de que SOGL usa STDERR como uma saída de depuração; portanto, há muito texto junto com a linha

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

Se você canalizou o STDOUT do esboço Processing para um arquivo, o "Adeus mundo cruel!" estaria lá.

dzaima
fonte
Como o desafio menciona " As strings Hello World!e não Goodbye Cruel World!fazem distinção entre maiúsculas e minúsculas, mas devem aparecer exatamente como acima " .
Kevin Cruijssen
@KevinCruijssen oh huh, obrigado!
Dzaima 23/08/19
10

> <> , 25 bytes

"!dlroW leurC eybdooG">o<

Basicamente, ele adiciona a string à pilha (para trás, por último, em primeiro a sair) e depois faz o equivalente a:

while(1):
  pop the stack
  print the character

Quando não há caracteres restantes na pilha (a sequência inteira foi impressa), o aparecimento da pilha gera um erro

AGourd
fonte
+1. Veio #o<"Goodbye Cruel World!", que é basicamente o mesmo.
hakr14
9

sed, 32 bytes

iGoodbye Cruel World!
w/dev/full

iinsere uma linha e wgrava em um arquivo. /dev/fullneste caso, porque todas as gravações retornam ENOSPC("Não resta espaço no dispositivo").

No entanto, ele ainda precisa de uma única linha de entrada para funcionar.

$ echo 1 | sed -f crash.sed
Goodbye, cruel world!
sed: couldn't flush /dev/full: No space left on device
menino de damasco
fonte
3
Nem sabia que existe um dispositivo assim!
Ruslan
9

Lua, 31 , 30 bytes

a=-print'Goodbye Cruel World!'

primeiro imprime 'Adeus mundo cruel!' e depois falha ao tentar adicionar um valor nulo e 0.

Resultado:

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

Crédito para GalladeGuy por 1 byte a menos

eniallator
fonte
2
ele imprime 'Adeus mundo cruel!' e, em seguida, trava embora, o que eu pensei que simplesmente teria que travar para ser aceito.
eniallator
@Trebuchette O requisito é "Seu programa deve imprimir o Adeus Mundo Cruel!!
Pharap
@ Sharap Oh, entendo. O STDERR só importa se você está buscando o bônus. Obrigado!
Trebuchette
@Trebuchette Nope. Diz "Ou, como um desafio bônus, imprima Hello World! E colidir com o Goodbye Cruel World!". 'crash' não implica necessariamente stderr, 'crash' também pode significar (entre outras coisas) uma exceção lançada. A menos que o OP o defina ainda mais, ele estará aberto à interpretação. Além disso, algumas aplicações da Lua não têm noção de stderr (por exemplo Lua incorporado como uma linguagem de script para jogos) e, ao contrário, imprimir em uma caixa de mensagem ou um arquivo de log etc.
Pharap
11
Você pode salvar um byte fazendo isso:a=-print"Goodbye Cruel World!"
GalladeGuy
8

Python 3 | Pontuação: 24,5! 23 22!

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

Imprima "Hello World" e use o operador inválido '+' em "Goodbye Cruel World!" para o elemento de retorno NoneType. (recortado \ n \ r da versão anterior)

Experimente online!

Python 3 | Pontuação: 34 30

+print("Goodbye Cruel World!")

Imprimir adeus, do que executar uma operação unária + inválida no resultado da impressão (NoneType)

Experimente online!

Tezra
fonte
+"Goodbye Cruel World!"é menor em 3 bytes e gera um TypeError.
Gábor Fekete
print("Goodbye Cruel World!")/0é mais curto para a segunda (3 bytes?)
matsjoyce
@matsjoyce Eu estava com medo de que falhasse antes da impressão. Mas desde que ele imprime em primeiro lugar, eu vou apenas fazer unário na impressão 'resultado': 3
Tezra
24
2.585e + 22 é uma pontuação bastante grande ... você tem certeza de que não poderia jogar mais?
tuskiomi
11
@tuskiomi The '!' significa que a pontuação final é modificada pelo desafio do bônus.
Tezra
7

R, 22 20! bytes (44/2) (40/2)

cat("Hello World!")
`Goodbye Cruel World!`

Experimente online!

Resultado:

Olá Mundo!

Erro: objeto 'Adeus mundo cruel!' não encontrado

Economizou dois pontos graças ao digEmAll

rturnbull
fonte
Você pode reduzi-lo para 40/2 Experimente online!
precisa saber é o seguinte
6

AWK , 72 bytes, Pontuação 36!

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

Experimente online!

AWK não gosta de tentar dividir por 0.

Robert Benson
fonte
6

CJam , 34 bytes, 17!

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

Experimente online!(Consulte o painel Debug para STDERR)

Explicação

"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.

No TIO, ele gera esta mensagem de erro:

"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 negócios
fonte
6

Pré-processador C, 27 bytes

#error Goodbye Cruel World!

Resultado:

fatal error C1189: #error:  Goodbye Cruel World!
Govind Parmar
fonte
11
Você pode reduzi-lo ainda mais com apenas#Goodbye Cruel World!
apricot boy
@apricotboy Isso ainda iria produzir um erro, mas a mensagem de erro completo "Adeus mundo cruel" não é emitido pelo compilador (em MSVC pelo menos)
Govind Parmar
@Gorvind Parmar ah. Bem, isso definitivamente faz no gcc: i.imgur.com/qmGnoJv.png
menino de damasco
6

APL (Dyalog) , 17,5 bytes

Sem bônus, 20 bytes

Goodbye Cruel World!

Experimente online!

Observe que o código não está entre aspas; portanto, o APL tenta executá-lo, mas World não está definido, causando uma falha no VALUE ERROR com a linha de código incorreta incluída na mensagem de erro.

Com bônus, 35 ÷ 2 = 17,5 bytes

'Hello World!'
Goodbye Cruel World!

Experimente online!

Primeiro imprime a string necessária e depois trava como o programa acima.

Versão bônus mais sofisticada, 35 × 2 = 17,5 bytes

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

Experimente online!

Imprime a primeira string, depois elimina os cinco primeiros caracteres de ( 5↓), concatena ( ,) para um novo prefixo e tenta executar ( ) isso, causando o mesmo erro acima.

Adão
fonte
11
@Cyoce Typo. Obrigado
Adám
5

Bash 20.5! 18,5!

Eu não vou me basear na geléia, mas sou um pouco tímido do meu bash ao basear um script rápido do bash. 18,5 não é tão ruim para um idioma não-golfe. (Observe que isso deve ser um script, o bash interativo tentará interpretar !como uma pesquisa de histórico)

echo Hello World!
Goodbye\ Cruel\ $_

Retorna com o código de erro 127 e:

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

Conforme solicitado, não "... em qualquer lugar :). Como sugerido, apricot boyagora procuro o último argumento do comando anterior para salvar 4 bytes.

gmatht
fonte
Eu tentei bater em você ... e falhei com 21! bytes. :) W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
reitermarkus
11
Você provavelmente poderia alterar a segunda linha para Goodbye\ Cruel\ !$, não 100%, mas com certeza a !$"última palavra do último comando" #
apricot boy
Mas e se um executável chamado "adeus mundo cruel!" existe no CAMINHO? :)
spuck
OK verificado em TIO.run ... bate minha resposta zsh: /
roblogic
4

TeX, 19!

Hello World!#\bye Goodbye Cruel World!

Para forçar o TeX a realmente produzir um arquivo dvi / pdf sem intervenção manual, compile com -interaction=nonstopmode.

Ele imprime Hello World!, gera um erro de uso #quando você não deveria e depois interrompe a compilação \bye. No entanto, o que quer que seja depois \byeainda é emitido na mensagem de erro, por isso se aplica ao bônus.

cp.fe.cp
fonte
4

WinDBG (depuração do kernel local do Windows XP / Vista), 33 bytes

.echo Goodbye Cruel World!;.crash

Aviso: Isso trava a máquina inteira, não apenas o programa.

A depuração do kernel local é permitida apenas no Windows XP e Vista (mas não ativada por padrão no Vista). A caixa de diálogo WinDBG na depuração do kernel local não menciona nenhum outro sistema operacional Windows, portanto, suponho que ele não possa ser ativado para eles. Presumivelmente, para outros sistemas operacionais Windows, você pode conectar-se a uma máquina remota para depuração do kernel, mas é a máquina remota que trava, por isso acho que essa solução não conta.

leite
fonte
A depuração local do kernel também é suportada no Windows 7, e eu não ouvi dizer que ela foi removida desde então (mas posso ter perdido).
Cody Grey
4

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

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

Alertas Hello, World!e erros comUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined


fonte
4

PowerShell, 26 bytes

'Goodbye Cruel World!';1/0

Acho que dividir por 0 é a maneira mais fácil de gerar um erro.

PowerShell, 35/2 = 17,5 bytes

"Hello World!";Goodbye Cruel World!

por TessellatingHeckler , lança o erro da seguinte forma:

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
fonte
Não deveria ser $w='World!'(com um !)?
gmatht
"Hello World!";Goodbye Cruel World!é 17,5 bytes, lança uma exceção porque Adeus não é reconhecido como um comando, e a mensagem de exceção inclui a linha na íntegra para que coincida com o regex ..
TessellatingHeckler
11
Usando a mesma lógica que a resposta 17.5b, 'Goodbye Cruel World!';xpouparia dois bytes para 24
Veskah
4

Ponto de inflamação da operaçãoLinguagem de script da , 45/2 = 22,5 bytes

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

Ligue para:

call f;

Resultado:

Steadybox
fonte
4

Node.js, pontuação: 25,5 24,5!

Economizou 1 ponto graças a ETHproductions

Um programa completo sintaticamente correto que trava no tempo de execução porque console.log()não está retornando uma função.

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

Experimente online!

Arnauld
fonte
Infelizmente, não há fatorial para 25.5...: ((
Mr. Xcoder 8/17
@ Mr.Xcoder É Gamma(26.5), como na definição do Mathematica.
user202729
11
@ user202729 que disse que o Mathematica não está quebrado? :)))
Sr. Xcoder 8/08
Você pode remover a X(e talvez até a nova linha)?
ETHproductions
@ETHproductions Sim, de fato. Obrigado!
Arnauld
3

Aceto , pontuação: 21,5!

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

Imprime Hello World!e depois trava com

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
L3viathan
fonte
3

Pitão, 28 24 bytes

"GOODBYE CRUEL WORLD!"hY

Imprime uma string e tenta obter o primeiro elemento da lista vazia.

Tente isso!

KarlKastor
fonte
3

AHK, 50/2 = 25! (não concorrente)

Não concorrente porque um requisito adicional tornou a resposta inválida. Não consigo encontrar uma maneira de compilar, produzir o texto e travar. Tudo o que eu tento falha em pelo menos um desses requisitos.


Send,Hello World!
OutputDebug,Goodbye Cruel World!

Esta é a solução mais chata que eu poderia pensar. Na verdade, ele não falha, mas isso não é tecnicamente um requisito. Tudo o que precisa fazer é enviar uma mensagem para a janela de depuração. Faz isso porque eu digo para fazê-lo.

Engenheiro Toast
fonte
No momento, isso é inválido. OP afirma que o programa deve falhar se o idioma for capaz, se for esse, qual é o AHK.
internet_user
@pycoder Ah, isso foi adicionado 40 minutos depois que eu postei. Vou atualizar para a nova regra, mas isso custará bytes.
Engenheiro Toast
3

Japonês , 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

Experimente online!

Economizou 3 bytes graças ao obarakon e ETHproductions

Tom
fonte
Você pode compactar a cadeia usando Oc"<string>"e, em seguida, substituindo a cadeia atual pela versão compactada e cercada por barras reticulares.
Lucas
Uma explicação seria legal.
IFreilicht
11
Adicionado @iFreilicht
Tom
3

C #, 116/2 = 58 bytes!

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

Versão normal para 94 87 bytes:

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

Guardado 7 bytes graças a @KevinCruijssen.

TheLethalCoder
fonte
int n=0;n/=n;é mais curto para sua primeira resposta.
Kevin Cruijssen
@KevinCruijssen Bom local, eu estava tendo problemas para compilar sem divisão por erro zero constante.
TheLethalCoder 9/17
Sim, em Java você pode simplesmente fazer isso int n=1/0;, mas aparentemente isso não é possível em C # (o que é realmente uma coisa boa para a linguagem, mas ruim para codegolfing). Aliás, por que o bônus não está no topo? Aquele é mais curto.
Kevin Cruijssen
@KevinCruijssen Eu não tinha certeza se estava qualificado, pois estava um pouco claro quando postei minha resposta, já que ficou mais claro que eu as troquei.
TheLethalCoder
3

Geléia , 10,5! bytes

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

Experimente online!

Isso explora o comportamento indefinido, usando strings Python (strings) em vez de strings Jelly (lista de strings 1-char). A conversão é feita através da redução da string Jelly por adição e do Python+ concatena duas strings; portanto, duas strings adicionadas são concatenadas em termos de Python. Em seguida, ele usa a mônada (intervalo) apropriada para que o Python intseja chamado na string, resultando em um erro que sempre conteriaGoodbye Cruel World! .

Explicação:

“,ḷṅḳȦ»¹“¿µƝɓṭỵ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, o Outgolfer
fonte
3

Ruby, 43 42 bytes / 2 = 21!

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

Economizou meio byte com a ajuda de Alexis Andersen, substituindo "String"/0por -"String". Isso "funciona" apenas com versões Ruby inferiores a 2,3, nas quais o menos unário método foi realmente adicionado à classe String!

Com 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)

Com 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
fonte
você pode salvar (meia) um byte usando -na cadeia em vez de /ie-"Goodbye crueld World!"
Alexis Andersen
@AlexisAndersen thanks! Hoje eu também aprendi sobre um novo método na classe String (ver post atualizado)
daniero
3

Código binário x86-64 (com chamadas do sistema Linux), 43 bytes

Desmontagem:

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 os dados necessários (a sequência "Goodbye Cruel World!\n") em seu próprio código. Ele carrega um ponteiro para essa string usando o ripendereçamento relativo e chama o writesyscall diretamente, e não através de um wrapper glibc, para que seja totalmente independente da posição, e podemos testá-lo facilmente incorporando o código em uma conststring e convertendo essa string em uma função ponteiro. Para travar o programa, encerro-o com uma hltinstrução que, com privilégios de anel 0, silencia o processador para sempre (ou pelo menos até a próxima interrupção), mas com privilégios de anel 3 (típicos para programas de usuário), temos muito menos dramáticoSegmentation Fault .

Programa de teste:

#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;
}

Resultado:

Code bytes: 43
Now running the code:

Goodbye Cruel World!
Segmentation fault

Observe que o código de 43 bytes é um programa completo, conforme especificado pelo desafio, não apenas uma função. Não depende da mainfunção do programa de teste para funcionar corretamente; ainda imprimiria a string e travaria se carregado e saltado diretamente pelo carregador.

Calculando porca
fonte
Salve alguns bytes usando push/ poppara carregar registros. Por exemplo, as duas primeiras instruções podem ser push 1+ pop rax, que é 1 byte mais curto. Em seguida, as próximas duas instruções podem ser substituídas por mov edi, eax, que é 2 bytes mais curto. O mesmo truque push/ poppode ser aplicado às instruções 6 e 7: push 0x15+ pop rdx.
Cody Grey
3

Pitão , 38/2 = 19 bytes! 36/2 = 18 bytes!

"Hello World!"v"Goodbye Cruel World!

Teste online!

Explicações

Ele imprime Hello World!e tenta avaliarGoodbye Cruel World! . Falha ao fazer isso, porque essa sequência não é um código válido.

O resultado é:

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
fonte