summaryrefslogtreecommitdiff
path: root/19.c
AgeCommit message (Collapse)Author
2023-01-30Puzzle 19: Make geode product an unsigned long.Adam Spragg
Because it can never be negative, and some of the blueprint combinations can cause it to wrap. This gives us one more factor of two breathing room.
2023-01-30Puzzle 19: Add option for debug outputAdam Spragg
2023-01-19Puzzle 19: Don't build a robot if we could have built it earlierAdam Spragg
Either we don't need it, or we did but it's too late. Speeds up part 2 from 570s (9m30s) to 5.2s
2022-12-31Puzzle 19: Solve part 2Adam Spragg
2022-12-31Puzzle 19: Don't build a type of robot if we have lots of that resourceAdam Spragg
We obviously have enough of that resource at this time, so there's no need for another robot yet. Drops time by 60% on full 24-round test data (4.6s -> 1.8s)
2022-12-31Puzzle 19: Don't do nothing if we could build all robots.Adam Spragg
The only reason to do nothing would be to save resources to build a robot we can't affort to build yet. But if we have enough resources to build all of them, there's no point in not building any Drops time by 35% on full 24-round test data (7.2s -> 4.6s)
2022-12-31Puzzle 19: Switch default build strategy to "exhaustive"Adam Spragg
2022-12-31Puzzle 19: Solve part 1 (yay!)Adam Spragg
Just generate the output needed by the puzzle.
2022-12-31Puzzle 19: Don't build ore/clay robots when short on timeAdam Spragg
Don't try building ore robots if there are fewer than 10 rounds remaining, or clays robots if there are fewer than 5. It's probably too late for those robots to make a difference? Maybe? (Why 5 and 10 rounds? Just a guess. And it seems to still get the right result) Drops time by 90% on 22-round test data (4.8s -> 0.4s)
2022-12-31Puzzle 19: Never build more robots than neededAdam Spragg
Because we can only build one robot at a time, if the most expensive robot in terms of ore takes 4 ore to build, we'll never need more than 4 ore robots. Because they can always collect enough ore to build one robot of any type per turn. Drops time by 90% on 20-round test data (5.4s -> 0.5s)
2022-12-31Puzzle 19: Use int instead of long for material amounts/robotsAdam Spragg
Drops time by about 20% on 20-round test data (6.6s -> 5.4s)
2022-12-31Puzzle 19: Only build at most one robot per round!Adam Spragg
After reading the rules more carefully, I see we can only build one robot per round! (Not just one robot per material type, one robot!) Doh! This reduces the combinatorial explosion a lot. The exhaustive search has become a lot more feasible, with Blueprint 2 of the test input able to cover 22 rounds in a minute and a half. I shouldn't only need to find some small wins from here to get the 24-round runtime to something sensible.
2022-12-30Puzzle 19: Add an "exhaustive" build strategy.Adam Spragg
As expected, the explosion in permutations makes this prohibitive. With this stragegy, on Blueprint 2 of the test input, for: 10 rounds it takes 0.018s/59,979 iterations 11 rounds it takes 0.070s/1,257,483 iterations 12 rounds it takes 1.292s/59,156,010 iterations 13 rounds it takes 3m2.770s/8,395,942,157 iterations Getting to 24 rounds just isn't feasible with that growth. And I can't figure out how to cull unwanted permutations easily. Going to have to try something else.
2022-12-30Puzzle 19: Allow user to specify build strategyAdam Spragg
2022-12-30Puzzle 19: Allow user to specify number of roundsAdam Spragg
2022-12-30Puzzle 19: Fix debug info for geodesAdam Spragg
2022-12-29Puzzle 19: Move the timing loop into the build functionAdam Spragg
2022-12-29Puzzle 19: Move blueprint id into the blueprintAdam Spragg
2022-12-20First attempt at puzzle 19 part 1 (buggy)Adam Spragg
It produces *a* result for each blueprint, but not the best result. I feel like that's a hard problem. The number of decisions about what to build when over 24 iterations explodes so much that you can't brute-force the optimal geode count. Either there's a way of pruning possibilities that I've not thought of, or there's a pretty good heuristic you can get from the blueprint about the proportions of how many of each type of material you want to be producing, that you can pick what to build and get a geode count that doesn't deviate from optimal in only 24 iterations. One other possibility is transforming this puzzle into a SAT format and letting a SAT solver attack it, with its ability to prune decision trees effectively. But I don't have any actual experience with those, and I'm not sure I have time to figure that out for AoC. https://en.wikipedia.org/wiki/SAT_solver