Signal Fragment Solution
How It Works
The display being projected looks something like:
At the top of the screen, the six 7-hex flowers update once per second. The adjacent 19-hex flower in the upper right flashes and updates once every other second. The two columns of text + hex flowers below the header scroll upwards every couple of seconds. New entries appear in the bottom of the right column, scroll upwards, then move to the bottom of the left column and repeat.
Step 1
Start with the display in the upper left of the screen. With the per-second updates, as well as the repeating pattern of each flower, some observation will show that this portion of the display represents time. It's intent is to teach a system for encoding the numbers 0-13.
The rightmost 7-hex flower changes once per second - the outer blue hex shifts clockwise through each of the six possible positions, then the center hex fills in blue and the outer blue hex rotates through the six positions again. After it transitions through these fourteen states, the flower clears and the state of the next flower to the left changes. The entire process then repeats.
By observing this behavior, teams can deduce that these 7-hex flowers are displaying numbers. An empty flower is 0; a flower with just the top hex filled is 1; top-right filled is 2; top-left filled is 6. Filling in the center adds 7, center alone is 7, so center + top is 8; center + top-right is 9; center + top-left is 13. Thus the 6 numbers in the screenshot are: 0, 12, 1, 2, 1, and 11.
It's not important to the overall solution, but the clock itself is in base-14 (since each 7-hex flower can represent the values 0-13). Two flowers are used for each hours, minutes, seconds. So the time is 0*14+12:1*14+2:1*14+11, or 12:16:25.
Step 2
After figuring out the number scheme, move on to the next section – the 19-hex flower in the upper right.
This behaves similarly to the 7-hex digits of the clock. It flashes between each state transition, and at each state, it's either blank, one hex on the outer ring is filled, or the center hex may also be filled. The 6 hexes on the inner ring are never filled. The outer ring contains 12 hexes. With the center hex again acting like a modifier (adding 13 this time), this widget can show 26 different values, which is a great way to represent a zero-based alphabet (0=A, 1=B, ..., 25=Z).
Mapping from hexes to numbers to letters works the same as in the clock. Empty is 0, or A; straight up north (N) is 1 or B; NNE is 2 or C; NE is D; E is E; NNW is 12 or M; Center alone is 13, or N; Center + N is 14 or O; Center + NNE is P; etc. The character being shown here is Center + SSE, 19, or T.
The flash between states is necessary to mark duplicated letters. There's one state where the flower is entirely missing; it indicates the point where the message repeats. The entire message is: SENDSOMETWEETSTODARTHKANG (Send some Tweets to DarthKang).
For the version of the puzzle currently online, the message reads ENTERKONAMICODETOBEGIN (Enter Konami Code to begin). Entering the well-known Konami Code via keyboard brings up some UI at the bottom of the screen to simulate the rest of the puzzle.
Step 3
The rest of the display is a scrolling list of team names, time stamps, and some more friggin' hexagons. When a team decodes the message from step 2, and successfully sends a Twitter @mention to DarthKang, the response will show up in this list, marked with their team name. The screenshot shows the four possible responses: Red X, Red <, Red >, or two digits.
In the online version of the puzzle, messages are entered directly, bypassing Twitter. The rest of the puzzle works the same.
Some trial and error should get the teams to realize they're playing 6-letter Mastermind. The red X appears when their tweet contains anything other than A-Z characters (no numbers, spaces, punctuation allowed). The > appears when their tweet is less than 6 letters, prodding them to tweet something longer. The < appears when they tweet more than 6 letters. The pair of digits works the same as Mastermind - the first is the number of correct letters in the correct places; the second is the number of correct letters in incorrect places.
There are also four fake teams generating occasional random data, to keep the display from being empty when just one or two teams are there. The names should be familiar to anyone paying attention to the plot: Agent 22, Dr. Williamson, Dr. Rebus, and Gene Preacher.
Once the team logics out and tweets the correct word, it's echoed back to them in the final encoding scheme.
Step 4
After solving Mastermind and seeing the hex-encoded (hexagon, not hexadecimal, smart-ass) representation of the word, the system kicks into echo mode for that team. Any further tweets will be echoed back, so they can see what each of the characters look like. In this state, they can tweet up to 12 letters. Non-letters will be converted to spaces. Teams can use this mode to figure out the symbol they were initially given.
In this encoding scheme each 19-hex flower represents up to 6 characters. Each cluster of three hexes forms a letter. In each cluster, a hex has three states: empty, red border, red border + blue fill. This is a ternary scheme, but the mapping from ternary values to letters is arbitrary (and different for each team).
The left flower here shows a single P. The right flower represents AP. What's important to note is that P looks the same in both; it's just rotated in the second word, as it's the second character instead of the first.
Solution
Each team had an individual Mastermind goal, and an individual final solution. Also, each team's final answer was encrypted using a different key (i.e., Team 1's representation of the letter 'A' was different than Team 2's). This was done to prevent collaboration (inadvertent or otherwise), due to Twitter messages being public.
Design Notes
When the alien theme was chosen early, my first thought was to do a Close Encounters-themed puzzle, where players need to interact with a UFO or similar installation through a display of flashing lights and sound. In the movie, the lights and musical notes are the key to talking with the aliens, and I wanted to replicate that feel. I never came up with a better idea than something like "Simon Says", where players repeat what the aliens are saying, or some variation based on rules they discover. That approach didn't sound particularly interesting, and I didn't see a way to scale it up to many teams at once, so that approach never really got started.
I then remembered a puzzle I encountered in the No More Secrets Game back in 2007. My team came to an office park in the dead of night and we found a computer monitor (17 inch CRT, baby!) behind a window running a screensaver. I totally stole borrowed the main idea of that puzzle for Signal Fragment. The initial phase can be found here. Then, as now, the first step is discovering how numbers are represented through an encoded clock display, extrapolating to uncover a message, then interacting with the display for the remainder of the puzzle.
Construction Notes
There are three components to this puzzle:
- A console sniffer app to listen to the Twitter feed and forward any @mentions to the system. This app would also generate fake tweets if teams weren't Tweeting fast enough, to prevent the scrolling area of the screen from emptying completely.
- An HTML5 page to drive the display. The stream of filtered data gets updated every few seconds, and new tweets get added to the scrolling region.
- A web app that coordinates the other two components. Tweets from players are parsed, assigned to teams, scored according to Mastermind rules, and generate a response to be shown by the page.
GC Notes
Pretty much anything that could go wrong tech-wise did go wrong:
- The random data being generated almost immediately stumbled on the correct Mastermind answer, which caused the display to fill up with data in the final encoding scheme. Had to reset the fake teams and remove their particular Mastermind goals from the dictionary of possible guesses.
- A script error when running under IE10 emerged a month back in the RC run of the event, but forgotten and never fixed. So I had the fun of re-diagnosing and fixing it live during the real event.
- In the RC, I discovered that Twitter will shut down long-running feeds to sniffer apps after a certain unspecified time period. In the RC, I discovered this by starting the sniffer on my work machine when I left for home on Friday, then panicking when it was no longer responding to Tweets on Saturday. To combat this, I added code to respond to Twitter-generated heartbeats, and to restart the sniffer when said heartbeat stopped. This worked great when I ran the sniffer on its own for three days straight. However, Twitter only runs the heartbeat when there is no other traffic on the feed. So when teams started showing up and sending real data, the sniffer would freak out and reset itself prematurely. So the code I added to improve stability actually had the opposite effect.
- The wired Internet connection was extremely fragile, from a physical sense. Some combination of the cable, the plug, and the laptop network socket was unreliable, so any slight movement of the laptop had a decent chance of killing the network connection.
- The projector was perfectly happy running at the resolution I wanted for the first five hours or so. At that point, it started flashing to a solid blue screen, and eventually blacked out completely. I dropped the resolution a tick or two for the remainder of the session, and managed to struggle through. It did start flashing blue again at one point towards the end, which was disturbing, since it was already at the minimum resolution necessary to display the puzzle.