swlabr

joined 2 years ago
[–] [email protected] 15 points 1 year ago
              Always has been
🌍           /
       πŸ§‘πŸΏβ€πŸš€πŸ”«πŸ§‘πŸΏβ€πŸš€
        \ 
         Wait, it's all Moore's law?
[–] [email protected] 2 points 1 year ago

Update on B:

still no solve, howeverThrough glancing at someone else's code, I was inspired to just try simulating the A problem beyond 64 steps and seeing the result.

Essentially it reaches a (bi stable?) steady state between two numbers, which makes sense- if you can only make single rook steps, then the reachable squares will alternate every cycle.

Don't know if I'll try solve this again tonight but mentally I have now understood the solution.

[–] [email protected] 2 points 1 year ago

At this point I have officially given up and started looking at other people’s code. I’ll work on it after Imm fully better, it’s too much for me right now.

[–] [email protected] 3 points 1 year ago* (last edited 1 year ago) (5 children)

21 Step Counter

Starting this thread having only solved a.

APretty straightforward. Could probably be done in a few lines with the right syntactic sugar.

BThis is some game of life thing that I've never implemented or seen an implementation of, so I am altogether lost.

My current code (https://github.com/Fluxward/aoc2023/blob/main/21.dart) has a memoisation based approach but my current ailments are preventing me from really thinking about this properly so I am bowing out until I have the wherewithal.

[–] [email protected] 11 points 1 year ago (1 children)

CW SAJESUS, that is bad. MF literally woke up and said to himself, "today I will defend rape," pondered for a moment, and then said "using evopysch"

[–] [email protected] 4 points 1 year ago

Yeah, I mean it’s always possible to do without all the OO stuff, I just didn’t want to mentally keep tabs on what each variable or method did what. That’s what the code is for!

[–] [email protected] 3 points 1 year ago* (last edited 1 year ago) (3 children)

Day 20: Pulse Propagation

It feels weird to kick one of these threads off, but hey, here we go.

Code as always: https://github.com/Fluxward/aoc2023/blob/main/20.dart

a,bA

So following from yesterday where I was punished by not going full OO, I decided, hey, this is a problem in which I can do some OOP, so I did. This took very long to do but I regret nothing. If you look at my code, feel free to click your tongue and shake your head at every opportunity I missed to use a design pattern.

Anyway, after a slight snafu with misunderstanding the FF logic and not spotting that some modules can be dummy modules, it all just worked, and I got my answer.

B

This was a bit of a headscratcher, but the answer was surprisingly simple.

First, the answer. Here's how to do it:

  • Look for the "rx" module in your input.
  • If the module that outputs to rx is a conjunction, keep track of how many button presses it takes for each input of the conjunction to change. The answer is the LCM of all those numbers.
  • If the module is a FF, you can also work backwards to get it, but this was not my input so I didn't need to try this.

Getting here was a bit weird. I hoped that I could just run the code from A and spit out the answer when rx went low, but as of time of writing I've been running it now on a separate machine for about an hour and still no result.

My next instinct was to simply work it out from pen and paper. I thought it might be possible (it probably is) but decided to at least experimentally see if the states of the modules connected to rx were cyclic first. I did, and that was enough for me to get to the answer.

My answer was about 230 trillion BPs, which, extrapolating on how long execution is taking on my other machine, might take just under 137 years to calculate naively. Fun!

[–] [email protected] 3 points 1 year ago

Good note for next year!

[–] [email protected] 3 points 1 year ago

update: have cleaned up the code.

[–] [email protected] 3 points 1 year ago

19 was a real pain in dart.

[–] [email protected] 3 points 1 year ago

Nice!Also, kudos for working with polygon area from the start. I was too invested in reusing my code as discussed elsewhere, but I came around in the end.

[–] [email protected] 3 points 1 year ago (3 children)
  1. After this problem, I will create a new reply in the OP if it is not there already, and will discuss under that thread.

a,bSo, like many other problems from this year, this is one of those direct solution problems where there isn't much of a neat trick to getting the answer. You just have to implement the algorithm they specify and hope you can do it correctly.

a) I used a regex to do some parsing because I haven't looked at dart regex much and wanted to dip my toes a little.

I considered doing this "properly" with OO classes and subclasses for the different rules. I felt that it would be too difficult and just wrote something janky instead. In hindsight, this was probably the wrong choice, especially since grappling with all the nullable types I had in my single rule class became a little too complex for my melting brain (it is HOT in Australia right now; also my conjunctivae are infected from my sinus infection. So my current IQ is like down 40 IQ points from its normal value of probably -12)

b) There may have been a trick here to simplify the programming (not the processing). Again, I felt that directly implementing the specified algorithm was the only real way forward. In brief:

  1. Start with an "open" set containing a part with 4 ranges from [1, 4001) and an "accepted" set that is empty.
  2. Start at the workflow "in"
  3. For each rule in the current workflow:
  • If the rule accepts part of the ranges in the open set, remember those ranges in a closed set and remove them from the open set.
  • Remove anything the rule rejects from the open set.
  • If the rule redirects to a different workflow W, split off the applicable ranges and recurse at 3 with the current workflow as W.
  • Keep in the open set anything the rule doesn't consider.

Because this is AOC, I assumed that the input would be nice and wouldn't have anything problematic like overlapping ranges, and I was right. I had a very stupid off by one error that took me a while to find as well.

The code I have up as of this comment is pretty long and boring, I might try clean it up later.

view more: β€Ή prev next β€Ί