Advent of Code helper scripts and solutions.
Go to file
2024-12-30 23:11:54 -05:00
2015 Update 2015 solutions 2024-10-20 15:19:25 -04:00
2016 Finish 2016. 2024-05-20 20:00:34 -04:00
2017 Finish 2017. 2024-06-09 11:52:25 -04:00
2018 Finish 2020. 2024-10-13 16:28:30 -04:00
2019 Finish 2019. 2024-10-13 10:38:21 -04:00
2020 Solve 2020 day 24 and 25 and 2018 day 23 part 2 2024-10-08 19:36:45 -04:00
2021 Finish 2021 thanks so much Eric 2024-12-08 21:24:20 -05:00
2022 Solve 2018 day 21, 2020 day 12 and improve 2022 day 19 2024-09-13 20:22:22 -04:00
2023 Add 2022 solutions 2024-07-07 20:34:52 -04:00
2024 Solve 2024 day 21 to finish the year 2024-12-30 23:11:54 -05:00
.gitignore Update readme and lib and start 2015. 2024-01-27 22:56:28 -05:00
dx.py Update template 2024-09-15 11:49:28 -04:00
get.py Start solving 2018 problems 2024-07-04 11:10:27 -04:00
lib.py Solve 2021 day 20, 21, 23, 25 2024-11-27 17:31:52 -05:00
LICENSE Initial commit 2023-12-28 03:30:10 +01:00
monitor.py 2019 day 6 and 7 2024-08-03 16:31:06 -04:00
README.md Solve 2024 day 21 to finish the year 2024-12-30 23:11:54 -05:00

aocpy

Solutions and utility script for Advent of Code challenges in Python.

AoC 2015

  • Day 1: 3:10
  • Day 2: 5:24 :/
  • Day 3: 7:26 ... :/
  • Day 4: 5:11 ...
  • Day 5: 14:05 o.O
  • Day 6: 15:00
  • Day 7: 17:00
  • Day 8: 14:55
  • Day 9: 13:48
  • Day 10: 70:00 ... slow, but fun
  • Day 11: 12:30
  • Day 12: 6:03
  • Day 13: 7:06 (would have been first by a minute, probably 70ish in 2023)
  • Day 14: 27:45 ... that was weak, logic error for part 2 :/
  • Day 15: 16:00 I should probably stop brute forcing these optimization problems
  • Day 16: 19:00
  • Day 17: 9:05
  • Day 18: 10:39
  • Day 19: Many days... yeah this one took me way too long to figure out
  • Day 20: 10:54
  • Day 21: 25:52 cute bug where I didn't consider that no armor is an option
  • Day 22: That was bad. Did not know how to choose between dfs/bfs and logic errors.
  • Day 23: 10:00
  • Day 24: 20:00 ugly - recursive solution would be more elegant
  • Day 25: 9:34

AoC 2016

  • Day 1: 29:00 That was emberassingly slow. Out of my rhythm?
  • Day 2: 13:24 Getting back into it but still slow af, obviously.
  • Day 3: 11:20 Ugly and slow.
  • Day 4: 21:05 -__-
  • Day 5: 29:35 -___-
  • Day 6: 4:20 okay
  • Day 7: 31:20 hmm
  • Day 8: 14:50 meh
  • Day 9: 26:00 okay
  • Day 10: 23:07 okay
  • Day 11: 75:00 -__-
  • Day 12: 10:05 okay
  • Day 13: 9:43 okayish
  • Day 14: 120:00 struggled with this one (example incorrect?)
  • Day 15: Trial and error. Should use CRT instead.
  • Day 16: 14:11
  • Day 17: 45:00 didn't follow instructions... focus!
  • Day 18: 9:43
  • Day 19: 90:00 that wasn't easy for me
  • Day 20: 67:00
  • Day 21: 32:33
  • Day 22: 90:00
  • Day 23: 60:00
  • Day 24: 48:00
  • Day 25: 6:45

AoC 2017

  • Day 1: 7:30
  • Day 2: 6:15
  • Day 3: 75:00 hmm should have been way quicker
  • Day 4: 3:02
  • Day 5: 6:13
  • Day 6: 8:37
  • Day 7: 19:22
  • Day 8: 8:15
  • Day 9: 6:10
  • Day 10: 55:00
  • Day 11: 66:06
  • Day 12: 6:44
  • Day 13: 120:00
  • Day 14: 17:48
  • Day 15: 11:40
  • Day 16: 13:16
  • Day 17: 55:00
  • Day 18: 23:00
  • Day 19: 45:00
  • Day 20: 9:55 (would have been 10th)
  • Day 21: 90:00
  • Day 22: 25:00
  • Day 23: Multiple days... but super fun.
  • Day 24: 15:45 (48th)
  • Day 25: 41:00

AoC 2018

  • Day 1: 1:49 (2nd)
  • Day 2: 10:53
  • Day 3: 6:16 (24th)
  • Day 4: 25:16
  • Day 5: 17:03
  • Day 6: 1:10:29
  • Day 7: 20:15
  • Day 8: 18:35
  • Day 9: 1:17:52
  • Day 10: 19:14
  • Day 11: 22:52
  • Day 12: 180:00
  • Day 13: 73:09
  • Day 14: 20:48
  • Day 15: 185:11
  • Day 16: 36:10
  • Day 17: 180:00
  • Day 18: 24:04
  • Day 19: days (super fun, but hard for me)
  • Day 20: weeks (a cache was all it took - weak)
  • Day 21: 28:40 (16th - brute force but still not so bad)
  • Day 22: 185:00 (should not have been so slow but was fun)
  • Day 23: days
  • Day 24: days
  • Day 25: 29:20 (slow)

AoC 2019

  • Day 1: 4:25 (copy and paste error, no leaderboard)
  • Day 2: 7:07 (19th)
  • Day 3: 10:46 (37th)
  • Day 4: 8:48 (just too slow, no leaderboard)
  • Day 5: 34:24 (that wasn't hard at all)
  • Day 6: 23:17 (so slow, no leaderboard)
  • Day 7: 72:17 (I found that one challenging, 30:33 would have been required for leaderboard)
  • Day 8: 08:55 (54th)
  • Day 9: 115:00 (Try to read next time.)
  • Day 10: 76:00 (This wasn't easy for me. Fun, though.)
  • Day 11: 21:04 (Too slow, but fun.)
  • Day 12: days (Took me a while to get the right idea.)
  • Day 13: >120:00 (Just struggling so much for some reason.)
  • Day 14: >120:00 (Hmm, wasn't that hard either.)
  • Day 15: >120:00 (I am really weak at the moment.)
  • Day 16: days (Wow. Just too hard for me to solve quickly?)
  • Day 17: days (Fun but too tricky for me to be fast.)
  • Day 18: days (Slow and slow algorithm.)
  • Day 19: 40:00 (Way too slow! Oversight error. Come on.)
  • Day 20: days (Not actually that hard but I struggled for no reason.)
  • Day 21: days (But it was super fun!)
  • Day 22: days (Needed some help...)
  • Day 23: 23:13 (Still too slow even though my int computer was in good shape...)
  • Day 24: 53:00 (Can I ever even get points at all?)
  • Day 25: 70:00 (Well, done at least. Super super fun!)

AoC 2020

  • Day 1: 2:48 (people weren't able to submit because of a website outage)
  • Day 2: 4:47 (no leaderboard, you can tell it's getting faster)
  • Day 3: 7:06 (way too slow, lol; time to take it seriously)
  • Day 4: 14:30 (yo, I am just too slow)
  • Day 5: 11:53 (not competitive)
  • Day 6: 4:11 (75th, finally on the leaderboard)
  • Day 7: 24:39 (bad)
  • Day 8: 6:26 (43th, tied George Hotz :)
  • Day 9: 7:37 (choked bad)
  • Day 10: 34:27 (so weak)
  • Day 11: 21:05 (hmmm, I rally have to analyze why I am so slow)
  • Day 12: 21:52 (just slow again for an easy problem)
  • Day 13: 18:00 (I don't really understand the CRT to be honest)
  • Day 14: 40:26 (Made a bunch of mistakes even misunderstanding Python)
  • Day 15: 17:57 (Too slow for an easy one like this)
  • Day 16: 33:00 (Not too unhappy really.)
  • Day 17: 10:00 (40th)
  • Day 18: 80:00 (I am struggling with stuff where parsing is involved)
  • Day 19: 78:00 (Should have been faster)
  • Day 20: 95:00 (Lot's of code)
  • Day 21: 23:02 (Simply to slow)
  • Day 22: 45:49 (Simple and too slow)
  • Day 23: 105:00 (Sad)
  • Day 24: 15:38 (Close to leaderboard)
  • Day 25: 14:40 (Way too slow)

AoC 2021

  • Day 1: 4:01 (Haha. Why am I so bad?!?!)
  • Day 2: 6:36 (Okay. I might as well stop doing these.)
  • Day 3: 23:46 (How long can I take when I try to take long?)
  • Day 4: 22:18 (No way. Such stupid bugs.)
  • Day 5: 13:30 (Decent, but obviously too slow.)
  • Day 6: 16:33 (Right idea quickly but then struggled to implement.)
  • Day 7: 6:12 (Decent, but too slow again, obviously. Maybe fast enough for part 1.)
  • Day 8: 72:00 (Yeah, that was too much of a struggle.)
  • Day 9: 8:07 (37th okay, okay)
  • Day 10: 15:50 (I was pretty happy with that but double the 100th place.)
  • Day 11: 11:43 (Could have been much faster here.)
  • Day 12: 19:11 (Okayish, but of course too slow for leaderboard.)
  • Day 13: 16:48 (Should have been way faster.)
  • Day 14: 25:52 (Not hard but just too slow.)
  • Day 15: 19:17 (Not that bad. Multiplying the thing threw me off.)
  • Day 16: 50:01 (Way too slow. Was non-trivial but fun. Much better was feasible.)
  • Day 17: 21:59 (Not tricky again but struggling for no reason.)
  • Day 18: 162:00 (I couldn't figure out how to solve it as a tree so I did the basic way.)
  • Day 19: days (Super hard for me but super fun ultimately once I had the right approach.)
  • Day 20: 105:00 (That wasn't easy but was able to solve in one go.)
  • Day 21: 37:45 (Wasn't hard but I was just too slow.)
  • Day 22: 142:00 (Wonderful problem and hard for me but learned something new for sure.)
  • Day 23: 81:38 (Fun but obviously not competitive.)
  • Day 24: 232:00 (Super hard for me but I am proud of it.)
  • Day 25: 15:43 (That could have been much much faster.)

AoC 2022

Done with this. Overall everything is solvable. It's more about consistency and focus. Of course, learning more algorithms and techniques helps.

Times:

  • Day 1: 7:52 ... so slow brah :/ top 100 required 2:05...
  • Day 2: 22:30 ... I mistyped the first and second was just bad top 100 would have been 6:16 (doable?)
  • Day 3: 13:08 actually decent but top 100 required 5:24
  • Day 4: 7:08 but top 100 required 3:33 still okay
  • Day 5: 11:56 but 7:58 for top 100... getting better?
  • Day 6: 3:50 but 2:25 for leaderboard :D
  • Day 7: 27:55 and 14:47 for leaderboard; okay, I would say
  • Day 8: 61:00 and 10:00 for leaderboard; I need template code for searching coordinate systems
  • Day 9: 58:00 and 7:32 for leaderboard; I need code for 2D stuff
  • Day 10: 25:20 and 12:17 for leaderboard; okay, okay
  • Day 11: 45:00 and 18:00 for leaderboard; arg, it was doable man
  • Day 12: 39:45 and 9:46 for leaderboard; the people are ready for their searches :D
  • Day 13: 44:00 and 12:56 for leaderboard; these people are just good, seriously
  • Day 14: 35:00 and 14:54; I just have to get that much quicker... 2D code!
  • Day 15: 150:00 and 27:00; I didn't use Manhattan dist initially, lot's of debugging
  • Day 16: 52:00 and 64:00; ARE YOU SAYING I WOULD HAVE MADE THE LEADERBOARD?!?!?!?!?!?!?!
  • Day 17: Second one was fun with having to detect the repetition.
  • Day 18: 12:00 and 32:00; really straightforward and of course way too slow.
  • Day 19: Slow. (2024-09-13 improved with help from hyper neutrino.)
  • Day 20: Struggled way too much.
  • Day 21: Straightforward and relatively fast.
  • Day 22: Very hard and wasn't able to do hands free. Even the best guys took over an hour.
  • Day 23: Super straightforward, but took me way longer than it should have because I loose focus and make silly errors. Like back in Middleschool.
  • Day 24: Easy. Should have been faster, but no crazy mistakes. Still way too slow for something easy like this.
  • Day 25: Quickly solved via constraint solver. Actual solution much simpler. Don't know if I would have been able to figure it out.

AoC 2023

  • Day 1: 40:00 (I don't know what I am doing.)
  • Day 2: 14:15 (Okay, but far way from leaderboard.)
  • Day 3: 1st 20:00, 2nd 70:00... (I had a logic error that took me a while to find.)
  • Day 4: 1st 9:06, 2nd 22:31; it wasn't hard but I didn't think quick enough :/
  • Day 5: 1st 25:00, 2nd 1:55:00; Required patience and accuracy
  • Day 6: 13:54; I was slow because I thought it is much harder?
  • Day 7: 75:00; leaderboard 16:00... that was just bad; no excuse
  • Day 8: 25:00; I was doing pretty decent here.
  • Day 9: 57:00; my input parse function did not consider negative values...
  • Day 10: 180:00; this one was hard for me.
  • Day 11: 68:00; okay but not elegant and way too slow ofc; x-ray solution would have been neat
  • Day 12: 52:00 and 22:00 for leaderboard; had the right idea and I am good at this type of problem
  • Day 13: 90:00; pretty straightforward but way too slow
  • Day 14: 5:55 for first and then 48:00; straightforward but slow, ofc
  • Day 15: 4:30 and 31:20; more reading comprehension than programming
  • Day 16: 00:27:30 745; best placement so far, of course still horribly slow
  • Day 17: a couple of hours; I realized that I need A* after a while; reused implementation from Project Euler but improved with heapq which was super fun
  • Day 18: a couple of hours; I realized that I need shoelace algo for part two but didn't realize that I have to compute the outer edges for a while and after I did, I still got clockwise/counter-clockwise issues. They could have made it meaner by using different clock directions for example and input.
  • Day 19: This one was pretty straightforward and required the interval technique we applied earlier.
  • Day 20: Part 2 was tough. I had the right idea of printing out the periods of the input conjunction gate pretty early, but then messed up the implementation and thought it wasn't gonna work. Spent a half day thinking up something else before returning to the idea and it worked flawlessly.
  • Day 21: Part 1 was straightforward, but part 2 maybe the hardest problem this year.
  • Day 22: Not too hard, but definitely way too slow for leaderboard.
  • Day 23: I found this fun because it required some creativity for part 2. Slow af, of course.
  • Day 24: Solve problem with sympy. I first used numpy to solve part 1 and it was much faster than using sympy, but I lost that solution when switching to sympy. Takes about three minutes to run for part 1 and then part 2 is under a second.
  • Day 25: I cheeky solved this by plotting the graph and manually removing the nodes. I should probably try to write an algorith that does that, but meh. Manually plotting requires matplotlib and networkx packages.

AoC 2024

  • Day 1: 00:01:30 124 0 00:02:49 141 0
  • Day 2: 00:05:34 686 0 00:08:21 531 0
  • Day 3: 00:01:48 165 0 00:02:40 56 45
  • Day 4: 00:07:47 1101 0 00:24:07 2410 0
  • Day 5: 00:07:07 679 0 00:23:02 1998 0
  • Day 6: 00:09:43 1082 0 00:16:29 464 0
  • Day 7: 00:12:29 2058 0 00:13:08 1170 0
  • Day 8: 00:15:59 1742 0 00:26:56 2190 0
  • Day 9: 00:48:23 6055 0 01:09:38 3159 0
  • Day 10: 00:19:47 2976 0 00:20:47 2244 0
  • Day 11: 00:05:13 642 0 00:33:07 2673 0
  • Day 12: 00:30:30 3540 0 11:41:33 16212 0
  • Day 13: 00:05:35 225 0 00:55:48 2544 0
  • Day 14: 00:20:41 2136 0 00:35:14 1048 0
  • Day 15: >24h 32248 0 >24h 23671 0
  • Day 16: >24h 24941 0 >24h 20575 0
  • Day 17: 17:34:16 23722 0 >24h 17778 0
  • Day 18: 14:35:01 20398 0 14:37:18 19550 0
  • Day 19: 00:14:37 2001 0 00:19:43 1584 0
  • Day 20: 01:08:53 3637 0 01:53:01 2837 0
  • Day 21: 00:48:40 215 0 >24h 16427 0
  • Day 22: 00:13:04 1930 0 00:28:29 739 0
  • Day 23: >24h 20096 0 >24h 17620 0
  • Day 24: 15:57:01 17307 0 >24h 11326 0
  • Day 25: 10:41:54 14140 0 >24h 13631 0