Day 17: Chronospatial Computer
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
I’m confused reading the
buildQuine()
method. It reads to me that when you call it from the top level withtop = true
,A0
will be set to 0, and then when we get to the 0 to 8 loop, the ‘A’ register will be0 * 8 + 0
for the first iteration, and then recurse withtop = false
, but witha0
still ending up 0, causing infinite recursion.Am I missing something?
I got it to work with a check that avoids the recursion if the last state’s A register value is the same as the new state’s value.
Oh, good catch. That’s certainly the case if an initial value of 0 correctly generates the required value of the quine. As I’d already started running some code against the live data that’s what I tested against, and so it’s only when I just tested it against the example data that I saw the problem.
I have changed the for-loop to read
for (var a in (top ? 1 : 0).to(8))
for maximum terseness :-)That still works for the example and my live data, and I don’t think there should be a valid solution that relies on the first triplet being 0. Thanks for your reply!