advent-of-code/2024/05/findings.md
2024-12-08 21:36:04 +01:00

1.4 KiB

Day 5

Part 1

What a joy! First day where a bit of Computer Science might actually help. So to me this looks like a DAG, since if there has to be an order, cycles cannot be allowed. Otherwise the problem could not be solved.

For not I just hope that it's one cohesive DAG, and not 2 or more. Technically there is a possibility that more than one, disjoined DAGs are defined by the rules. If this occurs, we'll see.

DAG Image

We can see that there in this case there is one "start" and one "end". In this case 97 is the start and 13 the end. Again, there might be more than one "start" or "end".

My idea is to precompile an order so that 97=0 and 13=7 so that we then just map the numbers to their ascending number and check if the array is already sorted. Why? My assumption is that you do the work upfront and then it's efficient to check for each input.

The start and ends are easy, what about the middle nodes? We can do a so called transitive reduction, simplifying the graph. Basically, if we know that 97 needs to be before 61 and 13 and at the same time 61 needs to be before 13, we can delete the 97 before 13 link, as it's already specified going over 61. Basically we eliminate all the "shortcuts". This gives us a nice line in this case.

reduced DAG

no code has been written until now, this might go terribly wrong 💩