Solution: Colorful Boxes
Author: Dan Simon
Some key realizations in figuring out what's going on are:
- Yellow depends on red and green, magenta depends on red and blue, and cyan depends on green and blue
- More specifically, they each specifically depend on the sum of the two colors they depend on.
- They each specifically depend whether the sum of the two colors they depend on is in a sequence.
- This sequence is the same between colors but different in each of the four sections (Fibonacci, powers of 2, square numbers, triangular numbers).
- Blue is the number of repetitions of an input pair in the current section so far.
Given this full understanding of how the puzzle works, it's possible to determine A-P from the given "Goal" tables via somewhat intricate logic:
For extraction, we have an "Extraction" section. The "2, 3, 5, 7, ..." tells us that the sequence this section checks for is the prime numbers. We thus have to figure out what the inputs in the extraction table would cause the outputs in the question marks to be. The table we get is below:
Reading this as Braille, we see it spells BLUE, which is the answer.
This puzzle's sin is pride. Its sinful text is "What would an INDIVIDUAL MEMBER of the pride yield?" An individual member of the pride is a lion, so (hinted by the capitalization), we look at the letters L, I, O, N. Their values are 19, 1, 3, 11, which we convert to letters via A = 1, Z = 26 to get SACK, which is our sinful answer.
This puzzle has three basic stages: Figuring out what's going on, logic, and extraction. This solution will present one possible solve path (both in figuring out what's going on and in logic), but there are of course other approaches to get at the key ideas.
Figuring out what's going on
Figuring out what's going on, part 1: General puzzle layout
Opening this puzzle, we see a line of text saying "Give each letter from A-P a unique value from 1-20. (Ignore the values that are left.)", four sections that look somewhat like this (this is the first section; the version on this page is interactive and client-side):
and a final section that looks like this:
Doing some quick triage on what to approach first, we see that the line at the top of each section (except the extraction setting) seems to be interactive, and to cause stuff to appear in the "Output" table, which is initially empty. Then (in each section) there's a "Goal" table which looks non-interactive. The final section has the word "Extraction" so we completely ignore it for now and come back to it when we get to extraction. The "Goals" tables look like they requires us to figure out more about what's going on (presumably via interactivity) to make any sense, so we plan to come back to them later too. The "Give each letter from A-P a unique value from 1-20. (Ignore the values that are left.)" seems like an explicit instruction relating to the "Goal" tables and extraction, both of which we've said we'll come back to later. That means we start with the interactive line at the start of each section.
Figuring out what's going on, part 2: Input colors → output colors
The line at the top of each (non-extraction) section looks like this:
In the first line of each section, the first input has a red box before it, the second has a green box before it, and the button's text has red, green, and blue boxes followed by an arrow, and then yellow, magenta, and cyan boxes. When we hit the button on this line in the actual puzzle, we get a new column in that section's "Output" table, with the two numbers we put in in the red and green rows (the rows starting with red and green boxes) respectively, and either a checkbox (ADD CHECKBOX) or X (ADD X) in each of the yellow, magenta, and cyan rows. From this, it looks like red, green, and blue are inputs, with red and green being numbers, and yellow, magenta, and cyan are outputs, which are each either checkmark or X.
There are now two questions. Firstly, how do these inputs correspond to outputs? Secondly, what is blue? Is it actually an input? It only shows up on the button. For now, we'll just answer part of the first question. Since yellow, magenta, and cyan are each made up of two of red, blue, and green, we guess that each of them depends on those two of red, blue, and green in some way (so yellow depends on red and green, magenta depends on red and blue, and cyan depends on green and blue).
How to test this and what it tells us
Once we have this hypothesis, it's pretty easy to test. Just try putting in the same values for red and green over and over. The yellow output will stay the same, but magenta and cyan will change. This is fairly strong evidence that the hypothesis is correct, and additionally that blue doesn't just depend on red and green.
Figuring out what's going on, part 3.1: Checkboxes and Xs
We now know (or at least strongly suspect) that yellow only depends on red and green. This lets us figure out a lot of stuff. Brute-forcing small values of red and green in the first section of the puzzle (between 1 and 5, so only requiring 25 queries), we get these values for yellow:
|■ = 1||■ = 2||■ = 3||■ = 4|
|■ = 1||✅||✅||❌||✅|
|■ = 2||✅||❌||✅||❌|
|■ = 3||❌||✅||❌||❌|
|■ = 4||✅||❌||❌||✅|
It's possible to see what's going on from just this, but we can also expand to 1 through 10 if we're not sure.
|■ = 1||■ = 2||■ = 3||■ = 4||■ = 5||■ = 6||■ = 7||■ = 8||■ = 9|
|■ = 1||✅||✅||❌||✅||❌||❌||✅||❌||❌|
|■ = 2||✅||❌||✅||❌||❌||✅||❌||❌||❌|
|■ = 3||❌||✅||❌||❌||✅||❌||❌||❌||❌|
|■ = 4||✅||❌||❌||✅||❌||❌||❌||❌||✅|
|■ = 5||❌||❌||✅||❌||❌||❌||❌||✅||❌|
|■ = 6||❌||✅||❌||❌||❌||❌||✅||❌||❌|
|■ = 7||✅||❌||❌||❌||❌||✅||❌||❌||❌|
|■ = 8||❌||❌||❌||❌||✅||❌||❌||❌||❌|
|■ = 9||❌||❌||❌||✅||❌||❌||❌||❌||❌|
From this, or from the above smaller 1-to-5 table, we notice diagonal lines of checkmarks (well, only one clear diagonal line in the 1-to-5 table, but the second one in the 1-10 table should confirm it if needed). Thinking about this leads us to hypothesize that all that matters for yellow is the sum of red and green.
How to test this
Once we have this hypothesis, it's pretty easy to test. Try various values for the sum of red and green. Whenever the sum is the same, yellow is the same.
Figuring out what's going on, part 3.2: Checkboxes and Xs, continued
The natural next step is to look at which values of red and green give a checkmark and which give an X. This will give results as follows (going up to sum 20, and noting that the minimum sum that can be tested is 20):
|■ + ■||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20|
We see that most of the values have X's, which suggests searching the checkmark values. Searching "2 3 5 8 13" reveals that it is part of the Fibonacci sequence. So we hypothesize that, for the first section, yellow gets a checkmark when red + green is a Fibonacci number, and an X otherwise.
How to test this and what it tells us
Once we have this hypothesis, it's pretty easy to test by using sums higher than 20. We can confirm that a sum of 21 or 34 makes yellow a checkmark, while other sums higher than 20 don't. This suggests first trying the same approach in other sections (we here show what happens if we take the same approach of testing sums up to 20).
- In the second section, we get 2, 4, 8, 16 as the values less than 20 where yellow is a checkmark. Searching "2 4 8 16" gives us powers of 2. Testing a sum of 32 confirms this.
- In the third section, we get 4, 9, 16 as the values less than 20 where yellow is a checkmark. Searching "4 9 16" gives us square numbers. Testing a sum of 25 or 36 confirms this.
- In the fourth section, we get 3, 6, 10, 15 as the values less than 20 where yellow is a checkmark. Searching "3 6 10 15" gives us triangular numbers. Testing a sum of 21, 28, or 36 confirms this.
Figuring out what's going on, part 4.1: Finally looking at blue
Knowing that yellow depends on whether red + green is in a sequence (where the sequence depends on section), we hypothesize that in the same way, magenta depends on whether red + blue is in that sequence, and cyan depends on whether blue + green is in that sequence. People seem to tend to guess, for reasons that are not always clear, that blue counts up in some way. One hint to this is the "Error: Put in valid inputs (integers between 1 and 20)." error message, which shows up when an input is greater than 20, including blue. This error message shows up after enough inputs even when red and green are both between 1 and 20, which leads us to believe that after enough inputs, blue goes outside of the 1-20 range. In any case, if we guess that blue counts up in some way, we would guess that blue is always 1 for the first input in a section.
How to test this
It's easy to test that magenta depends on red + blue (and cyan depends on blue and green) and that blue starts at 1 if we do both together, by resetting a section and trying various single inputs (which, being the first inputs, will according to the hypothesis have blue be 1). This will explain all the output data we get from trying it.
Figuring out what's going on, part 4.2: Finally looking at blue, continued
We now know enough to "backsolve" blue to some extent; by trying random stuff and looking at magenta and cyan, we can narrow down blue's value in specific cases. One reasonable thing to do (which we may have already done) is to try the same input over and over. Here's an example of outputs from this, with 1, 2 as the inputs in the first section (with 20 inputs since more aren't possible, and with a # (repetition number) row for convenience):
The positions where magenta is checked (first position, second position, fourth position, etc.) are 1 less than Fibonacci numbers, and the positions where cyan is checked, similarly, are 2 less than Fibonacci numbers. Thinking about this, we realize that it fits the hypothesis that blue is simply the number of inputs tried so far. However, this is easy to disprove; here's 1, 1 and 1, 2 put in the first section:
Note that for 1, 2, cyan should be 2 + 2, which is 4, which is not a Fibonacci number. However, for 1, 2, cyan has a checkmark. We thus reconsider what blue could be. There are several approaches here. One is to notice that when we just try the same input over and over, the "blue is the number of inputs tried so far" hypothesis works. Another is to notice that even after you put an input pair of numbers in 20 times, you can put in other pairs of numbers, but you can never put in the original pair again (until you reset the section). A third is to just come up with reasonable-sounding ideas and collect data to test them. In any case, the correct answer is that blue is the number of repetitions of a given input pair in the current section so far (starting at 1, the first time).
How to test this
At this point, the last missing piece is how to determine blue (for a given way to determine blue, the outputs from given inputs can be computed, unlike in previous steps where both what blue was and how it related to magenta and cyan were unknown), so it's fairly easy to gather clear evidence for or against ways of determining blue. So comparing it and any other similar-sounding idea should be possible by just thinking about what would need to happen for them to differ, and trying that. If you guess that the blue count always starts over when a new input is put in, for example, this is easy to test with 1, 2; 1, 1; 1, 2 in the first section:
For the second 1, 1, cyan should (according to the starting-over hypthesis) be 2 + 1, which is 3, which is a Fibonacci number. However, for the second 1, 1, cyan in fact has an X. Note that, as will be fairly clear when we start looking at the "Goal" tables, the starting-over hypthesis actually works perfectly well for solving. Most slightly-wrong hypotheses of this sort, however, have a few differences from the actual truth that matter for solving, but if you're solving manually and not writing a program you can sometimes get something close enough by just glancing over the resulting contradictions.
Figuring out what's going on, part 5: The "Goal" tables
Now that we know how the interactive part works, we come back to the "Give each letter from A-P a unique value from 1-20. (Ignore the values that are left.)" line and the "Goal" tables. It seems like the "Goal" tables are what we want to get, and we need A-P to have values such that we can get them. Indeed, the main goal of the puzzle is to find values for A through P such that putting those values in, in the order given by each section's "Goal" table. we get the output shown in that table. Thus, having figured out what blue is and how to compute output colors from input colors, as explained above, determining A-P from the goal information is purely a logic puzzle. (It has some redundant information but not a lot.)
Here are some additional notes on the "Goal" tables. They're just construction notes, and are basically irrelevant for solving. Each "Goal" table. only uses some subset of eight letters, composed of two of A-D, E-H, I-L, and M-P. The first section's table uses A-D and E-H, the second's E-H and I-L, the third's I-L and M-P, and the fourth's M-P and A-D. This is somewhat constraining puzzle-design wise. Within each part, the 11 pairs of letters used (with repetition) are presented in alphabetical order (by first letter, then by second letter), and each pair is presented with the first letter earlier in the alphabet than the second letter. This, on the other hand, isn't constraining puzzle-design wise.
Figuring out what's going on, part 6: TL;DR
- Each section has an associated sequence (Fibonacci, powers of 2, squares, triangular numbers).
- Each output color depends on whether the sum of the two input colors that make it up is in that sequence (yellow depends on red + green, magenta depends on red + blue, cyan depends on green + blue).
- Blue is the number of repetitions of a given input pair in the current section so far (starting at 1).
- We need to give each letter from A-P a unique value from 1-20. (The puzzle explicitly says this)
- Putting the A-P values in, in the arrangement and order given by each section's "Goal" table, we get the output shown in that table.
From here, everything until extraction is just logic.
Logic, part 1: "Goal" tables, and notation
For convenience, below is each section's "Goal" table. We now have enough information to know blue's value, so we add a row with it. We'll refer to specific cells in these tables in the format "section X U, V #Y Z," which will refer to the Z-colored output in the Yth column of the columns with red and green being U and V (so, since it's the Yth of those columns, blue is Y) in section X's goal table. For example, section 3 J, O #1 cyan is the value of cyan in the first (and only) occurence of J, O in section 3 (which is the second column of section 3), which is a checkmark. Section 3's sequence is squares, blue is 1 in this column, red and green are J and O respectively, and cyan depends on green + blue, so this cell being a checkmark tells us that green + blue, which is O + 1, is a square. (So O, being an integer between 1 and 20, is 3, 8, or 15.)
Logic, part 2: Easy deductions
Current knowledge of A-P's values (? indicates unknown, so everything has ? right now because we haven't deduced anything):
- From section 3 J, O #1 cyan, O + 1 is square. From section 4 D, O #3 cyan, O + 3 is triangular. By trying all squares minus 1 between 1 and 20 (3, 8, 15) and adding 3, we see O = 3 is the only option that works.
- From section 2 I, L #1 magenta, I + 1 is a power of 2. From section 2 I, L #3 magenta, I + 3 is a power of 2. So I = 1 (as we see by trying all options).
- From section 3 N, P #2 cyan, P + 2 is square. From section 4 M, P #3 cyan, P + 3 is triangular. So P = 7.
- From section 3 N, P #5 magenta, N + 5 is square. From section 4 N, P #1-2 magenta, N + 1 and N + 2 are both not triangular. So N = 11.
- From section 2 H, J #1 cyan, J + 1 is a power of 2. From section 3 J, K (or J, O) #1 magenta, J + 1 is square. So J is 3 or 15. O is already 3 and the puzzle says we have no duplicate values, so J = 15.
- From section 1 A, C #1-3 magenta, A + 1, A + 2, and A + 3 are all not Fibonacci numbers. From section 1 A, C #4 magenta, A + 4 is a Fibonacci number. From section 4 A, D #1 magenta, A + 1 is not a triangular number. So A = 17.
- From section #1 D, E #1 cyan, E + 1 is a Fibonacci number. From section 2 E, L #2 magenta, E + 2 is a power of 2. So E is 1 or 2. I = 1, so E = 2.
- From section #3 J, K #1 yellow (we're using yellow now, exciting), J + K = 15 + K is square. So K is 1 or 10. I = 1, so K = 10.
We now know 8 of 16 values. It's going to get somewhat harder from here on, though.
Current knowledge of A-P's values:
Logic, part 3: Harder deductions
- From section 4 M, P #1-3 magenta, M + 1, M + 2, and M + 3 are all not triangular. So M is 10, 11, 16, or 17. But K = 10, N = 11, and A = 17. So M = 16.
- From section 1 D, E #1 yellow, D + E = D + 2 is not a Fibonacci number. From section 1 D, E #1 magenta, D + 1 is also not a Fibonacci number. From section 4 D, O #2 magenta, D + 2 is triangular. So D is 8 or 13.
- From section 1 D, G #1 yellow, D + G is a Fibonacci number. If D = 8, this means G is 5 or 13. If D = 13, this means G = 8. So G is 5, 8, or 13. But from section 2 G, H #3 magenta, G + 3 is not a power of 2, so G is not 5 or 13. So G = 8. This stops D from being 8 (both because two different letters can't have the same value and because then D + G = 8 + 8 = 16 is not a Fibonacci number). So D = 13.
We now know 11 of 16 values.
Current knowledge of A-P's values:
- From section 1 A, C #1-4 cyan, we know C + 1, C + 2, C + 3, and C + 4 are all not Fibonacci numbers. This means either C = 8, or C is between 13 and 16 (inclusive). But G = 8, D = 13, J = 15, and M = 16. So C = 14.
- From section 1 C, F #1-3 cyan, we know F + 1, F + 2, and F + 3 are all not Fibonacci numbers. So either F is between 8 and 9 (inclusive), or F is between 13 and 17 (inclusive). But this is just the options for C (which, since C = 14, are now all used), with the additional options of 9 and 17, which F must thus be one of. But A = 17, so F = 9.
- From section 1 F, H #1-2 cyan, H + 1 and H + 2 are both not Fibonacci numbers. So either H is 5, H is between 8 and 10 (inclusive), or H is between 13 and 18 (inclusive). But this is just the options for F (which, since F = 9, are now all used), with the additional options of 5, 10, and 18, which H must thus be one of. But K = 10, so H is 5 or 18. (The fact that roughly the same argument happens here for C, F, and H, using A, C; C, F; C, H, looking at cyan in each, is as far as I know basically a coincidence.)
- From section 2 G, H #3 cyan, H + 3 is not a power of 2. So H is not 5 and H = 18.
We now know 14 of 16 values.
Current knowledge of A-P's values:
- From section 2 I, L #1-4 cyan, L + 1, L + 2, L + 3, and L + 4 are all not powers of 2. So either L is between 8 and 11 (inclusive) or L is between 16 and 20 (inclusive). But G = 8, F = 9, K = 10, N = 11, M = 16, A = 17, and H = 18. So L is 19 or 20. But from section 3 L + M #1 yellow, L + M = L + 16 is not square. So L is not 20 and L = 19.
- Finally, from section 4 B, D #2 magenta, B + 2 is triangular. So B is 1, 4, 8, 13, or 19. But I = 1, G = 8, D = 13, and L = 19. So B = 4.
We now know all values. The table of values is below:
We can check that this fits all the "Goal" tables, either by calculations or, more easily, by trying to enter these numbers and checking that the results the puzzle gives us match the "Goal" tables.
Now we might look at the four missing values even though we were told not to ("Ignore the values that are left."), because it seems easy. They're 5, 6, 12, and 20, which when converted to letters and reordered spells LEFT. This is an easter egg and doesn't actually help us, so we continue with other ideas that seem more productive, like using the section of the puzzle at the bottom called "Extraction" that we haven't used yet.
Instead of an interactive line at the start of the section, we see "2, 3, 5, 7, ...", which tells us that the sequence this section checks for is a sequence beginning 2, 3, 5, 7, which is the prime numbers. That is, blue works as before, but yellow, magenta, and cyan depend on whether red + green, red + blue, and green + blue, respectively, are prime. There's no interactivity letting us test this, but at this point in the solve it seems very likely. We thus have to figure out what the inputs in the extraction table, which the above logic has told us the values of, would cause the outputs in the question marks to be.
We also note that, reading top-to-bottom and left-to-right, the letters to input in the "Extraction" table contain each letter once, starting with BLIND and then using the other letters in alphabetical order (the presence of ACE as the remainder of the top row is an irrelevant and slightly unfortunate coincidence; it's just the start of the alphabetically ordered remaining letters). This hints that we extract the output using Braille, with checkmarks being dots and X's being empty (since we have a 3x8 table, this will give us four letters.) Due to the letters being unique, there are no repeated input pairs and blue is always 1. The table we get is below:
Reading this as Braille, we see it spells BLUE, a major thing we were wondering about at the start of the puzzle, and also the puzzle's answer.
This puzzle's sin is pride. Its sinful text is "What would an INDIVIDUAL MEMBER of the pride translate to?" An individual member of the pride is a lion, so (hinted by the capitalization), we look at the letters L, I, O, N. Their values are 19, 1, 3, 11, which we convert to letters via A = 1, Z = 26 to get SACK, which is our sinful answer.
I really like puzzles of the form "figure out how this interactive thing behaves" because they generally support a variety of solvepaths, and they reward finding hidden rules while still allowing teams to collect arbitrary amounts of data to test their ideas. Originally some numbers were given (one per pair), each section was independent, and this puzzle was thus possible to brute-force; I'm very glad that I found a way to change it so that less was given and that the logic was more intricate. (There were several intermediate attempts at removing brute-forcing that weren't very fun.)
This puzzle could of course be solved by looking at the extraction table and guessing thematic four-letter words, but from answer submissions not having many other inexplicable four-letter answers, it looks like teams mostly didn't do that (though about 10 teams guessed GREEN). It's also possible to solve from about half the data, which some teams seem to have done but which I'm fine with.