eigenclass logo
MAIN  Index  Search  Changes  PageRank  Login

eigenclass.org "Happy 2007!" Ruby mini-contest started

The contest started on Sat. 2007-01-06 20H UTC


  • 2007-01-06 20:39 UTC: the contest has been running for 40 minutes and nobody has cracked the script yet.
  • 2007-01-07 00:52 UTC: 6 people have cracked the script so far (out of >120 who downloaded it)
  • 2007-01-07 10:27 UTC: 160 participants, still only 6 people managed to decode the message. If you crack it, you can claim that your Ruby is stronger/you are more patient than 96% of the people.
  • 2007-01-07 15:51 UTC: 8/182, 4.2% completion rate
  • 2007-01-08 00:53 UTC: 9/206, at least ~120 people have had the code for over 24H now...
  • 2007-01-08 20:03 UTC: 11/266, down to 4.1% :)
  • 2007-01-09 23:50 UTC: 13/324, 4.0%
  • 2007-01-11 00:04 UTC: 14/344, 4.1%.
  • 2007-01-13 10:15 UTC: 14/456, 3.1%.


Your mission, should you choose to accept it, is to find the secret message hidden in that Ruby script, follow the instructions to generate the code that will prove you've found the message, and claim your chance to win a (very) modest prize at http://eigenclass.org/rubychallenge2007/YOURCODE . The completion times will be recorded and Kernel#rand will also pick a few lucky winners.

Here's what people had to say about a similar puzzle I made last year:

Wow, I'm really impressed. That was a tough (and fun) puzzle. -- Kevin Ballard

Thanks Mauricio, you made my day! -- olivier

My head hurts. Took me nearly two hours -- aniero

How long will it take?

Anything from a few minutes (say 10-20 minutes if you're having a good day and aren't easily scared off by tricky Ruby code) to several hours. Many will give up before, though :-) I cannot really know, but I can say I've spent quite some time making this fairly tricky...


There's a different script for each supported Ruby version; get the one corresponding to your ruby executable or you won't be able to run it at all, let alone crack it.

(scripts not available before 2007-01-06 20H UTC)

Running the script

You have to make sure that no other files (e.g. RubyGems) are loaded when you execute the script, so you might have to unset RUBYOPT. Don't rename the file, and make sure you are running it from the directory it resides in. This should work if you're using Ruby 1.8.5:

 $ RUBYOPT=""  ruby happy2007-eigenclass.org-1.8.5.rb

What should happen when I run the script?

It will decode itself while it prints a few random strings for a few seconds, and then a real-time AA animation will start. If you see the animation, it will mean the script works as intended.

If you did something wrong, the program will print one or more error messages and exit without the animation being shown. This means that your attempt to crack it wasn't successful.

Common mistakes

All of these will fail:

$ ruby foo/happy2007-eigenclass.org-1.8.5.rb        (wrong dir)
$ ruby182 happy2007-eigenclass.org-1.8.5.rb         (wrong version)
$ ruby foo.rb                                       (wrong name)
$ ruby -rubygems happy2007-eigenclass.org-1.8.5.rb  (RubyGems loaded)
  (can also happen if your RUBYOPT is set)

OK, I cracked it, now what?

Go to http://eigenclass.org/rubychallenge2007/YOURCODE so the server records when you finished. I hope you liked the puzzle; you can leave your feedback below.

Here's the current hall of fame (all times are UTC):

 2007-01-06 20:53 Stefan Walk
 2007-01-06 22:30 Evan Weaver
 2007-01-06 22:31 Kevin Ballard
 2007-01-06 22:42 Pit Capitain
 2007-01-06 23:00 Jamis Buck
 2007-01-07 00:02 Dominik Bathon 
 2007-01-07 12:17 rubikitch
 2007-01-07 14:53 Matthias Lederhofer
 2007-01-07 21:50 John Aughey
 2007-01-08 03:35 Peter Vanbroekhoven
 2007-01-08 14:40 dseverin
 2007-01-09 02:47 Mathew Abonyi
 2007-01-09 07:44 Martin Traverso 
 2007-01-10 01:43 Anthony Ramahay
 2007-01-14 16:29 Tim Lossen
 2007-01-18 17:58 Haruki Kodera
 2007-01-27 19:11 Marcus Blunzenauer
 2007-02-08 13:33 Joseph Riesen
 2007-02-14 12:36 Yusuke ENDOH

Just before you go, one request

Please don't publish hints/the solution, so as to avoid spoiling the fun for others, thank you!

check your timezone - flevour (2007-01-05 (Fri) 08:14:21)

Check the release time in your timezone here. That's all I'll do for this contest, as I am not expecting to crack it any time soon ...

Good luck everyone!

mfp 2007-01-06 (Sat) 06:10:33

Thank you, I'm giving that link some more visibility by putting it at the top.

evan 2007-01-06 (Sat) 15:33:00


Pit 2007-01-06 (Sam) 15:47:32

Great challenge Mauricio! I didn't find it easy at all. Maybe I'm getting too old...

mfp 2007-01-06 (Sat) 17:48:22

Well, it's not that easy, but it cannot stand against an experienced Rubyist for too long. And the effort is very assymmetric: it takes much longer to make than to crack, the reason being of course that after all the program does know how to decode itself. But it's still enough to discourage most people :-)

I'll try to make it harder next time ;)

John Aughey 2007-01-07 (Sun) 14:51:05

It took me longer than it should have. I'll do better next time.

So, where is the script? - Foo (2007-01-05 (Fri) 10:30:29)

Is the first part of the puzzle to find the code that contains the puzzle?

mfp 2007-01-05 (Fri) 13:28:11

The first part is waiting until the script is made available on Sat. 2007-01-06 20H UTC.

kein Titel - Stefan (2007-01-06 (Sam) 15:15:27)

Okay, i completed it... but i kind of cheated. I think :) I hope the "All means are allowed" from http://eigenclass.org/hiki.rb?crackme+ruby+pastime is still valid. Anyway, great challenge ... and that animation is really great, btw :)

Kevin Ballard 2007-01-06 (Sat) 15:31:26

Wow, I just beat it a hair behind you.

That was really tough.

I'm also curious as to what you are referring to when saying "All means are allowed", because I'm pretty sure I didn't do anything that could be disallowed to find this code.

evan 2007-01-06 (Sat) 15:39:43

Ah, I see I was beaten. Stefan, I'm pretty sure I used your same way. I don't count it as cheating though. It's more like calling your mom on the phone.

Stefan 2007-01-06 (Sam) 15:39:53

Well, i already completed it at about 20:55 utc ... and to say what i did would be a how-to for those who didn't complete it yet, so i'm afraid i can't tell :)

evan 2007-01-06 (Sat) 15:50:12

I started late, and spent most of the time getting Ruby 1.8.5 installed. So....

I'm full of excuses.

Jamis Buck - rluv (2007-01-06 (Sat) 22:52:02)

I am pleased to see that Jamis is on the leader board, and that Rails Core spends energy on more than just Rails and contracting for new media startups.

Jamis 2007-01-12 (Fri) 20:30:02

You're definitely not cynical or anything, though. I can tell. ;)

No Title - Mathew Abonyi (2007-01-08 (Mon) 19:57:41)

That was a very interesting little challenge. I love the animation. Nice one!

It's *really* a bomb on my Debian sarge! - AC (2007-01-11 (****) 07:53:36)

$ hash -r
$ hash
hash: hash table empty
$ type ruby1.8
ruby1.8 is /usr/bin/ruby1.8
$ dpkg -S /usr/bin/ruby1.8
ruby1.8: /usr/bin/ruby1.8
$ dpkg -l ruby1.8|tail -1
ii  ruby1.8        1.8.2-7sarge5  Interpreter of object-oriented scripting lan
$ ruby1.8 -v
ruby 1.8.2 (2005-04-11) [i386-linux]
$ RUBYOPT="" ruby1.8 happy2007-eigenclass.org-1.8.2.rb
(eval):2: [BUG] Segmentation fault
ruby 1.8.2 (2005-04-11) [i386-linux]

Aborted (core dumped)

..or I was cracked my system itself? :-(

mfp 2007-01-11 (Thr) 12:05:17


The puzzle does uses some uncommon tricks, so it might have exposed an old compiler-dependent bug. It works OK with a 1.8.2 executable I compiled myself (on Sid, not that it matters).

keep trying - tim (2007-01-14 (Sun) 09:34:16)

took me two sunday afternoons - but i learned quite a lot on the way! so don't give up yet.

No Title - Marcus (2007-01-27 (Sat) 12:17:27)

I learned a lot, but had to use other means to get to the solution too. Had I solved it with only ruby, I would have learned a lot more. Will there be someone explaining the code?

mfp 2007-01-27 (Sat) 12:35:51

I might write a "making of" special or an explanation in a while (maybe accessible only to those that have cracked the code?)

If you leave your address here I'll notify you if I do it.

hoped you enjoyed it

Marcus 2007-01-28 (Sun) 05:43:55

Great! Just send me an email to luniki at googlemail dot com. I never wrote more than 1000 lines of ruby before this contest, so I had a great time learning while cracking your code. In the next days I will try to get the solution without "cheating" ;-)

Haruki Kodera 2007-02-06 (****) 05:30:19

I completed it with only ruby, but I used a means based on "brute force attack". It's not pretty. So I look forward to read the "making of" too.

mfp 2007-02-08 (Thr) 07:00:01

I tried to make brute force attacks more difficult by using "brute force code generation", but I was ultimately limited by the deadline...

Yusuke ENDOH 2007-02-14 (****) 06:07:46

I solved it by one line of code, you know, not in Ruby ;-) I am also looking forward to "making of". I think that the true winner is the organizer. Thank you for the nice game!

Woohoo! - Joseph Riesen (2007-02-08 (Thr) 06:42:56)

Hah! I may not be on the winner's board, but in my defense, I only found this contest a day ago. At least I'm one of the few, the proud, the less-than-3-percent. I sure tried to solve it purely with my Ruby knowhow, but your obfuscation-fu is too great, and I too had to do a little bit of brutish forcing to get to the secret. But hey, 'any means necessary' and all that. Thanks, this was a lot of fun and a pleasant distraction!

Last modified:2007/01/10 17:06:55
Keyword(s):[blog] [ruby] [frontpage] [happy2007] [contest] [challenge] [puzzle]
References:[A Ruby challenge: defuse the code bomb and test your Ruby fu]