Hintergrund
Hallo Golfer! Ich möchte alle Programmiersprachen lernen! Aber ich habe ein bisschen eine kurze Aufmerksamkeitsspanne ... und das Kopieren aller Hello World-Beispiele wird langweilig ... aber ich mag Feuer! ^ w ^
Herausforderung
Also hier ist der Plan! Ich möchte, dass Sie alle den kleinsten Code schreiben, der kompiliert, druckt Goodbye Cruel World!
und dann abstürzt. Oder drucken Sie als Bonus-Twist-Herausforderung Hello World!
und stürzen Sie sich abGoodbye Cruel World!
Regeln
- Ihre Punktzahl ist die Gesamtzahl der verwendeten Charaktere. Die Antwort muss ein ausführbares Programm sein.
- Ihr Programm muss
Goodbye Cruel World!
zur Ausgabe drucken und dann abstürzen (unerwarteter Fehler).- Für einen Punktebonus müssen Sie
Hello World!
stattdessen drucken, um auszugeben, aber die Fehlermeldung muss auch enthaltenGoodbye Cruel World!
. Wenn Sie die Bonusherausforderung abgeschlossen haben, können Sie Ihre Punktzahl durch 2 teilen. (Fügen Sie am Ende Ihrer Punktzahl ein! Hinzu, wenn Sie den Bonus beanspruchen!)
- Für einen Punktebonus müssen Sie
- Solange die Standardausgabe noch gedruckt wird und Standardfehler noch gedruckt werden, spielt die Reihenfolge keine Rolle. Nur solange keiner den anderen davon abhalten kann.
- Die Ausgabe muss den Inhalt der obigen Informationen enthalten.
"
sollte nicht in der Ausgabe erscheinen. - Die Ausgabe sollte die angegebene Zeichenfolge und nichts anderes enthalten.
- Der Absturzbericht kann alles enthalten, aber um den Bonus in Anspruch zu nehmen, sollte der folgende reguläre Ausdruck übereinstimmen
/Goodbye Cruel World!/mi
(auch bekannt als, enthält, Groß- / Kleinschreibung / umgebenden Text ignorieren). - Die Zeichenfolgen
Hello World!
undGoodbye Cruel World!
sind unabhängig von der Groß- und Kleinschreibung, sollten aber ansonsten genauso aussehen wie oben. - Wenn die Sprache abstürzen kann (der Beendigungscode kann nicht geändert werden), muss sie abstürzen. Andernfalls verwenden Sie den Standard "Fehlerbericht" (dh
STDERR
) für die Sprache.
Ich kann Python 3 zum Absturz bringen, daher habe ich ein Beispiel für eine Python 3-Antwort beigefügt ! Jetzt können alle die Welt in Brand setzen! ^ W ^
code-challenge
hello-world
Tezra
quelle
quelle
as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"
?Antworten:
Gelee , 12 Bytes
Probieren Sie es online!
Erläuterung:
Da es sich bei der Ganzzahldivision um eine Dyade handelt, wird implizit der aktuelle Wert der Kette als beide Argumente verwendet. Dies ist eine Zeichenfolge. Stürzt ab, weil es ganze Zahlen erwartet.
quelle
A base-250 encoded string
Das ist beides cool und beängstigend, dass man das kann. X3C 43 Bytes
Druckt die Zeichenfolge und versucht dann, den Rückgabewert als Zeiger auf eine andere zu druckende Zeichenfolge zu verwenden, wodurch ein Segmentierungsfehler verursacht wird.
Probieren Sie es online!
C, 42 Bytes
Vielen Dank an @Ruslan!
Probieren Sie es online!
Nur zum Spaß: C (unter 64-Bit-Linux), 149 Byte
Geändert von diesem Hallo Welt-Programm hier .
Probieren Sie es online!
quelle
The answer must be a whole executable program.
main(i){i=puts("Goodbye Cruel World!")/0;}
Entfernt ein Byte.i
.puts("")/0;
ist eine syntaktisch korrekte Aussage.SOGL ,
152517 Bytes / 2 = 8,5!Erläuterung:
(Ab) verwendet die Tatsache, dass SOGL STDERR als Debug-Ausgabe verwendet, sodass neben der Zeile viel Text enthalten ist
Wenn Sie das STDOUT der Verarbeitungsskizze an eine Datei weitergeleitet haben, wird "Goodbye Cruel World!" wäre da.
quelle
Hello World!
undGoodbye Cruel World!
die Groß- und Kleinschreibung nicht berücksichtigt werden, ansonsten aber genau wie oben angezeigt werden sollten , können Sie Ihren Code bearbeiten, indem Sie die Funktion█
vollständig entfernen und nur in Kleinbuchstaben ausgeben.> <> 25 Bytes
Grundsätzlich wird der String dem Stack hinzugefügt (Rückwärts, last in first out) und dann das Äquivalent von:
Wenn sich keine Zeichen mehr auf dem Stapel befinden (die gesamte Zeichenfolge wurde gedruckt), wird beim Öffnen des Stapels ein Fehler angezeigt
quelle
#o<"Goodbye Cruel World!"
, was im Grunde das gleiche ist.sed, 32 bytes
i
Fügt eine Zeile ein undw
schreibt in eine Datei./dev/full
In diesem Fall werden alle Schreibvorgänge zurückgegebenENOSPC
("Kein Platz mehr auf dem Gerät").Es ist jedoch immer noch eine einzige Eingabezeile erforderlich, um zu funktionieren.
quelle
Lua,
31, 30 Bytesdruckt zuerst 'Goodbye Cruel World!' und stürzt dann ab, wenn versucht wird, einen Nullwert und 0 hinzuzufügen.
Ausgabe:
Gutschrift an GalladeGuy für 1 Byte weniger
quelle
a=-print"Goodbye Cruel World!"
Python 3 | Prüfungsergebnis:
24.5!2322!Drucken Sie "Hello World", und verwenden Sie den ungültigen Operator "+" für "Goodbye Cruel World!" zum Rückgabeelement NoneType. (\ n \ r aus der vorherigen Version ausschneiden)
Probieren Sie es online!
Python 3 | Prüfungsergebnis:
3430Print Goodbye, dann eine ungültige + unäre Operation für das Druckergebnis ausführen (NoneType)
Probieren Sie es online!
quelle
+"Goodbye Cruel World!"
ist um 3 Bytes kürzer und gibt einen TypeError aus.print("Goodbye Cruel World!")/0
ist kürzer für die zweite (3 Bytes?)R,
22,20! Bytes(44/2)(40/2)Probieren Sie es online!
Ausgabe:
Zwei Punkte gespart dank digEmAll
quelle
40/2
es online auszuprobieren!AWK , 72 Bytes, 36 Punkte!
Probieren Sie es online!
AWK
mag es nicht, durch 0 zu teilen.quelle
CJam , 34 Bytes, 17 Punkte!
Probieren Sie es online! (Siehe Debug Panel für STDERR)
Erläuterung
Bei TIO wird folgende Fehlermeldung generiert:
quelle
C Präprozessor, 27 Bytes
Ausgabe:
quelle
#Goodbye Cruel World!
APL (Dyalog) , 17,5 Bytes
Ohne Bonus 20 Bytes
Probieren Sie es online!
Beachten Sie, dass der Code nicht in Anführungszeichen gesetzt ist. APL versucht, ihn auszuführen,
World
ist jedoch nicht definiert. Dies führt zu einem Absturz von VALUE ERROR mit der fehlerhaften Codezeile in der Fehlermeldung.Mit Bonus, 35 ÷ 2 = 17,5 Bytes
Probieren Sie es online!
Zuerst wird die erforderliche Zeichenfolge gedruckt, dann stürzt das Programm wie oben beschrieben ab.
Ausgefeiltere Bonusversion, 35 ÷ 2 = 17,5 Bytes
Probieren Sie es online!
Druckt die erste Zeichenfolge, löscht dann die ersten fünf Zeichen von that (
5↓
), verknüpft that (,
) mit einem neuen Präfix und versucht dann, this (⍎
) auszuführen , wodurch derselbe Fehler wie oben verursacht wird.quelle
Bash
20.5!18,5!Ich werde kein Gelee schlagen, aber ich bin ein bisschen schüchtern, weil ich ein schnelles Bash-Skript ausprobiert habe. 18.5 ist nicht schlecht für eine Nicht-Golf-Sprache. (Beachten Sie, dass dies ein Skript sein muss. Interaktive Bash wird versuchen, es
!
als Verlaufssuche zu interpretieren. )Rückgabe mit Fehlercode 127 und:
Wie gewünscht
"
nix ... nirgendwo:)
. Wie vonapricot boy
mir vorgeschlagen, suche ich jetzt das letzte Argument des vorherigen Befehls, um 4 Bytes zu sparen.quelle
W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
Goodbye\ Cruel\ !$
, nicht zu 100%, aber ziemlich sicher, dass dies!$
"letztes Wort des letzten Befehls" istTeX, 19!
Um TeX zu zwingen, eine DVI / PDF-Datei ohne manuellen Eingriff zu erstellen, kompilieren Sie mit
-interaction=nonstopmode
.Es wird gedruckt
Hello World!
, ein Fehler für die Verwendung ausgegeben,#
wenn dies nicht erwünscht ist, und dann die Kompilierung mit abgebrochen\bye
. Was auch immer danach\bye
ist, wird dennoch in der Fehlermeldung ausgegeben, sodass es für den Bonus gilt.quelle
WinDBG (Windows XP / Vista Local Kernel Debugging), 33 Bytes
Warnung: Dies wird den gesamten Computer zum Absturz bringen, nicht nur das Programm.
Das Debuggen des lokalen Kernels ist nur unter Windows XP und Vista zulässig (in Vista jedoch standardmäßig nicht aktiviert). Das WinDBG-Dialogfeld zum Debuggen des lokalen Kernels erwähnt kein anderes Windows-Betriebssystem, daher gehe ich davon aus, dass es für diese nicht einmal aktiviert werden kann. Vermutlich können Sie für andere Windows-Betriebssysteme eine Verbindung zu einem Remotecomputer für das Kernel-Debugging herstellen, aber es ist der Remotecomputer, der abstürzt.
quelle
JS (ES5), 46/2 = 23 Bytes!
Warnungen
Hello, World!
, dann Fehler mitUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined
quelle
PowerShell, 26 Bytes
Ich denke, das Teilen durch 0 ist der einfachste Weg, einen Fehler zu werfen.
PowerShell, 35/2 = 17,5 Byte
von TessellatingHeckler löst den Fehler folgendermaßen aus:
quelle
$w='World!'
(mit!
) sein?"Hello World!";Goodbye Cruel World!
beträgt 17,5 Bytes, löst eine Ausnahme aus, da Goodbye nicht als Befehl erkannt wird und die Ausnahmemeldung die Zeile vollständig enthält, sodass sie mit der regulären Schreibweise übereinstimmt.'Goodbye Cruel World!';x
würden zwei Bytes für 24Operation Flashpoint- Skriptsprache, 45/2 = 22,5 Byte
Rufen Sie an mit:
Ausgabe:
quelle
Fortran (GFortran) , 58/2 = 29 Bytes!
Probieren Sie es online!
quelle
Node.js, Score:
25,524,5!Dank ETHproductions 1 Punkt gespart
Ein syntaktisch korrektes Vollprogramm, das zur Laufzeit abstürzt, weil
console.log()
es keine Funktion zurückgibt.Probieren Sie es online!
quelle
25.5
...: ((Gamma(26.5)
, wie bei Mathematica Definition.X
(und vielleicht sogar die Newline) entfernen ?Aceto , Kerbe: 21.5!
Druckt
Hello World!
und stürzt dann mit abquelle
Pyth,
2824 BytesDruckt eine Zeichenfolge und versucht dann, das erste Element der leeren Liste abzurufen.
Versuche dies!
quelle
AHK, 50/2 = 25! (nicht konkurrierend)
Nicht konkurrierend, da eine zusätzliche Anforderung die Antwort ungültig machte. Ich kann keine Möglichkeit finden, es kompilieren, den Text ausgeben und abstürzen zu lassen. Was auch immer ich versuche, versagt mindestens eine dieser Anforderungen.
Dies ist die langweiligste Lösung, die ich mir vorstellen kann. Es stürzt eigentlich nicht ab, aber das ist technisch keine Voraussetzung. Es muss lediglich eine Meldung an das Debug-Fenster ausgegeben werden. Das tut es, weil ich es dazu auffordere.
quelle
Japt , 22 Bytes
Probieren Sie es online!
3 Bytes gespart dank obarakon und ETHproductions
quelle
Oc"<string>"
und dann die aktuelle Zeichenfolge durch die komprimierte Version ersetzen, die von Backticks umgeben ist.C #, 116/2 = 58 Bytes!
Normale Version für
9487 Bytes:7 Bytes gespart dank @KevinCruijssen.
quelle
int n=0;n/=n;
ist kürzer für Ihre erste Antwort.int n=1/0;
, aber anscheinend ist das in C # nicht möglich (was eigentlich gut für die Sprache ist, aber schlecht für das Codegolfing). Übrigens, warum ist der Bonus nicht oben? Dieser ist kürzer.Gelee , 10,5! Bytes
Probieren Sie es online!
Dabei wird undefiniertes Verhalten ausgenutzt, indem Python-Zeichenfolgen (Zeichenfolgen) anstelle von Jelly-Zeichenfolgen (Liste der Zeichenfolgen mit einem Zeichen) verwendet werden. Die Konvertierung erfolgt durch Reduzieren der Jelly-Zeichenfolge durch Hinzufügen. Pythons
+
verkettet zwei Zeichenfolgen, sodass zwei zusammengefügte Zeichenfolgen pythonweise verkettet werden. Anschließend wird die entsprechende Monade (Range) verwendet, sodass Pythonsint
in der Zeichenfolge aufgerufen wird, was zu einem Fehler führt, der immer enthalten würdeGoodbye Cruel World!
.Erläuterung:
quelle
Ruby,
4342 Bytes / 2 = 21!Mit Hilfe von Alexis Andersen ein halbes Byte gespart, durch Ersetzen
"String"/0
durch-"String"
. Dies "funktioniert" nur mit Ruby-Versionen unter 2.3, bei denen die unäre Minus- Methode tatsächlich zur String-Klasse hinzugefügt wurde!Mit Ruby <2.3:
Mit Ruby> = 2.3:
quelle
-
auf der Zeichenfolge anstelle von z./
B. verwenden-"Goodbye crueld World!"
x86-64-Binärcode (bei Linux-Systemaufrufen), 43 Byte
Demontage:
Dieses Programm bündelt die benötigten Daten (den String
"Goodbye Cruel World!\n"
) in einem eigenen Code. Es lädt einen Zeiger auf diese Zeichenfolge unter Verwendung derrip
relativen Adressierung und ruft denwrite
Syscall direkt und nicht über einen Glibc-Wrapper auf, sodass er völlig positionsunabhängig ist. Wir können ihn einfach testen, indem wir den Code in eineconst
Zeichenfolge einbetten und diese Zeichenfolge in eine Funktion umwandeln Zeiger. Um das Programm zum Absturz zu bringen, beende ich es mit einerhlt
Anweisung, die den Prozessor mit Ring 0-Berechtigungen für immer zum Schweigen bringt (oder zumindest bis zum nächsten Interrupt), aber mit Ring 3-Berechtigungen (typisch für Benutzerprogramme) erhalten wir weitaus weniger dramatischSegmentation Fault
.Testprogramm:
Ausgabe:
Beachten Sie, dass der 43 - Byte - Code ist ein komplettes Programm , wie durch die Herausforderung angegeben, nicht nur eine Funktion. Es hängt nicht von der
main
Funktion des Testprogramms ab, ob es richtig funktioniert. Es würde immer noch den String drucken und abstürzen, wenn er direkt vom Loader geladen und angesprungen wird.quelle
push
/pop
zum Laden von Registern verwenden. Beispielsweise können die ersten beiden Anweisungenpush 1
+ seinpop rax
, was 1 Byte kürzer ist. Dann können die nächsten beiden Anweisungen durch ersetzt werdenmov edi, eax
, was 2 Bytes kürzer ist. Das Gleichepush
/ der gleichepop
Trick kann auf die Anweisungen 6 und 7 angewendet werden:push 0x15
+pop rdx
.LOLCODE , ich kann 21 Bytes haben
Stellen Sie einfach einen ungültigen Operator vor die Zeichenfolge. Sie können es hier online ausprobieren.
quelle
Pyth , 38/2
= 19 Bytes!36/2 = 18 Bytes!Online testen!
Erklärungen
Es wird gedruckt
Hello World!
und dann versucht auszuwertenGoodbye Cruel World!
. Dies schlägt fehl, da diese Zeichenfolge kein gültiger Code ist.Das Ergebnis ist:
quelle