this post was submitted on 07 Dec 2024
22 points (89.3% liked)

Advent Of Code

920 readers
58 users here now

An unofficial home for the advent of code community on programming.dev!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

AoC 2024

Solution Threads

M T W T F S S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 18 20 21 22
23 24 25

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 

Day 7: Bridge Repair

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

you are viewing a single comment's thread
view the rest of the comments
[–] mykl 6 points 1 week ago* (last edited 1 week ago) (2 children)

Uiua

This turned out to be reasonably easy in Uiua, though this solution relies on macros which maybe slow it down.

(edit: removing one macro sped it up quite a bit)

(edit2: Letting Uiua build up an n-dimensional array turned out to be the solution, though sadly my mind only works in 3 dimensions. Now runs against the live data in around 0.3 seconds.)

Try it here

Data   ← ⊜(β–‘βŠœβ‹•βŠΈ(¬∈": "))βŠΈβ‰ @\n "190: 10 19\n3267: 81 40 27\n83: 17 5\n156: 15 6\n7290: 6 8 6 15\n161011: 16 10 13\n192: 17 8 14\n21037: 9 7 18 13\n292: 11 6 16 20"
Calib! ← β‰‘β—‡βŠ’β–½βŠΈβ‰‘β—‡(βˆˆβ™­/[^0]:Β°βŠ‚) # Calibration targets which can be constructed from their values.
&p/+Calib!βŠƒ(+|Γ—)Data
&p/+Calib!βŠƒ(+|Γ—|+×ⁿ:10+1βŒŠβ‚™β‚β‚€,)Data
[–] iAvicenna 3 points 1 week ago (1 children)

I feel like I need a Rosetta stone to read this code

[–] mykl 1 points 1 week ago (1 children)
[–] iAvicenna 2 points 1 week ago

thanks that indeed is a Rosetta stone

[–] [email protected] 3 points 1 week ago (1 children)

Thanks to your solution I learned more about how to use reduce :D

My solution did work for the example input but not for the actual one. When I went here and saw this tiny code block and you saying

This turned out to be reasonably easy

I was quite taken aback. And it's so much better performance-wise too :D (well, until part 2 comes along in my case. Whatever this black magic is you used there is too high for my fried brain atm)

[–] mykl 2 points 1 week ago (1 children)

Haha, sorry about that, it does seem quite smug :-) I went into it expecting it to be a nightmare of boxes and dimensions, but finding it something I could deal with was a massive relief. Of course once I had a working solution I reversed it back into a multi-dimensional nightmare. That's where the performance gains came from: about 10x speedup from letting Uiua build up as many dimensions as it needed before doing a final deshaping.

I enjoyed reading a different approach to this, and thanks for reminding me that β‹•$"__" exists, that's a great idiom to have up your sleeve.

Let me know if there's any bits of my solution that you'd like me to talk you through.

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

No worries, it does seem a lot less difficult in hindsight now, my mind just blanked at what I expected to be a lot more code :))

That performance improvement is amazing, I'll definitely take a look at how that works in detail later. Just gotta recover from the mental stretch gymnastics trying to remember the state of the stack at different code positions