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.
  • by Scrameustache ( 459504 ) on Saturday December 22, 2007 @01:55PM (#21791816) Homepage Journal
    And a movie with a release date coinciding with those numbers would be the culprit, in my opinion.
    • I was thinking about a new segway model.
  • In a little under a month, it will be the 2000th anniversary of whatever it is.
  • by __aaclcg7560 ( 824291 ) on Saturday December 22, 2007 @01:59PM (#21791840)
    If the mysterious company makes you jump through hoops to get into the door, will they jump through hoops to make you feel like a valued employee or just break out the whips since you're lucky to have the job?
    • by lars ( 72 )
      Oh spare me. They aren't going to turn away a qualified candidate that applies in a conventional way. This is a way for them to get some free publicity and maybe even (heaven forbid) have some fun.
    • by martincmartin ( 1094173 ) on Saturday December 22, 2007 @08:09PM (#21794018)
      I work for a company that uses puzzles to attract and evaluate people. We started doing this in the late '90s after hiring people who had good resumes and interviewed well, but couldn't program. Having evaluated a bunch of submissions, I can't imagine hiring someone without seeing a sample of their code. Resumes have almost no information in them. Someone with "10 years of C++" might know the language like the back of their hand, or might write simple, sloppy code. Pretty much any phrase on a resume could mean just about anything. A programming puzzle is like an audition. It's better than writing code during the interview. Writing code in an interview on a white board is pretty far from real coding: no symbol completion, no access to references on the web, a strict time limit, someone who holds a key to your career watching your every move. Only time for simple questions, and no way for the person to choose a problem aligned with their skills. If a company asks you to spend a few hours, so they can decide whether to employ you for years, you can be sure that you'll work with people who have been similarly vetted, and they won't write spaghetti code with variable names like t1 and d2. And it can be quite frustrating maintaining code that makes www.beyondfailure.com look good.
  • 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.
  • It's the "Tri-Valley Singles Lock & Key and Dance"... Clearly.

     
  • Anonymous Coward? (Score:5, Insightful)

    by Crimsane ( 815761 ) <clarke@nullfs.com> on Saturday December 22, 2007 @02:03PM (#21791872) Homepage
    I'll bet you dollars to donuts that that company creating all of this is the same one to submit the story.
  • by FooAtWFU ( 699187 ) on Saturday December 22, 2007 @02:03PM (#21791878) Homepage

    5. You're always looking for ways to eliminate waste, at all levels of development.
    How ironic!
  • 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.
  • l33t spe4k (Score:4, Funny)

    by frietbsd ( 943773 ) on Saturday December 22, 2007 @02:06PM (#21791896)
    eyAnOicgPT4gJycsICcgJyA9PiAnLScsICdzXG4nID0+ICdzLmNvbVxuJyB9 (3548, 4648)

    "eye and i......"

    my l33tspeak isnt what it used to be.

  • by Sara Chan ( 138144 ) on Saturday December 22, 2007 @02:06PM (#21791900)
    The significance of the date "01/18/2008" (the eleventh question) is that the company is American and does not use ISO date formats [wikipedia.org]. The particular date is unambiguous, but in general that is not true with their format, e.g. "02/03/2008" could mean either February 3rd (for American readers) or March 2nd (for European readers). ISO is the global standard, and the format removes ambiguity: 2008-01-18. A small additional benefit is that it makes sorting trivial.

    If these people were really as committed to quality as they pretend to be, they would be promoting the ISO format, to facilitate less-ambiguous global communication.
  • by 2020steve ( 999594 ) on Saturday December 22, 2007 @02:08PM (#21791912)
    "Drink more Ovaltine"

  • we would like to extend a job offer to you.

    by hitting upon the clever solution of submitting the puzzle to slashdot as a story subject and letting random slashdot commentors solve the puzzle for you, you have displayed a high level of ingenuity and cleverness. we therefore would like to hire you as the manager of the 3 other programmer applicants who slogged and plodded it out and solved the puzzle through brute mental force on their own. your salary will be 250% of theirs.

    congratulations again,
    anonymoustech inc.
    • Being smart comes in different forms. Some solve puzzles and code, etc., others have business sense and know how to use what others have already done. Look at Bill Gates; he bought DOS and sold the hell out of it. He never created anything other than a solid business plan.
  • I don't know what the name of the movie is or whatever, but I just remember all the trailer said in the movie was:

    1-18-08

    So could it be some type of nerdy viral campaign like Ilovebees?

  • by Anonymous Coward
    42.
  • The Craig's list posting is already removed.
  • A better way:

    • Find out the people who have set up webpages and are public personas on the Net. You can find people from your connections (LinkedIn!), googling, from the free software community, or from professional societies.
    • Watch their blogs and generally their sites for some time, to ensure they are really the right people.
    • At some point introduce yourself and start discussing with them for non-professional topics.
    • If you "talk the same language", start sharing ideas about professional issues.
    • Do some
  • The link to Craig's list gives the following page.

    "This posting has been flagged for removal
    (The title on the listings page will be removed in just a few minutes.)"
  • by Anonymous Coward on Saturday December 22, 2007 @02:30PM (#21792036)

    f = function(d) {
        TDD.assertEquals = function () { return true }
    }

    ...I mean, come on guys, at least design your test to be a little resilient to people who grok JavaScript.
    • 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;
                  }
              }
          }
      };
  • I stopped by http://wanted-master-software-developers.com/ [wanted-mas...lopers.com] for a look-see.

    If the talent they're looking for involves figuring out undocumented code with function names like "f" and variable names like "d", I think I'll pass.

    Kudos for having testable code, though.
  • Next clue? (Score:2, Interesting)

    So passing through all the tests on http://wanted-master-software-developers.com/ [wanted-mas...lopers.com] brings you to:

    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

    With alt text "list, uniquify, relativity". So the above has the be transformed again into a new url. Some kind of word frequency trick?

  • 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.
    • 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))
  • Clues so far... (Score:4, Interesting)

    by knewter ( 62953 ) on Saturday December 22, 2007 @03:18PM (#21792316)
    I don't have the function that passes the tests that they wanted yet, but here's a collection of everything so far:

    First off, the craigslist posting leads to:
    http://wanted-master-software-developers.com/?key= [wanted-mas...lopers.com]
    Then, the main.css file has two bits of non-css info in it. At the very bottom, there's: /*
    34w4wa
    */
    Then at the top, we have: /*
    ([Dollar,Daily Universal Register] % 100).([Flavian II => Severus] / 2 - 1).([Sherman Anti-Trust,Van Gogh] / 9).([Tycho Brahe,Stellar] / 12)
    */
    There's a hint at the bottom of the page, as well:
    sticky falling bricks of truth

    I have nothing on 34w4wa. Daily Universal Register, as was noted elsewhere, used to be the name of the Times of London. Dollar, who knows? Flavian II was the Patriarch of Antioch. Setpimius Severus was a Roman general, and Roman emperor. Sherman Antitrust Act was the first US Government action to limit cartels and monopolies. Van Gogh was of course a painter. Tycho Brahe was an awesome astronomer, and stellar, again, I don't know.

    It's an array of four things, with dots between them - an IP address. Perhaps something with dates?

    The date format tells us it's an American-related quiz. The US dollar was adopted in 1785, while the Daily Universal Register was also begun in 1785. 1785 mod 100 = 85.

    Flavian II died in 518. Severus reigned from 193-211, when HE died. 518-211 = -307, /2 ~=-154 - 1 = -155.

    So far, 85.155...

    Sherman Antitrust and Van-Gogh's death were both in 1890. 1890/9 = 210

    So 85.155.210...

    Tycho Brahe died 1601...I don't know about stellar, but other dates have coincided so 1601/12.to_i = 133

    85.155.210.133 doesn't appear to have a web server on it, but that 155 is really suspect, as is the 133 (not an integer). Brahe was BORN in 1546, and 1546/12 = 129.

    85.155.210.129 isn't answering either. Again, the 155 bothers me.

    Flavian II died 518, but 518/2 -1 = 258, which isn't exactly a meaningful number for an IP address, eh?

    I got my Severus wrong, as there was a Severus that succeeded Flavian II in 512, 14 years after Flavian II became patriarch. 14/2 - 1 = 6.

    85.6.210.129 has no website on it either, but it's feeling better. Maybe that 129's a red herring...I feel like the 85 and 210 are right as rain though.

    A google search for 'tycho brahe stellar' returns a couple of hits for an article listing 1572 as a date, and 1572/12=131. Turns out SN1572 was known as Tycho's Nova.

    85.6.210.131 still gives me nothing though.
    • by knewter ( 62953 )
      Also, googling the resulting message from the test page yields an obvious match with some text from http://en.wikipedia.org/wiki/Lean_manufacturing [wikipedia.org]
      • by knewter ( 62953 )
        The quote I'm referring to:

        "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 o
        • by knewter ( 62953 )
          Didn't see the alt text...that quote's a red herring. However, I've got a list of the words, with frequency, right here:

          irb(main):005:0> q.words.to_a
          => [["which", 1], ["consumer", 3], ["financially", 5], ["And", 3], ["of", 3], ["persons", 4], ["than", 4], ["cost", 5], ["great", 4], ["increase", 4], ["efficiency", 3], ["most", 2], ["almost", 3], ["repeated", 1], ["country", 2], ["has", 2], ["to", 1], ["in", 1], ["mechanically", 1], ["industrially", 1], ["the", 3], ["thought", 2], ["success", 2], ["For
          • by knewter ( 62953 )
            Aaaand, sorted:

            irb(main):010:0> q.words.to_a.sort{|a, b| a[1] b[1]}.reverse
            => [["have", 5], ["workers", 5], ["financially", 5], ["cost", 5], ["exhibits", 5], ["than", 4], ["persons", 4], ["increase", 4], ["great", 4], ["the", 3], ["possible", 3], ["contradictory", 3], ["Ford's", 3], ["And", 3], ["of", 3], ["consumer", 3], ["efficiency", 3], ["almost", 3], ["has", 2], ["requirements", 2], ["country", 2], ["most", 2], ["quality", 2], ["thought", 2], ["success", 2], ["to", 1], ["repeated", 1], ["in", 1]
    • I got my Severus wrong, as there was a Severus that succeeded Flavian II in 512, 14 years after Flavian II became patriarch. 14/2 - 1 = 6.


      I think you're overthinking that part there. The succession took place in *512*. (512/2)-1 = 255.

      http://85.255.210.131/ [85.255.210.131] comes back with a page that says "yes".
      • by SigILL ( 6475 )

        http://85.255.210.131/ comes back with a page that says "yes".

        Also:

        $ telnet 85.255.210.131 80
        Trying 85.255.210.131...
        Connected to b.tinyurl.com.
        Escape character is '^]'.
        GET / HTTP/1.0
        Host: 85.255.210.131

        HTTP/1.0 200 OK
        Connection: close
        Content-Type: text/html
        Accept-Ranges: bytes
        ETag: "1942930483"
        Last-Modified: Tue, 03 Jan 2006 22:22:05 GMT
        Content-Length: 30
        Date: Sat, 22 Dec 2007 19:53:49 GMT
        Server: TinyURL/1.6

        <html><body>yes</body></html>
        Connection closed by foreign h

    • So if you solve it, you prove to them that you will jump through pointless artifical hoops? No thanks; I'd rather solve real problems.
    • Meanwhile I was doing saki bombs at a bar with some women from work.
  • and, well, what is the significance of the date '1-18-08?

    Kevin Costner turns 53 years old.

    When do I start?
  • I didn't know there were more than 12 months in a year.
  • var jMax=d[0].length-1;
    for (var i=d.length-1; i>0; i--){
      for (var j=jMax; j>=0; j--){
        if (!d[i][j]&&d[i-1][j]&&((j>0&&!d[i][j-1])||(j<jMax&&!d[i][j+1])||(j==0&&!d[i-1][1])||(j==jMax&&!d[i-1][j-1]))){
          d[i][j]=true;
          d[i-1][j]=false;
        }
      }
    }
  • Are you kidding?

    I've gotten this in my email like a hundred times!!

    How would you like your penis to be this long?
    --->"eyAnOicgPT4gJycsICcgJyA9PiAnLScsICdzXG4nID0+ICdzLmNvbVxuJyB9" ??

    ORDER NOW!!!!
  • I just got back from digging out my secret spidey decoder ring.

    Spoilsports, all of you!
  • Two words (Score:3, Insightful)

    by mrjb ( 547783 ) on Saturday December 22, 2007 @06:10PM (#21793390)
    Nerd sniping [xkcd.com]
  • by TheMiddleRoad ( 1153113 ) on Saturday December 22, 2007 @07:22PM (#21793760)
    Helmsville McDonald's Hiring Fry Cook Seeking highly motivated candidates. Inquire at drive-through.

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

Working...