Crash IRB (interaktiver Rubin)

18

Ruby kommt mit einem eingebauten REPL, was sehr praktisch ist.

Screenshot von IRB

Ihre Herausforderung ist es, es in der geringsten Menge an Code zum Absturz zu bringen!

Die Definition von "Absturz" lautet " Unbeabsichtigtes Beenden ". Dieses Mittel exit, quit, abort, irb_exit, irb_quit, et. al. sind keine gültigen Antworten.

Darüber hinaus können Sie nicht jede Nebenwirkung zu einem anderen Teil des Systems führen. Zum Beispiel `rm -rf /`ist auch nicht gültig.

Jede Version 1.9.3 oder höher ist gültig. Wenn Ihr Code nur für eine bestimmte Version von Ruby funktioniert, können Sie dies in der Antwort angeben.

Die letzte Einschränkung ist, dass Sie sich nicht auf Edelsteine ​​verlassen dürfen.

Das ist , also gewinnt der kürzeste Code, der IRB zum Absturz bringt!

Türknauf
quelle
Ich kann Golfscript Anser haz, PLZ?
Digital Trauma
3
Wow. Ich kenne Rubin nicht, und nachdem ich diese Antworten gelesen habe, werde ich es nie lernen.
Izabera
"Die Definition von" Absturz "ist" Unbeabsichtigtes Beenden "." Wie sollen wir Code schreiben, der etwas Unbeabsichtigtes bewirken soll? Ich stimme zu, um als unklar zu schließen, was Sie verlangen.
msh210

Antworten:

6

5 Zeichen

ENV=0

(inspiriert von @danieros Antwort)

Howard
quelle
funktioniert nicht für mich:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton
@BrianMinton Hatte nur ein 1.9.3p194 zur Hand und es "funktioniert" mit dieser Version.
Howard
Ah, meine Version ist ziemlich alt:irb 0.9.6(09/06/30)
Brian Minton
1
@ BrianMinton, das ist die neueste Version von irb
DarkHeart
17

16 Zeichen

String=0
String=0

Nicht die kürzeste, aber ich finde es lustig, dass es erst in der zweiten Zeile abstürzt. Erzeugt vor dem Beenden von IRB ungefähr 20 Textzeilen. Aus irgendeinem Grund kann es nicht zum Beispiel gekürzt werden 2.times{String=0}.


bearbeiten

Von den bisherigen Antworten ist dies die einzige, die für mich funktioniert hat (und sie funktioniert in allen Versionen, die ich in die Finger bekommen konnte), und ich habe sie alle in diesen Versionen getestet:

Auf welcher Art von Linux auch immer, wenn ich sshin meine Universität komme :
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Mac OS X Mavericks Standard:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Installiert über Homebrew unter OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

bearbeiten 2

7 Zeichen

Kombiniere meine erste Version (und / oder @ Howards Antwort für maximale Querverweise) mit der Antwort von @ chinese perl goth :

STDIN=0
daniero
quelle
Array=0stürzt sofort ab.
Primo
1
@primo cool, aber ich kann es nicht zum Laufen bringen: / (Siehe meine Bearbeitung)
daniero
Das Gleiche gilt hier, nur dies und die abschließende Antwort funktionieren, alle anderen geben nur Warnungen.
user12205
Ja, der Standard funktioniert auch für mich. Es wurde nach meiner Bearbeitung gepostet.
Daniero
1
Sie können die zweite Zeile auf kürzen =und es stürzt immer noch ab.
Fraxtil
10

12 Zeichen

rubin ist nicht gerade meine tasse tee, aber ich habe gerade herausgefunden, dass irb lustig wirkt, wenn ich den stdin schließe :)

$stdin.close

getestet auf irb 0.9.6 (09/06/30) und ruby ​​1.9.3p194

chinesischer Perl Goth
quelle
5
STDIN.closefunktioniert auch und es ist 1 weniger char!
Kavu
+1, weil es so offensichtlich ist, wenn man es betrachtet, dass es Probleme verursachen wird :) Meine Antwort ist wahrscheinlich eher ein Bug, aber für diesen kann man nicht wirklich erwarten, dass IRB etwas Schlaues macht; Es ist wie in Star Trek oder was auch immer, wenn sie einem superintelligenten Roboter eine unmögliche Frage stellen und er explodiert.
Daniero
Verwandte: $>.close.
Jordanien
7

10 9 Zeichen

Eine kürzere Variante zu @ danieros Antwort:

String=1
-

Dies funktioniert zumindest in der Standardversion von OS X Mavericks Ruby (2.0.0).

Die Antwort beruht im Wesentlichen auf der Tatsache, dass die Ruby- TokenFunktion ein caseEingabetoken verarbeitet. Einer der Fälle prüft dagegen String, welcher durch die erste Zeile neu definiert wurde. Dieser Fall schlägt fehl, sodass der Fall auf den Standardwert zurückgeht, bei dem davon ausgegangen wird, dass das Objekt über einen ancestorsAccessor verfügt (was nicht der Fall ist ).

Da sich der "Bug" im Tokenizer befindet, schlägt die erste Zeile nicht fehl, da die Zeile erst nach Abschluss des Parsings wirksam wird. Es betrifft also nur nachfolgende Zeilen. Nachfolgende Zeilen müssen einen Operator enthalten, um den Fehler anzuzeigen.

nneonneo
quelle
+1 Für die Erklärung. Aber wer ist dieser Daneiro? ;)
daniero
@daniero: Entschuldigung, ich scheine heute lysdex zu sein.
Nneonneo
6

5 Zeichen

$>=$<

Setzt stdout auf stdin, wodurch ein Fehler beim Öffnen von stdin zum Schreiben ausgelöst wird und irb abstürzt.

photoionisiert
quelle
Beachten Sie, dass diese auf Rubin 2.3.0p0 getestet
photoionisiert
5

22 Zeichen

def method_missing;end

Anscheinend liegt es an einigen irb-Interna. (Um es zu beheben, fügen Sie self.nach def.)

Türknauf
quelle
4

12 Zeichen

def send;end

Soweit ich weiß, gibt es in der Object-Klasse vier Methoden, die diese Art von Verhalten zeigen:

send
method_missing
respond_to?
respond_to_missing?
David Herrmann
quelle
4
In meinem IRB kehrt es einfach zurück nilund geht weiter
daniero
@daniero 1.8.6 und 1.9.3 stürzen beide ab.
Primo
@primo stürzt auf 2.0.0 nicht mehr ab
drusepth
4

5 Zeichen

IRB=0

Nichts stört den IRB so sehr wie die Neudefinition des IRB.

vgoff
quelle
Ja! Dies stürzt nicht ab, sondern druckt 20 Zeilen Fehler nach irgendetwas!
Mega Man
Wahrscheinlich jetzt eine andere Version von IRB, @MegaMan also mittlerweile definitiv YMMV.
VGOFF
Beides ist sowieso cool!
Mega Man
2

12 10 Zeichen

exec"exec"

Ich weiß nicht, ob das zählt, wegen der exec

Kakaobohne
quelle
1
Sie können den Raum nach dem ersten loswerdenexec
Fund Monica Klage
0

26 + 1 = 27 Zeichen

Das ist nicht sehr golfen, aber ich war amüsiert, es zufällig zu entdecken und dachte, andere könnten es genießen.

class Fixnum;def +;end end

Ich habe +1 zur Punktzahl hinzugefügt, weil Sie die Eingabetaste ein zweites Mal drücken müssen, nachdem Sie die oben genannten Punkte eingegeben haben (aber nicht +2, weil sonst niemand die Eingabetaste gezählt hat).

Jordan
quelle