Catch up on stories from the past week (and beyond) at the Slashdot story archive

 



Forgot your password?
typodupeerror
×
Programming

Mystery Company Recruiting Talent With a Puzzle 354

An anonymous reader writes "Google has previously used coding competitions to locate top talent. In a new twist on the idea, an anonymous tech company is posting a help-wanted ad that challenges developers to find out who the company is. A little digging and text mashing reveals a website containing a Web 2.0 puzzle that makes notpron look like child's play. So, fellow developers, who is this company, and, well, what is the significance of the date '01-18-08?'" Update: 12/12 20:20 GMT by KD : Replaced link to a removed Craigslist ad with a mirror.
This discussion has been archived. No new comments can be posted.

Mystery Company Recruiting Talent With a Puzzle

Comments Filter:
  • One word... (Score:5, Informative)

    by DigiWood ( 311681 ) on Saturday December 22, 2007 @01:54PM (#21791806)
    Cloverfield. 01-18-08 is the release date.
  • Save some time (Score:5, Informative)

    by madsheep ( 984404 ) on Saturday December 22, 2007 @01:59PM (#21791846) Homepage
    If anyone wants to save some time (like 30-60 seconds) with Base64 to Ascii:

    eyAnOicgPT4gJycsICcgJyA9PiAnLScsICdzXG4nID0+ICdzLmNvbVxuJyB9 converts to { ':' => '', ' ' => '-', 's\n' => 's.com\n' }
  • Base64 (Score:4, Informative)

    by HateBreeder ( 656491 ) on Saturday December 22, 2007 @02:00PM (#21791856)
    The clue is base 64 for:
    { ':' => '', ' ' => '-', 's\n' => 's.com\n' }

    Now, if you notice [RFC 3548] later changed to 4648:
      "CB-" ":" ":" ":"
                  ":"

    my 30-seconds attempt is over.
  • by mukund ( 163654 ) on Saturday December 22, 2007 @02:05PM (#21791892) Homepage
    Just base64 decode the string that appears to be made of random chars. You get:

    { ':' => '', ' ' => '-', 's\n' => 's.com\n' }

    Apply that to the subject in the contact details. You get:

    http://wanted-master-software-developers.com/ [wanted-mas...lopers.com]

    That was pretty easy. The test then seems to move to web programming and I'm not interested.
  • Re:Base64 (Score:5, Informative)

    by jcaldwel ( 935913 ) on Saturday December 22, 2007 @02:14PM (#21791950)

    Its a find-and-replace that turns the title:
    Wanted: Master Software Developers

    Into:
    http://wanted-master-software-developers.com/ [wanted-mas...lopers.com]

    ... and the test continues...

  • by taloobie ( 537189 ) on Saturday December 22, 2007 @02:20PM (#21791982) Homepage
    /*
    ([Dollar,Daily Universal Register] % 100).([Flavian II => Severus] / 2 - 1).([Sherman Anti-Trust,Van Gogh] / 9).([Tycho Brahe,Stellar] / 12)
    */

    that's at the top of the main css file. the other js files don't help...
  • Source code (Score:5, Informative)

    by Raynor ( 925006 ) on Saturday December 22, 2007 @03:13PM (#21792288) Journal
    Am I the only one who grabbed their /js/ and peeked at the code...

    "// Note: It is not necessary to reverse-engineer this file in order to complete the contest"

    I did no testing of any sort... inside framework.pack.js it says

    p.setAttribute("title","list, uniquify, relativity");
    p.appendChild(document.createTextNode("Ford's, success, has, the, country, almost, financially, industrially, mechanically, exhibits, in, higher, than, persons, have, thought, possible, contradictory, requirements, of, efficiency, increase, great, workers, cost, consumer, And, cost, cost, consumer, And, cost, cost, consumer, And, workers, workers, workers, workers, to, repeated, great, increase, quality, increase, great, great, increase, quality, efficiency, efficiency, which, are, of, contradictory, contradictory, requirements, of, possible, have, have, thought, possible, have, have, persons, than, than, most, persons, persons, than, most, exhibits, exhibits, exhibits, exhibits, financially, financially, financially, financially, almost, the, the, country, almost, Ford's, Ford's, success, has")); ... That was easy.
  • After solving 1/3... (Score:1, Informative)

    by Anonymous Coward on Saturday December 22, 2007 @05:29PM (#21793188)
    As you might have noticed already, after you have solved the 1/3 puzzle, you can type in numbers 0 to 9 and/or comma and dash/minus to the text box. The different numbers represent some kind of instructions to draw with the blue boxes after you press the button.

    So my guess is that with correct numbers entered to the box, you get the key drawn with blue boxes to go to the next phase (which might be related to the "/images/code.png" or some other hint in the "/css/" extra css files.
  • by VValdo ( 10446 ) on Saturday December 22, 2007 @06:06PM (#21793370)
    FWIW the code.png is 591x19 pixels. 19 is prime, and 591 is a multiple of primes 197 and 3.

    A histogram of code.png shows all values concentrated at 8 locations, making me think this is digital information, not something meant to be viewed as an image.

    Nothing interesting from "strings code.png"

    That's all I have to contribute. Off to do something else now...

    W
  • Re:Clues so far... (Score:1, Informative)

    by Anonymous Coward on Saturday December 22, 2007 @06:49PM (#21793592)
    Solving the first puzzle yields the keyword "coLLAborATE". http://wanted-master-software-developers.com/?key=coLLAborATE [wanted-mas...lopers.com] is the next puzzle.
  • by Furry Ice ( 136126 ) on Saturday December 22, 2007 @07:20PM (#21793748)
    Am I the only one who enjoyed the challenge of solving the problem the way it was intended? Someone correctly guessed that this is like Tetris, where true is a block and false is empty space. However, it's unlike Tetris in some key ways. If you try to solve it, you'll see how as you hit test cases that your code fails on. Here's my function, which passes all tests. I had to try three different algorithms because new information about the behavior of the blocks necessitated starting from scratch with more complexity twice.

    f = function(d) {
        var height = d.length;
        var width = d[0].length;
        var find_base = function(t, i) {
            for (j = 0; j < width; j++) {
                if (d[i][j]) {
                    if (d[i+1][j]) {
                        t[j] = true;
                    }
                    if (j > 0 && j < (width - 1)) {
                        if (d[i+1][j-1] && d[i+1][j+1]) {
                            t[j] = true;
                        }
                    }
                }
            }
        };
        var add_sticky = function(t, i) {
            while (true) {
                var stop = true;
                for (j = 0; j < width; j++) {
                    if (d[i][j] && !t[j]) {
                        if (j > 0 && t[j-1]) {
                            t[j] = true;
                            stop = false;
                        }
                        if (j < (width - 1) && t[j+1]) {
                            t[j] = true;
                            stop = false;
                        }
                    }
                }
                if (stop) {
                    break;
                }
            }
        };
        var i, j;
        var t = new Array(width);
        for (i = height - 2; i >= 0; i--) {
            for (j = 0; j < width; j++) {
                t[j] = false;
            }
            find_base(t, i);
            add_sticky(t, i);
            for (j = 0; j < width; j++) {
                if (d[i][j] && !t[j]) {
                    d[i][j] = false;
                    d[i+1][j] = true;
                }
            }
        }
    };
  • 2/3 (Score:4, Informative)

    by JackHoffman ( 1033824 ) on Saturday December 22, 2007 @08:37PM (#21794174)
    Part 2 is at: http://wanted-master-software-developers.com/?key=coLLAborATE [wanted-mas...lopers.com]

    The code.png contains 6 colors. If you interpret it linearly and separate it into blocks delineated by green-blue, you'll notice that many of these blocks appear several times throughout the file.

    Someone in the Google group has decoded the CSS classnames in the source (substitution cypher), the result then leads to part 3: http://www.wanted-master-software-developers.com/?you=me [wanted-mas...lopers.com]
  • Re:Source code (Score:4, Informative)

    by marcansoft ( 727665 ) <hector@TOKYOmarcansoft.com minus city> on Saturday December 22, 2007 @10:05PM (#21794642) Homepage
    That does you no good, since you need to write the proper function to proceed. Otherwise, the logic of the bottom block thing doesn't work. First, you need the proper Javascript function which implements the sticky block logic:

    f = function(d) {
    var h = d.length;
    var w = d[0].length;

    dxy = function(x,y) {
    return x<w && y<h && x>=0 && y>=0 && d[y][x];
    }

    for(var y = h-2; y >= 0; y--) {
    for(var x = 0; x < w; x++) {
    if(d[y][x] &&
    !dxy(x-1,y) &&
    !dxy(x+1,y) &&
    !dxy(x,y+1) &&
    !(dxy(x+1,y+1) &&
    dxy(x-1,y+1))) {
    d[y][x]=false;
    d[y+1][x]=true;
    }
    }
    }
    }


    This basically drops all the blocks in the field, unless they're touching another block on either side, below, or they're touching two blocks on both diagonal corners below. Here the field is an array of arrays, and the blocks are true or false.

    Then, you get the Ford text plus a field in the bottom. The field accepts a list of integers. You have a "dropper". For each integer, the dropper moves that number of positions to the right (positive) or left (negative), and drops a block following your algorithm (that's why you need the JS function to work). Note that the positions are relative, not absolute.

    Now for the Ford code. The hint is in the tooltip text. List, Uniquify, Relativity:

    LIST the words in both the original text (from wikipedia) and the text that comes up after solving the problem. Split it into words (maintain apostrophes as part of words, since it's part of the word Ford's).

    UNIQUIFY the original text, getting rid of duplicate words while maintaining the word order. Leave the first word of each.

    RELATIVITY: Find the positions of each word in the mangled text from the original text. Given these positions, calculate the position change (relativize, differentiate, call it however you want). You'll get something like 0,-6,5,-5,4,-4,2,-2,1,-1,-1,1,-3,3,-4,4,-5,5.... Drop the first number of each pair (the initial zero is an artifact), leaving -6, -5, -4, -2... These are absolute positions of the dropper. Differentiate again, giving 0,1,1,2,1,2,2,1,1. Now that looks like a set of instructions for the dropper. Plug it in, and voila.

    Here's the Python code to make it happen:
    #!/usr/bin/python

    import re

    data = "Ford's, success, has, the, country, almost, financially, industrially, mechanically, exhibits, in, higher, than, persons, have, thought, possible, contradictory, requirements, of, efficiency, increase, great, workers, cost, consumer, And, cost, cost, consumer, And, cost, cost, consumer, And, workers, workers, workers, workers, to, repeated, great, increase, quality, increase, great, great, increase, quality, efficiency, efficiency, which, are, of, contradictory, contradictory, requirements, of, possible, have, have, thought, possible, have, have, persons, than, than, most, persons, persons, than, most, exhibits, exhibits, exhibits, exhibits, financially, financially, f
  • Re:Source code (Score:5, Informative)

    by marcansoft ( 727665 ) <hector@TOKYOmarcansoft.com minus city> on Saturday December 22, 2007 @10:20PM (#21794732) Homepage
    Crap, I'm a moron. I had a bug in the regular expression, and I managed to work around it with the other code, causing the problems. This caused the code to insert a 0 between everything, yielding the alternating +/- numbers, and the "o" oddity was caused by two separators together in the source text.

    Turns out all you need is one differentiation and a non-retarded regular expression that doesn't insert empty words between each pair of non-word characters.

    I've also made the variable names resemble less those of the problem (read: not single-character madness). And added some comments.

    #!/usr/bin/python

    import re

    data = "Ford's, success, has, the, country, almost, financially, industrially, mechanically, exhibits, in, higher, than, persons, have, thought, possible, contradictory, requirements, of, efficiency, increase, great, workers, cost, consumer, And, cost, cost, consumer, And, cost, cost, consumer, And, workers, workers, workers, workers, to, repeated, great, increase, quality, increase, great, great, increase, quality, efficiency, efficiency, which, are, of, contradictory, contradictory, requirements, of, possible, have, have, thought, possible, have, have, persons, than, than, most, persons, persons, than, most, exhibits, exhibits, exhibits, exhibits, financially, financially, financially, financially, almost, the, the, country, almost, Ford's, Ford's, success, has"

    text = "Ford's success has startled the country, almost the world, financially, industrially, mechanically. It exhibits in higher degree than most persons would have thought possible the seemingly contradictory requirements of true efficiency, which are: constant increase of quality, great increase of pay to the workers, repeated reduction in cost to the consumer. And with these appears, as at once cause and effect, an absolutely incredible enlargement of output reaching something like one hundredfold in less than ten years, and an enormous profit to the manufacturer"

    def do_list(string):
        return re.split(r"[ ,.:]+",string.lower()) # split by any combination of space, comma, period, colon.

    def do_uniquify(lst):
        out_l = []
        for i in lst:
            if i not in out_l: # ignore dupes
                out_l.append(i)
        return out_l

    def do_relativity(textlist,datalist):
        last_pos = 0 # keep track of last position
        out_l = []
        for word in datalist:
            index = textlist.index(word) # find index in source text
            out_l.append(index-last_pos) # differentiate index
            last_pos = index
        return out_l

    textlist = do_list(text)
    datalist = do_list(data)
    uniquelist = do_uniquify(textlist)
    relative_numbers = do_relativity(uniquelist,datalist)
    # stringize all numbers, join with commas.
    print ",".join(map(str,relative_numbers))
  • Re:Base64 (Score:4, Informative)

    by Compuser ( 14899 ) on Sunday December 23, 2007 @01:03AM (#21795592)
    OK, so apparently (and this is again from hints on the web, not my doing) all you need to do to pass that whole part 1 of the test
    is to go to http://wanted-master-software-developers.com/ [wanted-mas...lopers.com] and the URL will change to http://wanted-master-software-developers.com/?key= [wanted-mas...lopers.com]
    so you paste the word coLLAborATE at the end: http://wanted-master-software-developers.com/?key=coLLAborATE [wanted-mas...lopers.com] and you get to the next step.

    For an explanation of the in between parts see http://edschweppe.livejournal.com/88912.html [livejournal.com]
  • Re:One word... (Score:2, Informative)

    by TGoddard ( 1058678 ) on Sunday December 23, 2007 @03:50AM (#21796312)
    ISO format uses most significant digit first, like numeric notation. This makes dates easy to compare without actually parsing them.
  • 3/3 (Score:3, Informative)

    by JackHoffman ( 1033824 ) on Sunday December 23, 2007 @10:44AM (#21797750)
    It has been solved. The code.png image is indeed a sequential file. Counting sequences of one color separated by other colors reveals a numbering scheme between the red dots which, when applied to the rest of the file, yields indexes into the decimal representation of PI (the description shows familiar substrings at offsets 0, 1 and 2.) Taking 6 digits each from the listed positions gets you two 3-digit ASCII codes which form the description of a stack machine that decodes the messages on pages 2/3 and 3/3. The 2/3 message is "cerebrum, vere-tempus, together (adv.)". Turn Latin into English and English into Latin and you get "brain, real-time, simul (una)". Googling reveals that a company called N-BRAIN will release a collaborative software development package called UNA on 2008-01-18. An encoding of "UNAreleasedate" for the stack machine is "eRnnnueNueAueRleIaue-leNaueRleBanue-leNaue-leIanueBleRaue-leNaueBleBanue-leIanueBleRanue-leNau", which transports you from page 3/3 to the congratulations. They'll send you a standalone version of UNA if you provide them with your email address and the email addresses of your collaborators. You can also check a box to request an interview. A cookie contains the code you entered in step 1/3. They say they'll look at the order of the entrants and the code to determine who gets an interview.

    N-BRAIN is a privately held company in Boulder, Colorado. You can apply for a job without going through the puzzle. According to http://www.n-brain.net/jobs.htm [n-brain.net] they don't look at resumes but give you an assignment to evaluate your code-fu. The team page lists four people, including the founder John A. De Goes, who is the author of two books on game programming ("3D Game Programming with C++" and "3D Game Programming with C++ Gold Edition"), worked as an instructor at http://www.gameinstitute.com/ [gameinstitute.com] and is a member of the Boulder martial arts and agile software meetup groups.

What is research but a blind date with knowledge? -- Will Harvey

Working...