Crash IRB (Interactive Ruby)


18

Ruby viene fornito con un REPL integrato, che è abbastanza utile.

screenshot di IRB

La tua sfida è di bloccarlo con la minima quantità di codice!

La definizione di "crash" è "farlo uscire in modo non intenzionale ". Questo mezzo exit, quit, abort, irb_exit, irb_quit, et. al. non sono risposte valide.

Inoltre, è possibile che non causare alcun effetto collaterale a qualsiasi altra parte del sistema. Ad esempio, `rm -rf /`non è neanche valido.

Qualsiasi versione 1.9.3 o successiva è valida. Se il tuo codice funziona solo su una versione specifica di Ruby, puoi specificarlo nella risposta.

La restrizione finale è che non puoi fare affidamento su nessuna gemma.

Questo è , quindi vincerà il codice più corto che si blocca IRB!


Posso rispondere a golfscript, per favore?
Trauma digitale

3
Wow. non conosco il rubino e dopo aver letto queste risposte non lo imparerò mai.
Izabera,

"La definizione di 'crash' è 'farla uscire in modo non intenzionale.'" Come dovremmo scrivere codice destinato a fare qualcosa di non intenzionale? Voto per chiudere come poco chiaro ciò che stai chiedendo.
msh210,

Risposte:


6

5 caratteri

ENV=0

(ispirato alla risposta di @daniero )


non funziona per me:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton,

@BrianMinton aveva solo un 1.9.3p194 a portata di mano e "funziona" con quella versione.
Howard,

ah, la mia versione è piuttosto vecchia:irb 0.9.6(09/06/30)
Brian Minton,

1
@BrianMinton che è l'ultima versione di irb
DarkHeart

17

16 caratteri

String=0
String=0

Non il più corto, ma penso sia divertente che non si blocchi fino alla seconda riga. Genera circa 20 righe di testo prima che IRB esca. Per qualche motivo non può essere abbreviato ad esempio 2.times{String=0}.


modificare

Di tutte le risposte finora, questa è l'unica che ha funzionato per me (e funziona in tutte le versioni su cui ho potuto mettere le mani), e le ho provate tutte in queste versioni:

Su qualunque tipo di Linux ricevo quando sshsono nella mia università:
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 predefinito:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Installato tramite Homebrew su OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

modifica 2

7 caratteri

Combinando la mia prima versione (e / o la risposta di @ Howard , per il massimo riferimento incrociato) con la risposta di @ chinese perl goth :

STDIN=0

Array=0si blocca immediatamente.
primo

1
@primo cool, ma non riesco a farlo funzionare: / (Vedi la mia modifica)
daniero

Lo stesso qui, solo questo e la risposta stdin di chiusura funzionano, tutti gli altri danno solo avvertimenti.
user12205,

Sì, quello stdin funziona anche per me. È stato pubblicato dopo la mia modifica.
daniero,

1
Puoi accorciare la seconda riga =e si blocca ancora.
Fraxtil,

10

12 caratteri

ruby non è esattamente la mia tazza di tè, ma ho appena scoperto che irb si comporta in modo divertente quando chiudo lo stdin :)

$stdin.close

testato su irb 0.9.6 (09/06/30) e ruby ​​1.9.3p194


5
STDIN.closefunziona anche, ed è 1 carattere in meno!
Kavu,

+1 perché è così ovvio quando lo guardi che causerà problemi :) La mia risposta è probabilmente più un bug, ma per questo non puoi davvero aspettarti che IRB faccia qualcosa di intelligente; è come in Star Trek o in qualsiasi altra cosa quando fanno una domanda impossibile a un robot super intelligente ed esplode.
daniero,

Correlati: $>.close.
Giordania,

7

10 9 caratteri

Una variante più breve sulla risposta di @ daniero:

String=1
-

Funziona almeno con OS X Mavericks Ruby (2.0.0) predefinito.

La risposta si basa fondamentalmente sul fatto che la Tokenfunzione Ruby fa un casetoken di input. Uno dei casi verifica String, che è stato ridefinito dalla prima riga. Questo caso ha esito negativo, quindi il caso rientra nel valore predefinito, che presuppone che l'oggetto abbia un ancestorsaccedente (cosa che non ha).

Poiché il "bug" si trova nel tokenizer, la prima riga non avrà esito negativo poiché la riga diventa effettiva solo al termine dell'analisi. Pertanto, influisce solo sulle righe successive. Le righe successive devono contenere un qualche tipo di operatore per vedere l'errore.


+1 Per la spiegazione. Ma chi è questo daneiro? ;)
daniero,

@daniero: Mi scuso, oggi sembro lisdexic.
nneonneo,

6

5 caratteri

$>=$<

Imposta stdout su stdin che genera un errore nel tentativo di aprire stdin per la scrittura e blocca irb.


Si noti che questo è testato su ruby ​​2.3.0p0
fotoionizzato il

5

22 caratteri

def method_missing;end

Apparentemente si scherza con alcuni interni irb. (Per risolvere il problema, aggiungere self.dopo def.)


4

12 caratteri

def send;end

Per quanto ne so, ci sono quattro metodi nella classe Object che mostrano questo tipo di comportamento:

send
method_missing
respond_to?
respond_to_missing?

4
Nel mio IRB semplicemente ritorna nile continua
daniero il

@daniero 1.8.6 e 1.9.3 si bloccano entrambi.
primo

@primo non si blocca più su 2.0.0
drusepth il

4

5 personaggi

IRB=0

Nulla disturba l'IRB come ridefinire l'IRB.


Si! Questo non si arresta in modo anomalo, ma stampa errori di 20 righe dopo tutto!
Mega Man,

Probabilmente una versione diversa di IRB ora, @MegaMan quindi ormai, sicuramente YMMV.
vgoff,

Entrambi sono fantastici, comunque!
Mega Man,



0

26 + 1 = 27 caratteri

Questo non è molto da golf, ma mi sono divertito a scoprirlo per caso e ho pensato che potesse piacere ad altri.

class Fixnum;def +;end end

Ho aggiunto +1 al punteggio perché devi premere Invio una seconda volta dopo aver inserito quanto sopra (ma non +2 perché nessun altro ha contato Invio).

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.