Addio mondo crudele!


49

sfondo

Ciao golfisti! Vorrei imparare tutti i linguaggi di programmazione! Ma ho un po 'di attenzione ... e copiare tutti gli esempi di Hello World diventa noioso ... ma mi piace il fuoco! ^ W ^

Sfida

Quindi ecco il piano! Voglio che tutti scriviate il codice più piccolo che verrà compilato, stampato Goodbye Cruel World!e quindi arrestato in modo anomalo. Oppure, come una sfida bonus, stampa Hello World!e crash conGoodbye Cruel World!

Regole

  • Il tuo punteggio sarà il conteggio totale dei personaggi utilizzati. La risposta deve essere un intero programma eseguibile.
  • Il programma deve stampare Goodbye Cruel World!sull'output e quindi arrestarsi in modo anomalo (errore imprevisto).
    • Per un bonus punteggio, devi invece stampare Hello World!sull'output, ma anche il messaggio di errore deve contenere Goodbye Cruel World!. Se completi la sfida bonus, puoi dividere il tuo punteggio per 2. (Includi un! Alla fine del tuo punteggio se stai richiedendo il bonus!)
  • Finché l'output standard viene ancora stampato e l'errore standard viene comunque stampato, l'ordine non ha importanza. Fintanto che nessuno dei due può impedire che l'altro accada.
  • L'output deve contenere i contenuti di cui sopra; "non dovrebbe apparire nell'output.
  • L'output dovrebbe contenere la stringa specificata e nient'altro.
  • Il rapporto sugli arresti anomali può contenere qualsiasi cosa, ma per richiedere il bonus, deve corrispondere la seguente regex /Goodbye Cruel World!/mi(ovvero, contiene, ignora il caso / il testo circostante))
  • Le stringhe Hello World!e non Goodbye Cruel World!fanno distinzione tra maiuscole e minuscole, ma altrimenti dovrebbero apparire esattamente come sopra.
  • Se la lingua è in grado di bloccarsi (non può cambiare il suo codice di uscita), deve bloccarsi. In caso contrario, utilizzare la "segnalazione errori" standard (ovvero, STDERR) per la lingua.

Posso bloccare Python 3, quindi ho incluso un esempio di risposta Python 3! Ora lascia tutto in fiamme! ^ W ^


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Dennis,

as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"?
Magic Octopus Urn

Supponiamo che io stia lavorando in un linguaggio come Java, dove STDOUT e STDERR, ovviamente, sono stampati in diversi thread. Ciò significa che, sebbene il programma, in ordine, stampa "Hello world" e quindi si blocchi, è possibile che prima venga stampata la traccia dello stack ... È consentito?
Socratic Phoenix,

@SocraticPhoenix Finché STDOUT continua a stampare e STDERR continua a stampare, l'ordine non ha importanza. Fintanto che nessuno dei due può impedire che l'altro accada.
Tezra,

1
È così divertente, non riesco a smettere di creare soluzioni!
Adám,

Risposte:


36

Gelatina , 12 byte

“¿µƝɓṭỵae»Ȯ:

Provalo online!

Spiegazione:

“¿µƝɓṭỵae»Ȯ:

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

Poiché la divisione intera è una diade, implicitamente prenderà il valore corrente della catena come entrambi gli argomenti - che è una stringa. Si blocca perché si aspetta numeri interi.


7
Benvenuti in PPCG!
Dennis,

Grazie! Sono in agguato da un po 'di tempo, ma questa è la prima volta che ho trovato una sfida che sentivo di poter davvero risolvere decentemente!
disperde l'

28
Risposta impressionante, anche se quasi tutte le risposte di Jelly sono impressionanti, sia per la lunghezza che per il fatto che sei riuscito a imparare Jelly.
Gryphon - Ripristina Monica l'

4
A base-250 encoded stringQuesto è sia bello che spaventoso che tu possa farlo. X3
Tezra,

3
Questo è significativamente più breve della stringa "Addio mondo crudele!" (20 byte). Pazzo ...
Adam Plocher,

35

C, 43 byte

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

Stampa la stringa e quindi tenta di utilizzare il valore restituito come puntatore a un'altra stringa da stampare, che provoca un errore di segmentazione.

Provalo online!

C, 42 byte

Grazie a @Ruslan!

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

Provalo online!

Solo per divertimento: C (su Linux a 64 bit), 149 byte

Modificato da questo programma Hello World qui .

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

Provalo online!


Mi piace questo approccio, ma le istruzioni dicono:The answer must be a whole executable program.
Cody,

1
main(i){i=puts("Goodbye Cruel World!")/0;}rimuove un byte.
Ruslan,

1
Non hai bisogno i. puts("")/0;è un'affermazione sintatticamente corretta.
rici,

1
@rici Sì, lo è, ma non si arresta in modo anomalo (almeno su TIO).
Steadybox,

1
@Steadybox: questa è l'ottimizzazione per te.
rici,

11

SOGL , 15 25 17 byte / 2 = 8.5!

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

Spiegazione:

...‘           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 il fatto che SOGL usa STDERR come output di debug, quindi in esso c'è molto testo, insieme alla linea

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

Se hai eseguito il piping dello STDOUT dello sketch Processing in un file, il "Goodbye Cruel World!" sarebbe lì.


Poiché la sfida menziona " Le stringhe Hello World!e non Goodbye Cruel World!fanno distinzione tra maiuscole e minuscole, ma in caso contrario dovrebbero apparire esattamente come sopra ", puoi giocare a golf del tuo codice eliminando completamente la funzione e stampandola in minuscolo.
Kevin Cruijssen,

@KevinCruijssen oh huh, grazie!
dzaima,

10

> <> , 25 byte

"!dlroW leurC eybdooG">o<

Fondamentalmente aggiunge la stringa allo stack (all'indietro, l'ultimo in prima uscita) e quindi fa l'equivalente di:

while(1):
  pop the stack
  print the character

Quando non ci sono caratteri rimasti nella pila (l'intera stringa è stata stampata) facendo scoppiare la pila si ottiene un errore


+1. Sono venuto #o<"Goodbye Cruel World!", che è sostanzialmente lo stesso.
hakr14

9

sed, 32 byte

iGoodbye Cruel World!
w/dev/full

iinserisce una riga e wscrive in un file. /dev/fullin questo caso perché tutte le scritture restituiscono ENOSPC("Nessuno spazio sul dispositivo").

Tuttavia, ha ancora bisogno di una sola riga di input per funzionare.

$ echo 1 | sed -f crash.sed
Goodbye, cruel world!
sed: couldn't flush /dev/full: No space left on device

3
Non sapevo nemmeno che esistesse un tale dispositivo!
Ruslan,

9

Lua, 31 , 30 byte

a=-print'Goodbye Cruel World!'

prima stampa "Goodbye Cruel World!" e quindi si arresta in modo anomalo quando si tenta di aggiungere un valore zero e 0.

Produzione:

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

Accredita a GalladeGuy per 1 byte in meno


2
stampa "Goodbye Cruel World!" e poi si blocca, ma ho pensato che avrebbe dovuto semplicemente andare in crash per essere accettato.
eniallator,

@Trebuchette Il requisito è "Il tuo programma deve stampare Goodbye Cruel World! Per l'output e quindi crash", l'OP non ha specificato se "output" significhi o meno stderr, stdout, un messagebox o uno qualsiasi dei precedenti.
Pharap,

@Pharap Oh, capisco. STDERR conta solo se stai andando per il bonus. Grazie!
Trebuchette,

@Trebuchette Nope. Dice "O, come una sfida bonus, stampa Hello World! E vai in crash con Goodbye Cruel World!". 'crash' non implica necessariamente stderr, 'crash' può anche significare (tra le altre cose) un'eccezione generata. A meno che l'OP non lo definisca ulteriormente, è aperto all'interpretazione. Inoltre alcune applicazioni di Lua non hanno il concetto di stderr (ad esempio Lua incorporato come linguaggio di scripting per i giochi) e verranno invece stampate in una finestra di messaggio o in un file di registro ecc.
Pharap,

1
Puoi invece salvare un byte in questo modo:a=-print"Goodbye Cruel World!"
GalladeGuy

8

Python 3 | Punteggio: 24,5! 23 22!

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

Stampa "Hello World", quindi usa l'operatore non valido "+" su "Goodbye Cruel World!" all'elemento return NoneType. (tagliato \ n \ r dalla versione precedente)

Provalo online!

Python 3 | Punteggio: 34 30

+print("Goodbye Cruel World!")

Stampa addio, quindi esegui un'operazione unaria + non valida sul risultato di stampa (NoneType)

Provalo online!


+"Goodbye Cruel World!"è più corto di 3 byte e genera un TypeError.
Gábor Fekete,

print("Goodbye Cruel World!")/0è più breve per il secondo (3 byte?)
matsjoyce l'

@matsjoyce Avevo paura che si sarebbe schiantato prima della stampa. Ma dal momento che stampa per primo, farò semplicemente unario sul 'risultato' della stampa: 3
Tezra

24
2.585e + 22 è un punteggio abbastanza grande ... sei sicuro di non poterlo giocare di più?
tuskiomi,

1
@tuskiomi Il '!' significa che il punteggio finale viene modificato dalla sfida bonus.
Tezra,



6

CJam , 34 byte, punteggio 17!

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

Provalo online! (Vedi pannello Debug per STDERR)

Spiegazione

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

Su TIO, genera questo messaggio di errore:

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

6

Preprocessore C, 27 byte

#error Goodbye Cruel World!

Produzione:

fatal error C1189: #error:  Goodbye Cruel World!

1
Si può essere in grado di ridurre ulteriormente con solo#Goodbye Cruel World!
albicocca ragazzo

@apricotboy Ciò produrrebbe comunque un errore ma il messaggio di errore "addio crudele mondo" non viene emesso dal compilatore (almeno su MSVC)
Govind Parmar,

@Gorvind Parmar ah. Beh, sicuramente lo fa su gcc: i.imgur.com/qmGnoJv.png
ragazzo albicocca

6

APL (Dyalog) , 17,5 byte

Senza bonus, 20 byte

Goodbye Cruel World!

Provalo online!

Si noti che il codice non è quotato, quindi APL tenta di eseguirlo ma Worldnon è definito, causando un arresto VALORE ERRORE con la riga di codice offensiva inclusa nel messaggio di errore.

Con bonus, 35 ÷ 2 = 17,5 byte

'Hello World!'
Goodbye Cruel World!

Provalo online!

Prima stampa la stringa richiesta, quindi si arresta in modo anomalo come il programma sopra.

Versione bonus più sofisticata, 35 ÷ 2 = 17,5 byte

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

Provalo online!

Stampa la prima stringa, quindi rilascia i primi cinque caratteri da that ( 5↓), quindi concatena quella ( ,) a un nuovo prefisso, quindi tenta di eseguire quella ( ) causando lo stesso errore di cui sopra.


1
@Cyoce Typo. Grazie
Adám,

5

Bash 20.5! 18.5!

Non ho intenzione di colpire la gelatina, ma sono un po 'timida della mia bash nel tirar fuori una breve sceneggiatura. 18.5 non è male per una lingua non golf. (Nota che questo deve essere uno script, bash interattivo tenterà di interpretare !come una ricerca della cronologia)

echo Hello World!
Goodbye\ Cruel\ $_

Restituisce con codice errore 127 e:

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

Come richiesto, non c'è "... ovunque :). Come suggerito da apricot boyora cerco l'ultimo argomento del comando precedente per salvare 4 byte.


Ho provato a batterti ... e ho fallito con 21! byte. :) W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
reitermarkus,

1
Probabilmente potresti cambiare la seconda riga in Goodbye\ Cruel\ !$, non al 100% ma abbastanza sicuro che !$sia "l'ultima parola dell'ultimo comando"
ragazzo albicocca

E se un eseguibile di nome "Arrivederci mondo crudele!" esiste nel PERCORSO? :)
aperto il

Verificato OK su TIO.run ... batte la mia risposta zsh: /
roblogic

4

TeX, 19 anni!

Hello World!#\bye Goodbye Cruel World!

Per forzare TeX a produrre effettivamente un file dvi / pdf senza intervento manuale, compilare con -interaction=nonstopmode.

Stampa Hello World!, genera un errore per l'utilizzo #quando non è previsto e quindi interrompe la compilazione \bye. Tuttavia, tutto ciò che è dopo \byeviene ancora emesso nel messaggio di errore, quindi si applica per il bonus.


4

WinDBG (debug del kernel locale di Windows XP / Vista), 33 byte

.echo Goodbye Cruel World!;.crash

Avvertenza: questo causerà l'arresto anomalo dell'intera macchina, non solo del programma.

Il debug del kernel locale è consentito solo su Windows XP e Vista (ma non abilitato per impostazione predefinita in Vista). La finestra di dialogo WinDBG sul debug del kernel locale non menziona nessun altro sistema operativo Windows, quindi presumo che non possa nemmeno essere abilitato per quelli. Presumibilmente per gli altri sistemi operativi Windows è possibile collegarsi a un computer remoto per il debug del kernel, ma è il computer remoto che si arresterà in modo anomalo, quindi non credo che questa soluzione sia importante.


Il debug del kernel locale è supportato anche su Windows 7 e da allora non ho sentito che è stato rimosso (ma potrei averlo perso).
Cody Gray,

4

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

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

Avvisi Hello, World!, quindi errori conUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined


4

PowerShell, 26 byte

'Goodbye Cruel World!';1/0

Penso che dividere per 0 sia il modo più semplice per lanciare un errore.

PowerShell, 35/2 = 17,5 byte

"Hello World!";Goodbye Cruel World!

di TessellatingHeckler , genera l'errore in questo modo:

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!

Non dovrebbe essere $w='World!'(con un !)?
Gmatht,

"Hello World!";Goodbye Cruel World!è 17,5 byte, genera un'eccezione perché Arrivederci non viene riconosciuto come comando e il messaggio di eccezione include la riga per intero in modo che corrisponda alla regex ..
TessellatingHeckler

1
Utilizzando la stessa logica della risposta 17.5b, 'Goodbye Cruel World!';xsi risparmiano due byte per 24
Veskah



4

Node.js, Punteggio: 25,5 24,5!

Risparmio di 1 punto grazie a ETHproductions

Un programma completo sintatticamente corretto che si arresta in modo anomalo in fase di esecuzione perché console.log()non restituisce una funzione.

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

Provalo online!


Purtroppo, non esiste un fattoriale per 25.5...: ((
Mr. Xcoder,

@ Mr.Xcoder Lo è Gamma(26.5), come nella definizione di Mathematica.
user202729

1
@ user202729 chi ha detto che Mathematica non è rotta? :)))
Mr. Xcoder,

Riesci a rimuovere il X(e forse anche il newline)?
ETHproductions

@ETHproductions Sì davvero. Grazie!
Arnauld,

3

Aceto , punteggio: 21,5!

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

Stampa Hello World!, quindi si arresta in modo anomalo

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

3

Pyth, 28 24 byte

"GOODBYE CRUEL WORLD!"hY

Stampa una stringa, quindi cerca di ottenere il primo elemento dell'elenco vuoto.

Prova questo!


3

AHK, 50/2 = 25! (Fuori concorso)

Non competitiva perché un requisito aggiuntivo ha reso la risposta non valida. Non riesco a trovare un modo per farlo compilare, produrre il testo e andare in crash. Qualunque cosa provo non soddisfa almeno uno di questi requisiti.


Send,Hello World!
OutputDebug,Goodbye Cruel World!

Questa è la soluzione più noiosa che mi venga in mente. In realtà non si blocca ma non è tecnicamente un requisito. Tutto quello che deve fare è inviare un messaggio alla finestra di debug. Lo fa perché gli dico di farlo.


Questo non è attualmente valido. OP afferma che il programma deve arrestarsi in modo anomalo se la lingua è in grado di farlo, quale AHK è.
internet_user

@pycoder Ah, che è stato aggiunto 40 minuti dopo che ho pubblicato. Aggiornerò per la nuova regola ma costerà byte.
ingegnere Toast l'

3

Japt , 22 byte

°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

Provalo online!

Salvato 3 byte grazie a obarakon e ETHproductions


È possibile comprimere la stringa utilizzando Oc"<string>"e quindi sostituire la stringa corrente con la versione compressa e circondata da backtick.
Luca,

Una spiegazione sarebbe buona.
iFreilicht,

1
Aggiunta la spiegazione di @iFreilicht.
Tom,

3

C #, 116/2 = 58 byte!

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

Versione normale per 94 87 byte:

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

Salvato 7 byte grazie a @KevinCruijssen.


int n=0;n/=n;è più breve per la tua prima risposta.
Kevin Cruijssen,

@KevinCruijssen Bel posto, ho avuto problemi con la compilazione senza divisione per errore zero costante.
TheLethalCoder

Sì, in Java puoi semplicemente farlo int n=1/0;, ma a quanto pare non è possibile in C # (che in realtà è una buona cosa per la lingua, ma cattiva per il codegolfing). A proposito, perché il bonus non è in alto? Quello è più corto.
Kevin Cruijssen,

@KevinCruijssen Non ero sicuro che si qualificasse in quanto un po 'poco chiaro quando ho pubblicato la mia risposta, visto che è stato ulteriormente chiarito che le ho cambiate.
TheLethalCoder

3

Jelly , 10.5! byte

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

Provalo online!

Questo sfrutta un comportamento indefinito, usando stringhe Python (stringhe) invece di stringhe Jelly (elenco di stringhe a 1 carattere). La conversione viene effettuata riducendo la stringa Jelly per aggiunta e le +stringhe di Python concatenano due stringhe, quindi due stringhe sommate insieme sono concatenate in termini di Python. Quindi, utilizza la monade (intervallo) appropriata in modo che Python intsia chiamato sulla stringa, causando un errore che dovrebbe sempre contenere Goodbye Cruel World!.

Spiegazione:

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

3

Rubino, 43 42 byte / 2 = 21!

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

Salvataggio di mezzo byte con l'aiuto di Alexis Andersen, sostituendolo "String"/0con -"String". Questo funziona solo con le versioni di Ruby precedenti alla 2.3, in cui il metodo meno unario è stato effettivamente aggiunto alla classe 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)

puoi salvare (mezzo) byte usando -la stringa invece di /ie-"Goodbye crueld World!"
Alexis Andersen,

@AlexisAndersen grazie! Oggi ho anche imparato a conoscere un nuovo metodo nella classe String (vedi post aggiornato)
daniero il

3

Codice binario x86-64 (con chiamate di sistema Linux), 43 byte

Smontaggio:

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

Questo programma raggruppa i dati necessari (la stringa "Goodbye Cruel World!\n") nel proprio codice. Carica un puntatore a quella stringa usando ripl'indirizzamento relativo e chiama writedirettamente la syscall piuttosto che attraverso un wrapper glibc, quindi è completamente indipendente dalla posizione e possiamo facilmente testarlo incorporando il codice in una conststringa e lanciando quella stringa in una funzione puntatore. Per interrompere il programma, lo termino con hltun'istruzione, che con i privilegi dell'anello 0 tacerebbe il processore per sempre (o almeno fino all'arrivo dell'interruzione successiva), ma con i privilegi dell'anello 3 (tipico per i programmi utente) otteniamo molto meno drammatico Segmentation Fault.

Programma di test:

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

Produzione:

Code bytes: 43
Now running the code:

Goodbye Cruel World!
Segmentation fault

Si noti che il codice a 43 byte è un programma completo come specificato dalla sfida, non solo una funzione. Non dipende dalla mainfunzione del programma di test per funzionare correttamente; stamperebbe comunque la stringa e si arresterebbe in modo anomalo se caricato e saltato direttamente dal caricatore.


Salvare alcuni byte usando push/ popper caricare i registri. Ad esempio, le prime due istruzioni possono essere push 1+ pop rax, che è più breve di 1 byte. Quindi, le due istruzioni successive possono essere sostituite con un tempo mov edi, eaxinferiore di 2 byte. Lo stesso push/ poptrucco può essere applicato alle istruzioni 6 e 7: push 0x15+ pop rdx.
Cody Grey,


3

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

"Hello World!"v"Goodbye Cruel World!

Provalo online!

spiegazioni

Stampa Hello World!, quindi prova a valutare Goodbye Cruel World!. Non riesce a farlo, perché quella stringa non è un codice valido.

Il risultato è:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.