Ruby ma wbudowaną REPL, co jest dość przydatne.
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 code-golf , więc wygra najkrótszy kod, który zawiesza IRB!
Odpowiedzi:
5 znaków
(zainspirowany odpowiedzią @daniero )
źródło
irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
irb 0.9.6(09/06/30)
16 znaków
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ęssh
się na mój uniwersytet: Domyślnie Mac OS X Mavericks: Zainstalowane przez Homebrew na OS X:edycja 2
7 znaków
Łącząc moją pierwszą wersję (i / lub odpowiedź @ Howarda , dla maksymalnego odniesienia) z odpowiedzią @ chińskiego perla gotha :
źródło
Array=0
natychmiast ulega awarii.=
i nadal się zawiesza.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 :)
testowany na IRB 0.9 (09/06/30) i ruby 1.9.3p194
źródło
STDIN.close
też działa i jest o 1 mniej char!$>.close
.109 znakówKrótszy wariant odpowiedzi @ daniero:
Działa to przynajmniej w domyślnym systemie OS X Mavericks Ruby (2.0.0).
Odpowiedź zasadniczo polega na tym, że
Token
funkcja Ruby wykonujecase
token wejściowy. Jeden z przypadków sprawdzaString
, 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 maancestors
akcesor (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ę.
źródło
5 znaków
Ustawia stdout na stdin, który zgłasza błąd podczas próby otwarcia stdin do zapisu i powoduje awarię IRB.
źródło
22 znaki
Najwyraźniej zadziera z niektórymi elementami wewnętrznymi IRB. (Aby to naprawić, dodaj
self.
podef
.)źródło
12 znaków
O ile mi wiadomo, w klasie Object istnieją cztery metody, które pokazują tego rodzaju zachowanie:
źródło
nil
i kontynuuje5 znaków
Nic nie przeszkadza IRB tak jak redefiniowanie IRB.
źródło
1210 znakówNie wiem, czy to się liczy, z powodu
exec
źródło
exec
8 znaków
Podobne do odpowiedzi chińskiego perla gota :
$>
to alias dla STDOUT.źródło
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ć
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).
źródło