Ethic, Hedge, and Octavia stand on the edge of a bottomless ravine. It’s the only thing between them and the tower that houses the second of three powerful artifacts. They’ve got a brief window of time to get across before the guards return.
With Hedge’s fuel gauge on empty he won’t be able to fly Ethic across, so the only option is to make a bridge. Fortunately, the floating stacks of stones nearby are bridge components— invented by Octavia herself— called hover-blocks. Activate a pile with a burst of energy, and they’ll self-assemble to span the ravine as Ethic walks across. But there is, of course, a catch. The hover-blocks are only stable when they’re perfectly palindromic. Meaning they have to form a sequence that’s the same when viewed forwards and backwards.
The stacks start in random orders, but will always put themselves into a palindromic configuration if they can. If they get to a point where a palindrome isn’t possible, the bridge will collapse, and whoever’s on it will fall into the ravine.
Let’s look at an example. This stack would make itself stable. First the A blocks hold themselves in place. Then the B’s. And finally the C would nestle right between the B’s. However, suppose there was one more A. First two A blocks form up, then two B’s, but now the remaining C and A have nowhere to go, so the whole thing falls apart.
The Node of Power enables Hedge to energize a single stack of blocks. What instructions can Ethic give Hedge to allow him to efficiently find and power a stable palindromic stack?
Pause now to figure it out for yourself.
Examples of palindromes include ANNA, RACECAR, and MADAM IM ADAM. Counting the number of times a given letter appears in a palindrome will reveal a helpful pattern.
Pause now to figure it out for yourself.
Let’s first look at a naïve solution to this problem. A naïve solution is a simple, brute-force approach that isn’t optimized— but will get the job done. Naïve solutions are helpful ways to analyze problems, and work as stepping stones to better solutions.
In this case, a naïve solution is to approach a pile of blocks, try all the arrangements, and see if one is a palindrome by reading it forward and then backwards.
The problem with this approach is that it would take a tremendous amount of time. If Hedge tried one combination every second, a stack of just 10 different blocks would take him 42 days to exhaust. That’s because the total time is a function of the factorial of the number of blocks there are. 10 blocks have over 3 million combinations.
What this naïve solution shows is that we need a much faster way to tell whether a pile of blocks can form a palindrome. To start, it may be intuitively clear that a pile of all different blocks will never form one. Why? The first and last blocks can’t be the same if there are no repeats. So when can a given sequence become a palindrome?
One way to figure that out is to analyze a few existing palindromes. In ANNA, there are 2 A’s and 2 N’s. RACECAR has 2 R’s, 2 A’s, 2 C’s, and 1 E. And MADAM IM ADAM has 4 M’s, 4 A’s, 2 D’s, and 1 I.
The pattern here is that most of the letters occur an even number of times, and there’s at most 1 that occurs just once. Is that it? What if RACECAR had 3 E’s instead of 1? We could tack the new E’s onto the ends and still get a palindrome, so 3 is ok. But make that 3 E’s and 3 C’s, and there’s nowhere for the last C to go. So the most generalized insight is that at most one letter can appear an odd number of times, but the rest have to be even.
Hedge can count the letters in each stack and organize them into a dictionary, which is a tidy way of storing information. A loop could then go through and count how many times odd numbers appear. If there are less than 2 odd characters, the stack can be made into a palindrome.
This approach is much, much faster than the naïve solution. Instead of factorial time, it takes linear time. That’s where the time increases in proportion to the number of blocks there are.
Now write a loop for Hedge to approach the piles individually, and stop when he finds a good one, and you’ll be ready to go.
Here’s what happens:
Hedge is fast, but there are so many piles it takes a long time. Too long.
Ethic and Hedge are safe. But Octavia is not so lucky.