Crash IRB (interaktywny Ruby)


18

Ruby ma wbudowaną REPL, co jest dość przydatne.

zrzut ekranu IRB

Twoim wyzwaniem jest rozbicie go na jak najmniejszej ilości kodu!

Definicja „awarii” brzmi: „niech niezamierzone wyjście”. To oznacza exit, quit, abort, irb_exit, irb_quit, i. glin. nie są poprawnymi odpowiedziami.

Ponadto, może nie powodować żadnych efekt uboczny do jakiejkolwiek innej części systemu. Na przykład też `rm -rf /`nie jest poprawny.

Każda wersja 1.9.3 lub nowsza jest poprawna. Jeśli twój kod działa tylko na określonej wersji Ruby, możesz to określić w odpowiedzi.

Ostatnim ograniczeniem jest to, że nie możesz polegać na żadnych klejnotach.

To jest , więc wygra najkrótszy kod, który zawiesza IRB!


Mogę Haz Anser Golfscript, PLZ?
Cyfrowa trauma

3
łał. nie znam rubinu, a po przeczytaniu tych odpowiedzi nigdy się go nie nauczę.
izabera

„Definicja„ awarii ”polega na tym, że wyjście kończy się w niezamierzony sposób.” „Jak mamy napisać kod przeznaczony do zrobienia czegoś niezamierzonego? Głosuję za zamknięciem, ponieważ niejasne jest to, o co prosisz.
msh210,

Odpowiedzi:


6

5 znaków

ENV=0

(zainspirowany odpowiedzią @daniero )


nie działa dla mnie:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton

@BrianMinton Miał pod ręką tylko wersję 1.9.3p194 i „działa” z tą wersją.
Howard

ah, moja wersja jest dość stara:irb 0.9.6(09/06/30)
Brian Minton

1
@BrianMinton to najnowsza wersja irb
DarkHeart

17

16 znaków

String=0
String=0

Nie najkrótszy, ale myślę, że to zabawne, że nie upada do drugiej linii. Generuje około 20 linii tekstu przed wyjściem IRB. Z jakiegoś powodu nie można go na przykład skrócić 2.times{String=0}.


edytować

Ze wszystkich dotychczasowych odpowiedzi jest to jedyna, która dla mnie zadziałała (i działa we wszystkich wersjach, które mogłem zdobyć) i przetestowałem je wszystkie w tych wersjach:

Na jakimkolwiek systemie Linux dostaję sshsię na mój uniwersytet:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Domyślnie Mac OS X Mavericks:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Zainstalowane przez Homebrew na OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

edycja 2

7 znaków

Łącząc moją pierwszą wersję (i / lub odpowiedź @ Howarda , dla maksymalnego odniesienia) z odpowiedzią @ chińskiego perla gotha :

STDIN=0

Array=0natychmiast ulega awarii.
primo

1
@primo cool, ale nie mogę go uruchomić: / (Zobacz moją edycję)
daniero

To samo tutaj, tylko to i zamykające standardowe odpowiedzi działają, wszystkie pozostałe dają tylko ostrzeżenia.
user12205

Tak, standardowe wyjście też dla mnie działa. Został opublikowany po mojej edycji.
daniero

1
Możesz skrócić drugą linię =i nadal się zawiesza.
Fraxtil

10

12 znaków

ruby nie jest dokładnie moją filiżanką herbaty, ale właśnie dowiedziałem się, że irb zachowuje się zabawnie, kiedy zamykam standardowe wejście :)

$stdin.close

testowany na IRB 0.9 (09/06/30) i ruby ​​1.9.3p194


5
STDIN.closeteż działa i jest o 1 mniej char!
Kavu

+1, ponieważ jest to tak oczywiste, kiedy na to spojrzysz, że spowoduje kłopoty :) Moja odpowiedź jest prawdopodobnie bardziej błędem, ale w tym przypadku nie można oczekiwać, że IRB zrobi coś sprytnego; tak jak w Star Trek czy cokolwiek innego, kiedy zadają super inteligentnemu robotowi niemożliwe pytanie i wybucha.
daniero

Powiązane: $>.close.
Jordan

7

10 9 znaków

Krótszy wariant odpowiedzi @ daniero:

String=1
-

Działa to przynajmniej w domyślnym systemie OS X Mavericks Ruby (2.0.0).

Odpowiedź zasadniczo polega na tym, że Tokenfunkcja Ruby wykonuje casetoken wejściowy. Jeden z przypadków sprawdza String, który został na nowo zdefiniowany w pierwszym wierszu. Ten przypadek kończy się niepowodzeniem, więc przypadek przechodzi do wartości domyślnej, która zakłada, że ​​obiekt ma ancestorsakcesor (a nie ma).

Ponieważ „błąd” występuje w tokenizerze, pierwsza linia nie zawiedzie, ponieważ linia zaczyna działać dopiero po zakończeniu analizy. Tak więc wpływa tylko na kolejne wiersze. Kolejne wiersze muszą zawierać operator, aby zobaczyć awarię.


+1 za wyjaśnienie. Ale kim jest ten Daneiro? ;)
daniero

@daniero: Przepraszam, dzisiaj wydaje mi się, że jestem lysdeksistyczny.
nneonneo


5

22 znaki

def method_missing;end

Najwyraźniej zadziera z niektórymi elementami wewnętrznymi IRB. (Aby to naprawić, dodaj self.po def.)


4

12 znaków

def send;end

O ile mi wiadomo, w klasie Object istnieją cztery metody, które pokazują tego rodzaju zachowanie:

send
method_missing
respond_to?
respond_to_missing?

4
W moim IRB po prostu wraca nili kontynuuje
daniero

Awarie @daniero 1.8.6 i 1.9.3.
primo

@primo nie ulega już awarii w wersji 2.0.0
drusepth

4

5 znaków

IRB=0

Nic nie przeszkadza IRB tak jak redefiniowanie IRB.


Tak! To się nie zawiesza, ale drukuje po 20 błędów linii!
Mega Man

Prawdopodobnie inna wersja IRB, @MegaMan, więc zdecydowanie zdecydowanie YMMV.
vgoff

Obie są w każdym razie fajne!
Mega Man



0

26 + 1 = 27 znaków

To nie jest bardzo golfowe, ale rozbawiło mnie to przez przypadek i pomyślałem, że inni mogą się cieszyć

class Fixnum;def +;end end

Dodałem +1 do wyniku, ponieważ po naciśnięciu powyższego musisz nacisnąć klawisz Enter (ale nie +2, ponieważ nikt inny nie liczył Enter).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.