Hacker News new | past | comments | ask | show | jobs | submit login
[dupe] Click on the "I" and the "O" (developers.google.com)
77 points by plg on May 9, 2013 | hide | past | favorite | 26 comments



I see some just found the piece of JavaScript that registered the handlers, and others found lists by those people, but...

did anyone else find the codes manually? I did. I quickly realised that it'd break off the code as soon as it couldn't lead to a match, greatly reducing the search space (which was only 256 options to begin with).

As soon as I noticed that, I worked out all the codes by hand in only 15 minutes (including playing with the experiments I found).

I just iterated through the search space (starting at all zeroes, counting up in binary) and eliminated whole sets of numbers as soon as it broke off the input. e.g. starting with all zeroes it breaks off at the third zero, meaning anything under 00100000 was impossible (immediately eliminating 32 of those 256 options in my search).

Did anyone else do that too? Perhaps more interesting: did anyone have a completely different approach?


And another question: what would this be called as a software algorithm? Is it a binary tree walk?


Yes, I did this as well. Was quite easy on my phone.


This has been posted several times: https://news.ycombinator.com/item?id=5670648





space: 00101010

pong: 10000001

simone: 11010011

eightbit: 01010011

song: 11011011

synth: 10001000

ascii: 01111111

bowling: 01110101

rocket: 01000101

burger: 00111001

cat: 11100111

bacon: 10010000

This was done a while ago.


You can also just read the code (the third parameter is the decimal representation of the 'password'):

    ww.mode.register("home", ww.mode.HomeMode, null);
    ww.mode.register("cat", ww.mode.CatMode, 231, 8);
    var isAndroid = navigator.userAgent.match(/Android/);
    isAndroid || ww.mode.register("space", ww.mode.SpaceMode, 42, 8);
    ww.mode.register("pong", ww.mode.PongMode, 129, 8);
    ww.mode.register("bacon", ww.mode.BaconMode, 144, 8);
    ww.mode.register("simone", ww.mode.SimoneMode, 211, 8);
    ww.mode.register("eightbit", ww.mode.EightBitMode, 83, 8);
    ww.util.getAudioContextConstructor() && (ww.mode.register("song", ww.mode.SongMode, 219, 8), ww.mode.register("synth", ww.mode.SynthMode, 136, 8));
    ww.mode.register("ascii", ww.mode.AsciiMode, 127, 8);
    ww.mode.register("bowling", ww.mode.BowlingMode, 117, 8);
    ww.mode.register("rocket", ww.mode.RocketMode, 69, 8);
    ww.mode.register("burger", ww.mode.BurgerMode, 57, 8);


Sure, if you assume everyone has the amazing ability to do decimal to binary conversions in their head.

Also assuming that everyone has the skill to dig through javascript files.


cough https://www.google.com/#&q=231+in+base+2&oq=27+in+ba... Or, you know, Windows Calculator? Or Gcalctool? Or, if you want overkill: http://www.wolframalpha.com/input/?i=231+in+base+2


I certainly didn't do the decimal-binary conversion in my head (mental arithmetic is not my greatest skill). You can open your browser's JS console and use:

    Number(x).toString(2)
x being the decimal value.


  (x).toString(2)


If you're trying to crack a code on developers.google.com, yes I would assume that.


Decoding is easy with pen and paper, if not mentally. You must know your powers of two. In the order that concerns us:

128, 64, 32, 16, 8, 4, 2, 1

----

Let's decompose 231.

----

231 >= 128; That's a 1 in first position. 1

231 - 128 = 103 >= 64; We have a one in the second position. 11.

103 - 64 = 39 >= 32; One in the third position. 111.

39 - 32 = 7 < 16; Zero in the fourth position. 1110.

7 < 8; Zero in the fifth place. 11100

7 >= 4; 111001

7 - 4 = 3 >= 2; 1110011

3 - 2 = 1 >= 1; Final result: 11100111. Enjoy your cats :)


That method is what I did until I went back to school for computer engineering.

All you have to do is integer division by two and keep the remainder. You don't even need to know the powers of two.

Here's an example with 137.

  137 % 2 = 1
  68  % 2 = 0
  34  % 2 = 0
  17  % 2 = 1
  8   % 2 = 0
  4   % 2 = 0
  2   % 2 = 0
  1   % 2 = 1
Now reverse the order and zero extend if necessary.

Final result: 10001001

You can use a similar method to convert the fractional part of a float, but with multiplication.


Neat, thanks for the tip :)


If you spend enough time trying to debug systems that are communicating in binary, its an ability you start to pick up, especially for small numbers.


I put OIIIIIII and I got the same but in ASCII art. https://developers.google.com/events/io/experiment-ascii


0111111 got me to an ASCII version of the logo


It looks to be...try 11011011 =)


11011011 took me to https://developers.google.com/events/io/experiment-song

And 10010000 took me to https://developers.google.com/events/io/experiment-bacon

Time to see if I can find any more! :)


That doesn't work for me. OIOIOOII does, though - it leads to https://developers.google.com/events/io/experiment-eightbit.


This one only works for some people. I am not one of them.


If you replaced the O with 0, why not replace the I with 1?


Also OIIIIIII




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: