20
\$\begingroup\$

Ruby comes with a built-in REPL, which is quite handy.

screenshot of IRB

Your challenge is to crash it in the least amount of code!

The definition of "crash" is "make it exit in an unintended way." This means exit, quit, abort, irb_exit, irb_quit, et. al. are not valid answers.

Furthermore, you may not cause any side-effect to any other part of the system. For example, `rm -rf /` is not valid either.

Any version 1.9.3 or above is valid. If your code only works on a specific version of Ruby, you may specify that in the answer.

The final restriction is that you may not rely on any gems.

This is , so the shortest code that crashes IRB will win!

\$\endgroup\$
3
  • \$\begingroup\$ I can haz golfscript anser, plz? \$\endgroup\$ Commented Feb 27, 2014 at 15:33
  • 3
    \$\begingroup\$ wow. i don't know ruby, and after reading these answers i'll never learn it. \$\endgroup\$
    – izabera
    Commented Feb 27, 2014 at 19:36
  • \$\begingroup\$ "The definition of 'crash' is 'make it exit in an unintended way.'" How are we supposed to write code intended to do something unintended? I vote to close as unclear what you're asking. \$\endgroup\$
    – msh210
    Commented Jul 21, 2016 at 15:06

11 Answers 11

17
\$\begingroup\$

16 characters

String=0
String=0

Not the shortest, but I think it's funny that it doesn't crash until the second line. Generates roughly 20 lines of text before IRB exits. For some reason it cannot be shortened to for instance 2.times{String=0}.


edit

Of all the answers so far, this is the only one that has worked for me (and it works in all versions I could get my hands on), and I've tested all of them in these versions:

On whatever kind of Linux I get when ssh'ing into my university:
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 default:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Installed through Homebrew on OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

edit 2

7 characters

Combining my first version (and/or @Howard's answer, for maximum cross reference) with @chinese perl goth's answer:

STDIN=0
\$\endgroup\$
5
  • \$\begingroup\$ Array=0 crashes immediately. \$\endgroup\$
    – primo
    Commented Feb 27, 2014 at 16:46
  • 1
    \$\begingroup\$ @primo cool, but I can't get it to work :/ (See my edit) \$\endgroup\$
    – daniero
    Commented Feb 27, 2014 at 18:33
  • \$\begingroup\$ Same here, only this and the closing stdin answer work, all the others give warnings only. \$\endgroup\$
    – user12205
    Commented Feb 27, 2014 at 20:47
  • \$\begingroup\$ Yes, the stdin one works for me too. It was posted after my edit. \$\endgroup\$
    – daniero
    Commented Feb 27, 2014 at 20:56
  • 1
    \$\begingroup\$ You can shorten the second line to = and it still crashes. \$\endgroup\$
    – ashastral
    Commented Feb 27, 2014 at 21:50
10
\$\begingroup\$

12 chars

ruby is not exactly my cup of tea, but I've just found out that irb acts funny when I close the stdin :)

$stdin.close

tested on irb 0.9.6(09/06/30) and ruby 1.9.3p194

\$\endgroup\$
3
  • 5
    \$\begingroup\$ STDIN.close works too, and it's 1 less char! \$\endgroup\$
    – Kavu
    Commented Feb 27, 2014 at 19:57
  • \$\begingroup\$ +1 because it's so obvious when you look at it that it will cause trouble :) My answer is probably more of a bug, but for this one you can't really expect IRB to do anything clever; it's like in Star Trek or whatever when they ask a super intelligent robot an impossible question and it explodes. \$\endgroup\$
    – daniero
    Commented Feb 27, 2014 at 20:55
  • 1
    \$\begingroup\$ Related: $>.close. \$\endgroup\$
    – Jordan
    Commented Jul 21, 2016 at 15:14
7
\$\begingroup\$

10 9 chars

A shorter variant on @daniero's answer:

String=1
-

This works at least in the default OS X Mavericks Ruby (2.0.0).

The answer basically relies on the fact that the Ruby Token function does a case on the input token. One of the cases checks against String, which has been redefined by the first line. This case fails, so the case falls through to the default, which assumes the object has an ancestors accessor (which it does not).

Because the "bug" is in the tokenizer, the first line won't fail because the line only takes effect after the parsing is finished. Thus, it only affects subsequent lines. Subsequent lines must contain some kind of operator in order to see the failure.

\$\endgroup\$
2
  • \$\begingroup\$ +1 For the explanation. But who is this daneiro? ;) \$\endgroup\$
    – daniero
    Commented Feb 28, 2014 at 1:27
  • \$\begingroup\$ @daniero: My apologies, I appear to be lysdexic today. \$\endgroup\$
    – nneonneo
    Commented Feb 28, 2014 at 1:36
6
\$\begingroup\$

5 characters

ENV=0

(inspired by @daniero's answer)

\$\endgroup\$
4
  • \$\begingroup\$ doesn't work for me: irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV \$\endgroup\$ Commented Feb 27, 2014 at 21:19
  • \$\begingroup\$ @BrianMinton Had only a 1.9.3p194 at hand and it "works" with that version. \$\endgroup\$
    – Howard
    Commented Feb 27, 2014 at 21:27
  • \$\begingroup\$ ah, my version is quite old: irb 0.9.6(09/06/30) \$\endgroup\$ Commented Feb 27, 2014 at 21:36
  • 1
    \$\begingroup\$ @BrianMinton that is the latest version of irb \$\endgroup\$
    – user17752
    Commented Mar 2, 2014 at 10:32
6
\$\begingroup\$

5 characters

$>=$<

Sets stdout to stdin which throws an error trying to open stdin for writing and crashes irb.

\$\endgroup\$
1
  • \$\begingroup\$ Note that this is tested on ruby 2.3.0p0 \$\endgroup\$ Commented Apr 29, 2016 at 20:25
5
\$\begingroup\$

22 characters

def method_missing;end

Apparently it messes with some irb internals. (To fix it, add self. after def.)

\$\endgroup\$
4
\$\begingroup\$

12 characters

def send;end

As far as I know, there are four methods in the Object class which show this kind of behaviour:

send
method_missing
respond_to?
respond_to_missing?
\$\endgroup\$
3
  • 4
    \$\begingroup\$ In my IRB it simply returns nil and carries on \$\endgroup\$
    – daniero
    Commented Feb 27, 2014 at 16:24
  • \$\begingroup\$ @daniero 1.8.6 and 1.9.3 both crash. \$\endgroup\$
    – primo
    Commented Feb 27, 2014 at 16:38
  • \$\begingroup\$ @primo no longer crashes on 2.0.0 \$\endgroup\$
    – drusepth
    Commented Mar 28, 2014 at 12:25
4
\$\begingroup\$

5 Characters

IRB=0

Nothing disturbs IRB quite like redefining IRB.

\$\endgroup\$
3
  • \$\begingroup\$ Yeah! This doesn't crash, but prints 20 lines errors after anything! \$\endgroup\$
    – univalence
    Commented Jun 25, 2016 at 8:37
  • \$\begingroup\$ Probably a different version of IRB now, @MegaMan so by now, definitely YMMV. \$\endgroup\$
    – vgoff
    Commented Jun 26, 2016 at 5:20
  • \$\begingroup\$ Both are cool, anyway! \$\endgroup\$
    – univalence
    Commented Jun 26, 2016 at 13:44
2
\$\begingroup\$

12 10 characters

exec"exec"

I don't know if this counts, because of the exec

\$\endgroup\$
1
  • 1
    \$\begingroup\$ You can get rid of the space after the first exec \$\endgroup\$
    – anon
    Commented Apr 29, 2016 at 20:31
2
\$\begingroup\$

8 characters

Similar to chinese perl goth's answer:

$>.close

$> is an alias for STDOUT.

\$\endgroup\$
0
\$\begingroup\$

26 + 1 = 27 characters

This isn't very golfy, but I was amused to discover it by accident and thought others might enjoy it.

class Fixnum;def +;end end

I added +1 to the score because you have to press Enter a second time after entering the above (but not +2 because no one else counted Enter).

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.