Wednesday, August 27, 2014

The Solution

Wow.  Where to start.

Before I step through the solution, I'd like to say a few things about the 2013 version of the Ginter Code.  A lot of people have expressed a lot of -- hmmm, I guess "emotions" is an ambiguous enough word -- about the 2013 Code.  I find myself in somewhat of a delicate position, because I have been one of the most vocal public critics of this particular program.  (Check my tweets ... I admittedly said some pretty awful things.)  Even now, just a few hours removed from "winning", I am still tempted to talk about all the things that I didn't like about the code.  It's difficult for me to enjoy the victory when I don't feel like we truly earned it.  That is largely due to the nature of the submission method of the solution, which allowed for crowd-sourcing on steroids at the end.  Maybe they'll put an asterisk next to our names in the Ginter Code Hall of Fame.  But I digress.  :)

The fact that my team won this year's code almost entirely came down to timing.  And speaking of that -- I can't go further without acknowledging the team.  Jim Melichar is one of the smartest guys I know.  He somewhat randomly asked me to work with him on the 2012 Ginter Code, and over the last two years we've come to be good friends.  Matthew Cantrell was a late addition to our team, just a little over two weeks ago in fact.  Matt turned out to be even more insane than Jim and I, which (as most of you can imagine) ended up being critical on our path to the solution.  (Matt, you know I kid!)  He worked through sleepless nights with a newborn baby, and never gave up ... I cannot emphasize this enough.  And finally, Brian Duginske, a friend of Jim's, worked with us off and on over the last year.  I mention him last for a reason -- he alone conjured up the missing piece only a few minutes before we submitted the winning solution.  What a rush!

I feel it's best to go ahead and get all my criticisms out of the way, and in one place, so that everyone can enjoy reading through the solution.  And although it may seem petty to even be a critic, I voice these with a purpose -- to express the thoughts and hearts of all Codebreakers.  My hope is that the Codemaster will take these things to heart, and will consider them in the development of future Ginter Code programs.

  • There was a six-month period of complete Codemaster silence.  No tweets from September 2013 to March 2014.  While that may not seem like a big deal to many, the code actually was not solvable until July 2014.  This means that Codebreakers spent a year trying to dream up ideas for what the code might even be, much less a solution.  Jim, Brian and I came up with some very complex and ridiculous stuff.  In the end, all of it was full of sound and fury ... hundreds of collective hours that we will never get back.  Many of us thought (and still think) that the Codemaster may have had a different concept initially, then deviated late in the game due to lost time.  I'm not sure what happened there, but even a little communication to the effect of "this code is not solvable yet" would have put us all at ease.  Regardless, the CM seems to have already recognized this fault, as he has promised to tweet at least once a week during the 2014 Ginter Code.
  • The intent of the code seemed to change completely from September 2013 to July 2014.  I sincerely hope that the Codemaster will share some background information on this.  I know some may disagree with me, and I'll get deeper into it later -- but two of the earliest clues in the program seem to point not just to a different solution, but to an entirely different code.
  • The solution submission method allowed for reverse engineering of the solution.  To be perfectly honest -- I would not be writing this if it weren't for the open-source submission method.  We were able to glean things from each other, and reverse-engineer each others' thought processes, and this allowed my team to piece together the majority of the answer without fully thinking through the clues all by ourselves.  I know this is perhaps not what the Codemaster intended, but this is how it came to pass.  Jim was undoubtedly, and admittedly, the biggest Twitter critic of this solution path.  In his words ... the grand finale of the 2013 Code became a Twitter version of The Price Is Right's "One Away" game.  (Codemaster, do I have at least one card right??)
  • Codebreakers enjoy two things - COMPLEXITY and DISCOVERY.  I can't imagine trying to design a code program.  I know that I would fail miserably.  So here I stand, throwing stones at the Codemaster for something that is not only 'free', but that I have never tried to do myself.  My intent regardless, as I stated before, is to hopefully help better future codes.  I've learned a lot about the psychology of code contests over the last year.  Only now can I see what a challenge it must be to design a code system that is both nearly consistent and complete, in a Godel's-Incompleteness-Theorem-axiomatic sense.  The challenge as a designer, I suppose, is to create a system that is complete and consistent enough to work.  I'm rambling here, but my point is -- Codebreakers really love cracking complex problems, and they love discovering things!  The 99x99 star map from the 2011 program is a great example of this.  Read back through Guillaume's and Frank's solution blog for the 2011 solution, and you can see how excited they were to crack that code.  Even the 2012 code involved a significant amount of discovery, despite how abruptly that code was ended.  In my opinion, the 2013 code solution greatly deviated from previous programs.  Even now, it seems to me that complexity was replaced with quantity and vagueness.  Again, I feel like something may have happened behind the scenes with the design; I really hope we get some feedback on that.

Now that I'm done whining and grumbling -- on to the solution!!!

****************************************************************

Right up front -- here was the final solution as submitted.



PREMISE

The premise of this contest, at 30,000 feet -- Colin, a Topps A&G set developer, was transported back in time to the year 1887.  Colin is having a hard time communicating directly with us, because someone or something is trying to prevent him from coming back.  He is forced to speak to Codebreakers using a series of clues, which Codebreakers must decrypt in order to bring Colin back to 2013.




 
It would take me an entire day to write up every detail of this code.  Instead, I'll try to hit the high points and give as much detail as time permits.


MINI-CODE #1 - "SOAP TWEET"

The first 'mini code' began with these tweets, although we wouldn't know that until much, much later:




This method would come to be known as "Mini-Code 1".  The second of those three tweets contains the 'message'.  The first and third tweets give you a hint, although an impossibly vague one, at what to do.  If you want the full details of how this one was figured out, review the CM's hint tweets that begin with a '1', from July 7th.  Matt came up with the solution method for this mini-code, and he and Jim worked together to decrypt it a couple of months before Matt officially joined our team.  Must have been fate.  ;)

The words in the second tweet, which we came to know as the "soap tweet", are all found on the backs of cards across the full 2013 A&G set.  Many of them are found multiple times, as you could imagine (e.g. "was", "than", etc.).  What we eventually found is that we were searching for 17 cards (17 words in the tweet) where each word appeared as the Nth word on the back of the card only once, where N = 1, 2, ..., 17.  For example, if the word "minister" was the 5th word on the back of a card, then no other word in the tweet could be the 5th word on the back of its respective card.  That's difficult to explain, but don't lose focus ... we're looking for 17 cards with those words on the backs in certain, unique places.  Once we have those cards, what we care about is (1) the order we put them in, and (2) the 'moniker' that's on the front.  So, we put them in order according to the placement of the word on the back of each card.  Whichever card contains one of our words as the first word on the back of the card goes first; second word on the back goes second ... and so on, through card 17.  Once we have the order, we take the first letter off the name on the front of the first card, the second letter off the name on the front of the second card ... and so on, through card 17.  In the event that we don't have enough letters on the front of a card, we wrap around and start over ("Three can be twelve when nine is the end").

Ultimately, the "soap tweet" becomes the 17-character message:  RECREATE MY LAST DAY

Later on, the CM posted another such tweet:

Which, using the same decoding technique, became:  PICTURE OF THE MACHINE


MINI-CODE #2 - "PUB TRIVIA"

The next mini-code was a collection of trivia questions, of which the answers were all cards in the 2013 A&G base set (1-300).  An example of one such trivia question:

The answer to this trivia question is obviously Bill Mazeroski, card #287.  This was one such trivia question in a burst of tweets.  Each of these trivia questions needed to be answered, the card number identified, and then the tweets themselves needed to be sorted in order of ascending card number.  The reason for this is that the number of words in the tweet represents a letter, just like the secret decoder ring in the "Be sure to drink your Ovaltine" sense from the movie A Christmas Story.  The Mazeroski tweet above has 19 total words, so it would give us S = 19.

Once all the trivia are solved, sorted, and converted, we get the message:  FIND THE PHOTOS

Later on, the CM posted another set of trivia, which gave us the message:  WITH THREE HASHTAGS


MINI-CODE #3 - "DIGIT STRING"

In late March, the CM posted the following tweets:


We toyed with the whole awkward "letter/words/sentence" in the first tweet for a while, but it took us a couple of weeks before Jim figured out that the digit string is a reader for Colin's letter at bringcolinback.blogspot.com.  (Credit must go to Karen Ford for nudging Jim in this direction back in April.)  Using the digits in the string, you can extract one letter at a time from Colin's letter to form a message, ignoring the greeting "Most Noble Codemaster" ("No time for salutations").  For example the 1st letter of the 10th word of the 16th sentence is an "I".  You have to continue through the string in trial-and-error fashion.

Once the trial-and-error fun is over, we get the message:  IN ORDER THEY TELL MY STORY

Later on, the CM posted another digit string, which gave us the message:  THREE HASHTAGS


MINI-CODE #4 - "CAESAR SHIFT"

In early May, the CM posted the following tweets:


You can quickly figure out that this is a basic word-for-word Caesar shift.  It helps to realize that the first tweet tells you to look at the end of the digit string from the late-March tweet and work backwards through that string.  Even without that information, you can play with the shifting until you get it.

Once you shift the words correctly, you get the following message:  THE WORLD MUST HEAR MY STORY IN ORDER TO BRING ME BACK.  TELL THEM.

Later on, the CM posted another Caesar shift, which gave us the message: THEGINTERCODE CRACKED WELCOMEBACKCOLIN



After the CM published all the clock/machine tweets in early July, he published another series of mini-codes, all which gave the message:  TWEET IT AT ME


So, with all the mini-codes solved in order, we have the following information:

****************************************************
RECREATE MY LAST DAY
FIND THE PHOTOS
IN ORDER THEY TELL MY STORY
THE WORLD MUST HEAR MY STORY ...
WITH THREE HASHTAGS
THREE HASHTAGS
THEGINTERCODE CRACKED WELCOMEBACKCOLIN
TWEET IT AT ME
****************************************************

Just from that list, you can probably point out the inconsistencies.  "RECREATE MY LAST DAY" could very easily lend itself to the creation of the machine as is.  But "FIND THE PHOTOS" ... this was the biggest distraction for many of us that were close.  Even up until a few days ago, I was insistent that the "machine" was going to somehow generate a message pointing us to a URL with actual photos of an actual machine.  I'm sure others had similar ideas.  Maybe this was supposed to be a pointer to find pictures of the flux capacitor?  At any rate, this is the primary reason we felt like the CM deviated from his original plan, as this was one of the earliest clues back in September 2013.  We also never found any use for the tweets containing "MY STORY" in them.  I suppose the machine tells the story of how Colin went back in time, but ... it's still fairly inconsistent.


FINAL SOLUTION


From this point on, I'm going to assume a prior level of knowledge, i.e. you know the crux of the code, that construction of a "machine" was required to bring Colin back.

The machine tweets began and ended with these two tweets:


Our team went a hundred different directions with everything that fell between those two tweets.  I'll save most of our insanity for a different blog post ... but there are a few things worth mentioning before I move forward.
  • We were certain since July 1st that ATY cards would be involved.  This may seem trivial, but many people seemed to overlook the machine tweet about the circles, and that "across the years will be fetched" from whatever the circles are drawn around.  Again, we went many different directions with this other than what was actually involved.
  • We were certain that tweeting a picture at the Codemaster would NOT be the final solution.  Aaaaaaand we were wrong.  We assumed that construction of this "machine" would be a stepping stone along the way to the path.  Credit must go to Wheels, Karen Ford, and SWLVguy for having the guts to tweet the initial pictures.  They set in motion a feedback loop between the CM and all participants, which provided confirmation that indeed a picture of 9 cards was what he was looking for.  Matt was also very persistent that this would be the final solution.

The next four tweets, from "In rows and columns of three" to "11 and 7 are missing", tell us that we need to arrange a 3 x 3 matrix of cards, some face-up ("heads") and some face-down ("tails"), in the following "clock-like" fashion:

H  H  H
T  H  T
H  H  T

10 12 2
9   ~   3
8   6   4

He then mentions a calendar, with a reference to the base set ("short two weeks and a day").

The next tweet, "As with a clock ... counter you'll hop", refers to the fact that we will be moving 'around the clock', and that we will be moving counter-clockwise.  Whatever that means.  :)

The next four tweets, from "Three circles on this clock" to "Each circle connects", describe the circles and lines ("connections") that are drawn on the winning solution above.  (The first of those tweets say that the circles are drawn around things in the "Across the Years" (ATY) subset.  Very important.)  I kid you not, on July 2, the day after these tweets were published, Jim made a joke that the machine would be a flux capacitor.  I have hard evidence to prove this.  The circles and lines, as drawn, prove that he was right.  If you haven't noticed it yet -- the machine is a flux capacitor.  There are circles at 2, 6, and 10, lines drawn to the center and to other places.  And an 88 in the lower-left corner.  All Hail Jim!  :)



I'll pause for a second and highlight the next couple of tweets, because the meaning is clever:


This one doesn't have too much bearing on the final solution, but it does give a clue.  The "latter numbers together" are 3-4-9, or 349.  "XXI would slay XVIII" is a reference to the 21st Amendment repealing Prohibition, the 18th Amendment.  The 21st Amendment became effective on December 15th, the 349th day of the year.  This officially connects our calendar to the numbers 1-350.

To the elements of the machine.

The next two tweets:

These clues are SUPPOSED to give us the card at the 8:00 position.  Other people figured this out; our team did not.  First example of reverse-engineering.  Adam Heeren posted an incorrect solution with the CAP-AZ (Aztecs) card, with 8's drawn on the ears, in the spirit of the flux capacitor.  The CM confirmed that this part was correct.  I believe that "work A-Z" was supposed to lead us to that card.

It was later confirmed that "at the top of the clock the clock" was not a mistake.  Late in the game, the CM posted a tweet containing an error of duplicated words ("with with").  Jim asked the CM if the "the clock the clock" was a similar mistake, and the CM responded directly that it was not.  (For the record, I believe this was the first time the CM has ever directly responded to a Codebreaker during a contest.)  We were able to discern (after further clues) that this meant that the 12:00 card was "Grand Central Terminal", card #267, which features a clock at the top of the card.  Again, after further clues, we figured out that "the great middle, the beginning, the end, the dock" was somehow supposed to point us to the "Earth" card, OLC-ERT.


The first of those tweets was absolutely critical to building the machine.  I believe Jim figured this part out.  Colin left 2013, and ended up in 1887.  He was "flung back, in even intervals ... dip, dip, dip".  This means that our movement around the clock consists of three hops.  We concurred that the three hops were 1971, 1929, and 1887, which are equal 42-year intervals between 2013 and 1887.

Now, to the real clues.







It took us 8 weeks, a ton of pushing, and more reverse-engineering to figure out the intent and 'method' of these clues.  We knew they were metaphors, but we didn't understand for what.  And even though the tweets have the numbers "10", "6", and "2" in them, and we knew there were some 'connections' to be made, it took us a lot longer than it should have to figure out exactly what everything was.  (A lot of that had to do with our delusions that the code would end up being bigger than this, but again -- topic for a future post.)  To spare you all the madness, what many people finally discerned was that the "heads" at 10, 6, and 2 were ATY cards, and the tails at 9, 4, and 3 were base cards.  The ATY cards, somehow, contained metaphors; the base cards were date references of those metaphors (from the 'calendar' tweet).

(In the midst of all the madness, the CM gave a hint:  The letter pairings "BR", "AJ", and "RC".)

Let's start from the bottom.  The last three tweets all point to the "head" card at 2:00, and the "tail" card at 3:00.  "A Study of Hope" is a reference to Sir Arthur Conan Doyle's first Sherlock Holmes story, "A Study in Scarlet", which focuses on a character named Jefferson Hope.  Jim caught this reference well before anyone else.  The tweet after that, "where two friends shared home and hearth", is a reference to 221B Baker Street.  The part preceding that, "Together they'd surround it, one before and one after", points us to the number '21', which is surrounded by the '2' and the 'B'.  This meant we needed to look for some link to the number 21 on an ATY card.  The Roberto Clemente card, ATY-RCL, fits that need, as his jersey number 21 is shown on the front of the card.  Matt found this, and was certain of its location as the 2:00 card.  His initials being "RC" lended itself to the BRAJRC clue.

Since 2 connects to 3 on the clock, we thus need to find a date reference for the "Study of Hope".  The CM gives the clue that "For our last, finding a date may be unclear".  The original publication for "A Study in Scarlet" was in the "Beeton's Christmas Annual" in late 1887, although the exact date is uncertain.  "Consensus picks one, in the month of reindeer."  From this, we choose December 1, which in our calendar is card #335, Andrew McCutchen.  We circle the '21' on Clemente's jersey, and connect it to the card number on the McCutchen base card.

The next connection, 6 to 4, must occur in 1929.  "At 6 did it burst" ... this is the only thing on the clock that I can say for sure I actually got by myself, LOL!  Before I ever saw the Adam Jones card, I knew the connection was the Market Crash of 1929.  It made sense that a 'bubble' would be the thing that burst.  "Go with the end if you're finding a range" -- Black Tuesday, October 29.  The card at 4:00 is card #302, Brandon McCarthy.

Believe it or not -- and again with the crowd-sourcing -- we had not nailed down the BRAJRC connection, or even the actual use of items on the ATY cards as metaphors themselves, until yesterday.  Yesterday!  Adam Heeren and Crazy Paul both posted incorrect solutions which had the ATY-AJ card at 6:00.  This card features Adam Jones blowing a bubble.  It was then that we recognized what the CM meant all along when he said "circle the metaphors".  I know, if you were close to winning this, you're probably getting more and more pissed as you read.  My apologies.  Anyway ... we circle the 'bubble' on the ATY-AJ card, and connect it to the card number on the McCarthy base card.

Finally, 10 to 9.  "Thrice in 6, confusing I know.  Always reliable, it flubbed one, two were the throw".  Beautiful.  This is where Brian made his move.  After I posted my incorrect solution last night, the CM saw that we were only incorrect on the 10-9 connection.  He posted the following tweet, which will always make me laugh.
Someone else tweeted "G-Love and Special Sauce.  G-Love = Glove".  Kids, keep your thoughts to yourselves from now on.  :)

We knew now that ATY-BR, Brooks Robinson, was the card at 10:00, via the BRAJRC thing.  We now knew to circle the glove.  We still had no idea what the date connection (9:00) was.

Did I mention I was home sick today, with no plans to solve this?

I woke up today, appropriately, at 9:00.  Brian messaged me this morning around 9:30.  I told him where I was, that I had a picture with 8 of the cards right, and was just waiting for the card at 9.  And in a flash, Brian says - "July 28, 1971 - Brooks Robinson made 3 errors in the 6th inning - one fielding, two throwing."  And there it was ... "thrice in 6 ... always reliable ... it flubbed one, two were the throw."

July 28, card #209, Ike Davis.  I plugged it in, drew the final lines, tweeted.  And so it was.



****************************************************************


I know there are probably other questions you have, and would like to have answered.  I'm sure others would be willing to help out!  Frank will gladly post the solution to 'MNP'.  ;)

We learned two valuable lessons while working on this code:  (1) Occam's Razor almost always applies, and (2) Always say out loud what you are thinking, even if it sounds ridiculous ... most of the time you will sound ridiculous, but every now and then you will be right.  And those two things are not necessarily mutually exclusive.

At any rate, it was a pleasure to write all of this, even in a medicated state.  Credit is owed to many more people than I can possibly remember.  Let me just close by saying this -- you may not have won, but if you contributed to this in any way, your contributions will not go unnoticed.

It will surely be a while before the cards come in ... I will keep you all posted.

Grant
8/27/2014