This was CS50x Puzzle Day 2019
Doug Lloyd, David J. Malan
Each fall, CS50 at Harvard (and Yale!) kicks off with an afternoon event called CS50 Puzzle Day. The goal is to send a message that computer science isn’t about programming but about problem-solving. To that end, the challenges we present to students at that event do not require any programming experience, or even a computer, just logic, creativity, and sometimes some out-of-the-box thinking.
Starting in 2016, we decided to recreate this event for CS50x students and their friends around the world, though instead of confining the event to a single afternoon (which time zones make rather challenging!), we instead spread it over an entire weekend that starts when the first time zone on Earth enters Friday and whens when the last time zone on Earth exits Monday, a window of about five calendar days.
We repeated the event in 2017 and again in 2018, and this past weekend we oversaw CS50x Puzzle Day 2019, our fourth-annual puzzle solving extravaganza. (In retrospect, we probably should have called the multi-day event CS50x Puzzle Days!) At 00:00:00 on Friday, 29 March 2019, students around the world were invited to download a packet of puzzles, written by Brian Yu, Erin Carvalho, and me, Doug Lloyd:
Students were encouraged to form teams of size 2 to 4 (or more, though we officially recommend keeping the teams capped at 4), collaborating in person or online, though students could also participate solo. In addition to a pen or pencil (and scratch paper!), students were welcome to use a computer (and the internet), though, as always, none of the puzzles required prior programming experience.
A whopping 8,994 students pre-registered (via a Google Form) for the event. (So close to 9,000!) 88% (7,905) of these registrants had never participated before. 9% (830) had participated in one of the past three CS50x Puzzle Days, 2% (196) had participated in two, and 1% (63) had participated in them all! 1,031 students sought teammates via the event’s “teammate finder” (a separate Google Form), and 71 students offered to host the event for classmates nearby.
Among the registrants were
- 1,771 registrants from the United States,
- 1,527 registrants from Ukraine,
- 1,488 registrants from India,
- 478 registrants from Algeria,
- 243 registrants from the United Kingdom,
- 228 registrants from Canada,
- 174 registrants from Pakistan,
- 171 registrants from Egypt,
- 146 registrants from Nigeria, and
- 117 registrants from Russia,
along with students from 137 other countries. It’s truly amazing and humbling to think of all the places were people were simultaneously tackling the same challenges!
The goal for each team? Solve as many of the puzzles as possible by 23:59:59 on Monday 1 April 2019.
And many teams threw their hats into the ring! In fact, 1,042 teams solved at least one puzzle correctly while 21 teams solved ten! And 290 teams, at least at first glance, appeared to have solved all eleven!
Suffice it to say that red bar stands out, particularly since the downward blue slope would appear to suggest (as you would think!) that solving n+1 puzzles is harder than solving n puzzles. That so many more students would solve all eleven puzzles was, at best, curious and, at worst, suspicious, particularly vis-à-vis past years’ results, none of which had manifested this same pattern. And so we took a closer look at this year’s data.
Some unusual patterns emerged with respect to submission of solutions as the event started winding down. For example, for Puzzle #4 Scheduling Conflicts we received only two correct answers prior to 1 April 00:00:00 UTC, about 84 hours into the event. Around that time we received a third correct answer, and then over the course of just the next 12 hours, about 200 teams (including a few dozen in just the first hour afterwards) either edited their forms to change the answer to that puzzle to the correct one or submitted for the first (and only) time a perfect slate of eleven correct answers. Most teams had, until then, been submitting multiple times. So the behavior was anomalous and, we suspect, dishonest. In fact, our suspicions were confirmed when we received word that at least one participant had shared all eleven answers in a private group online, encouraging others to submit those answers as their own. While CS50x Puzzle Day does not prescribe limits on team size (since teachers and students around the world host the event in various formats, which we welcome!), a mass message does not a team make. And while CS50x Puzzle Day has not included, to date, an explicit policy on honesty, suffice it to say it is not reasonable to submit the work of another. It is certainly not in the spirit of the event. And so we have provisionally disqualified 88 (out of those 290) teams’ submissions that stand out as anomalous. Participants who feel their submission has been disqualified in error should please let us know via this form so that we can review. In future years will we prescribe limits (for an event that’s just meant to be fun!) that we had hoped would go without saying.
With all that said, for every anomalous submission, there were many more honest solutions! So those who indeed solved 1, 2, 3, 4, 5, 6, 7, 8, 9, or 10 puzzles—or perhaps even 11!—should be proud!
Here’s how all teams scored. Each team that provided correct answers to at least 6 of the 11 puzzles will receive a CS50x Puzzle Day 2019 Certificate. (Stay tuned for an email from the CS50 Bot later this week!)
Ultimately, 1,322 teams competed in CS50x Puzzle Day 2019 (and even more might have participated without submitting answers via our Google Form). The below data excludes the submissions of those teams whose results we’ve provisionally disqualified.
As for the puzzles themselves, the most challenging was perhaps #4 Scheduling Conflicts, with only 221 teams submitting a correct answer (and 243 others submitting attempts), and the easiest was perhaps #5 Hybridice, with 819 teams submitting a correct answer (and 127 others submitting attempts):
A special thanks to my co-authors for helping to put this packet together. Whom to credit (or curse!) for each puzzle?
- Brian Yu, for #2 It’s About the Journey, not the Destination, and #9 Finest Flicks.
- Erin Carvalho, for co-authoring #8 Mathmoji (and also being an enthusiastic puzzle playtester!).
- And I, Doug Lloyd, wrote the rest: #1 Don’t be Greedy, #3 Two Strikes, #4 Scheduling Conflicts, #5 Hybridice, #6 A Few Degrees Above Zero, #7 Segments, #10 Just a Little Bit, and #11 Star-Spangled.
- Also our special thanks to Emily Hong, who helped create the image that was at the core of #6 A Few Degrees Above Zero.
Check out the end of this post for my thoughts on some of these puzzles, now that we have the benefit of hindsight!
Last year, the memes were pretty strong with respect to #7 Medal Table. This year #3 Two Strikes and #4 Scheduling Conflicts were perceived as among the hardest, and thus earned the meme trophy. It would have been an incredible troll had we intentionally made those two the ones that folks would make memes about (after all, 3 + 4 = 7), but it really was a coincidence, we swear :).
As part of the submission form, we also asked folks to supply us with their thoughts on this year’s event. Happy to say it seems most people felt positively about it overall, even if the puzzles were perhaps a bit on the hard side (but where’s the challenge in a packet of easy puzzles?!).
Teams were also invited to leave comments about the event, some of which we’ve excerpted below:
- “I met amazing people and I had so much fun. Thank you :)”
- “my mind was blown away with these puzzles and i’m looking forward to it next year”
- “Enjoyed it very much and fried my brain”
- “This has been a lovely experience. Not only has it challenged me and everyone on my team, but it made me reach out to other people from different countries and get out of my comfort zone. I will definitely be doing this next year.”
- “This is exceptionally good competition. I’m very greatful to organizers. I hope that people all around the world who were solving this puzzles are as happy as me.”
- “The real answer was the friends we made along the way”
Others were a bit more to the point:
- “[****] that was hard”
And, now, the solutions we know many of you have been waiting for. Final warning: Spoilers ahead!
tl;dr, the correct answers were:
- #1 Don’t be Greedy (FINANCIER)
- #2 It’s About the Journey, not the Destination (VILNIUS)
- #3 Two Strikes (BEHIND)
- #4 Scheduling Conflicts (SPORADIC)
- #5 Hybridice (CONTRAST)
- #6 A Few Degrees Above Zero (RAINCOAT)
- #7 Segments (THIRTY)
- #8 Mathmoji (DECADE)
- #9 Finest Flicks (MARSHALL or ROB MARSHALL)
- #10 Just a Little Bit (MONOCHROME)
- #11 Star-Spangled (COLUMNS)
Postmortems, by Doug Lloyd
#1 Don’t be Greedy was intentionally titled that as a wink to students who’ve started CS50x, though it doesn’t require the greedy algorithm (from Problem Set 1) to solve it. Really, the title is only relevant for giving a clue for the anagram.
#2 It’s About the Journey, not the Destination was probably renamed about six times as we put the packet together, as I desperately wanted to avoid including any extra text as I thought Brian did such a great job writing a clean puzzle so we tried to give the clue in the title itself. And fun fact: Did you know that Croatia’s Adriatic Sea coast has a gap in it? I unfortunately had to have Brian scramble to rewrite that one to avoid that corner case in the original draft once we realized the original version arguably failed to follow the “only one country in between” rule.
#3 Two Strikes is the only puzzle in retrospect I wish hadn’t been part of the packet; it’s never a good idea to have a puzzle where the answer is just part of the puzzle itself, as it makes it too easy to brute force guess, which based on the comments it sounds like several teams ultimately did. There was also some weird wordplay that may have been missed by those for whom English is a second language. Theoretically, I like the idea of this one a lot, but I think I could have put a few more twists on it to make it better. And giving a clue for each row’s “common bond” would have been the right move.
Notwithstanding that it seems to have drawn the ire of more than a handful of folks, I’m really quite pleased with #4 Scheduling Conflicts (indeed, I think it’s probably my second-favorite puzzle in the packet), with one exception. It was intentionally a puzzle that had some misdirection in it (hence the final answer!), but I just wish I hadn’t made the first entry in the list of destinations be one of those misdirections; that might have been a bit much. I wrote this one right after CS50x Puzzle Day 2018 wrapped up.
#5 Hybridice, as you’ll see in the solution video, drew the (mock) ire of Erin, for using black where brown was really more appropriate. That was an intentional choice, as brown and orange I worried would be too tricky to distinguish, but she is technically correct (which as we all know, is the best kind of correct). It was designed to be the easiest puzzle of the packet, but because I try to avoid there being a perception of linear progression of difficulty, I deliberately put it in the middle of the packet. I think, though, that in future CS50x Puzzle Days, we’ll intentionally put what we perceive as the easiest puzzle as #1, even if the rest of them are in no prescribed order.
#6 A Few Degrees Above Zero features a hat-tip to a technique we used in #6 Rolling the Dice from 2018. Thanks to Facebook’s Matthew Warshauer, again, for that one. And thanks to Elphie for being a great subject! Fortunately at the last moment Erin realized that her phone number was actually written on Elphie’s dogtag, and we were able to Photoshop that out — didn’t want folks to think they had to call her up for the final clue :) We really liked the idea of a puzzle that had some physicality to it, as this one likely was solved by many folks by cutting out the pieces and rotating them.
My main regret with #7 Segments was using ROYGBIV for the segment colors, instead of finding another way to order them. I’m particularly pleased with that puzzle (which was a fairly late addition to the packet; I think it was the second-to-last puzzle that I wrote), the idea for which came to me while I was staring at my alarm clock a minute or two before it was to go off, not wanting to get out of bed! Of course, the puzzle number in this case was also a clue about seven-segment displays.
As you’ll see if you watch its video, #8 Mathmoji was written just after CS50x Puzzle Day 2018, and Erin and I wrote up a solution walkthrough for it right then and there. Then we lost it… oops! Fortunately, we were able to put our heads together to crack the code (it certainly helped that we still happened to know the right answer, we just forgot how to get there!). Turns out it’s really hard to try and explain the solution to that puzzle verbally!
#9 Finest Flicks went through a few small changes from how Brian originally wrote it. A couple of clues were rewritten, and the Wikipedia reference was added late to make it clear which release dates we wanted folks to use, lest some other available dates potentially provide bad info. This may have dropped the difficulty a bit more than we anticipated, but it was probably worth doing nevertheless.
#10 Just a Little Bit is the manifestation of a puzzle idea I’ve been trying to find a way to implement since before CS50x Puzzle Day 2017; a precursor version of this has appeared in the past as part of our CS50 AP puzzle packet that we distribute to teachers. While some folks complained it ended up being a bit (ha!) mechanical or tedious, I think the payoff was worth it. Based on some of the comments we received by email, on Facebook, and in the form itself, many of you seem to have agreed; we received more comments about this puzzle than any other.
#11 Star-Spangled was the final puzzle I wrote for this year’s packet, and also intentionally contained a huge amount of misdirection, mostly pertaining to the way the traveler navigated (“east,” “north,” etc.) The ISO 8601 clue was purely there to avoid an unclued anagram, but I think some folks latched onto it and read more meaning into it. The clue about the Dakotas may also have been a bit too obscure. But hey, that’s okay. Puzzles are all about trying to get into someone else’s head.
But odds are, after four years, many of you have indeed gotten into my head, so for next year we’ve decided to open this event to crowd-sourced puzzle submissions alongside our own. If you have an idea for a puzzle (whether fully fleshed-out or not) let us know by submitting this form!
This was CS50x Puzzle Day 2019 around the world. See you again next time!