#advent-of-code
1 messages Β· Page 22 of 1
pog
timer set up so i can be reminded that aoc exists
Language Roulette: Day 24
The language is ... Rust
damn fenix was right
We haven't had any hard days this year
Today will probably be the first
Well day 21 was hard but it was more that it was a difficult trick rather than hard or long to code - the code was still very short
i found the past couple of days decently hard, but not as difficult as previous years
Yes it was hard but nothing compared to days 16/19/22 last year
feels like the difficulty got evened out with the early days being harder
T-00:00:15
glhf
<@&518565788744024082> Good morning! Day 24 is ready to be attempted. View it online now at https://adventofcode.com/2023/day/24. Good luck!
ok

thanks for the luck (Im not doing it)
yea so looping over 200 trillion numbers is most likely not the case π¨
part 1 easy
part 2 im impressed if someone did it in an hour
how do i math this
:C
i think this may explain it ||https://github.com/marcodelmastro/AdventOfCode2023/blob/main/Day21.ipynb||
um, looks like a very skippable day methinks
NO!!!
gahd damn
how do i maths
I can't say what I did though
I'll tell how once it's over
dang
i blundered that p1
holy shit this is hard
I've clearly got an edge case I'm missing because I get exactly the right answers for the test but not for the real input
Check time for both boulders, check parallel lines, are you sure you're not having floating point errors (where it's dividing by like 0.00000000000001 instead of 0)
Hailstone A: 19, 13, 30 @ -2, 1, -2
Hailstone B: 20, 19, 15 @ 1, -5, -3
Hailstones' paths crossed in the past for hailstone A.
wtf does this men
mean
is the order in which you compute the paths relevant?
how am i sposed to check for floating point
that's python's problem π
Use integers
thx
Only use floats to extract answer
how are those parallel? if the one has a vx and vy of double the other's?
Yes but the unit normal is the same
OH HELL NO P2 is AWFUL
The direction is the same
LOL
they could still collide right?
They're parallel, not colinear
alright i just think i dont understand the math
maybe i shouldve gotten more than 4 hours of sleep
wtf is p2
now, i think i'll just have to try this since it's so bad, but am i going to regret it? eh, i'll hold off then.
ayo boomy do you have a github or anything
wanna see ur sols
No
Sorry
I can send you a particular day if you want though
Just not todays until after the lb clears
I tried to ||shove it into z3|| but that didn't even work
let me cheer for you! you can do it! we all know who can do it! It's S-T-I-C-K-I-E!
314/confused
did u ||z3?||
my brother in christ i haven't even finished p1
Did you ||only remember to make sure one dimension was in the test range||? That's what I did for p1 lol
NO NUMPY JUST HATES ME
As in, ||I calculated the line segments where start <= x <= end, but forgot to then verify the intersection was in a valid y||
IT GIVES ME DIFFERENT ANSWERS EACH TIME
:thonk:
Make sure to post pics in the solution channel when it opens π
im trying to spam linalg for p2
LOL
lb is half full
sigh
Would it help if ||there were parallel lines||?
For p1 or p2?
weren't you just on a plane a couple days ago
Yeah
get some rest then
OH MY GOD WHAT THE HELL IS PART 2
I'm rooting for y'all! and totally not just because I want to sleep
still only 62 people on the leaderboard. p2 is a doozy. I suppose there might be some cool math involved.
i learned from day 5, can't wait to see what's in part 2 math-wise
I'm going down the wrong path for sure. lol
For p2. But none are.
There aren't any colinear ones, I'm pretty sure we have some parallel ones though
ayo starwort what's p2 look like
π
What's colinear vs parallel?
Colinear means on the same line, parallel means going in the same direction and will never meet
parallel
----
====
colinear
----====
Yeah. I think I checked for parallel in my data, not colinear. I only looked at velocity (3D) and not the starting position.
Oh yeah I don't think I checked if they were parallel in 3d that's fair
p1 explicitly has parallel lines. In x-y.
p1 or p2?
There are 2-3 ways of doing it
I used the most scammy way ||z3||
Other approaches include ||binary search/big step small step on the velocities until 3 boulders meet at a point, then it's easy to get the position||, ||chinese remainder theorem, assuming the collisions are always integers||
Do you mean colinear lol
Also ||yes, the collisions are always integers||
Though honestly I don't see how ||CRT|| is useful here, but maybe that's just because I don't understand it lmao
hooray,,, i guess...'
im gonna sit here and contemplate the problem until i figure it out
i refuse to ||z3||
mfw idek wth that is
Until 3 intersect? I thought they never intersect.
I know what it is vaguely but never used it and an hoping to keep it what way
i mean what's so bad about using it
what is ||z3||
There's nothing wrong with it. But it's much less satisfying to me.
lmao just read part 2. I was not expecting that
if the story from this year was turned into an anime, i'd watch it
man what a crappy day
frfr
i miss when it was just "implement this"
same here, gotta find a way to find ||a line that crosses through 3 other lines|| but sadly cannot find much useful on it
Yeah, like ||intcode|| was honestly my favourite set of puzzles out of any of AoC
i was too young for intcode
i hated it as an hs freshman
and that hate has lingered
I never completed IntCode. When there were parallel stuff going on, I solved it with async and that ended up biting me hard a few days later.
I really ought to go back and start that over from scratch.
Lmao, why didn't you just run them in lockstep (make multiple computers and then run one tick on each at a time)
I ran them in async! That helped with when one needed to block on the other. And I was learning about async at that time. Or hearing about it and curious. It was the wrong choice, though. And not how I'd do it now.
Turns out you only need three
intcode was my first year and my favorite year
just in time!
||z3||
for p1?
but that requires thinking
πΏor an equation from stackoverflow
I really enjoyed intcode.
my first year also. started off with perl, and then decided to use aoc as a way to learn python
aaaa i missed a ||linalg problem D:||
rewrote my part 1 using shapely. Turns out it's pretty snappy.
from shapely.geometry import Point, LineString
class Hailstone:
def __init__(self,x,y,z,dx,dy,dz):
self.p = Point(x,y)
self.e = Point(x+dx*10e15,y+dy*10e15)
self.l = LineString([self.p, self.e])
hail = [Hailstone(*eval(x.replace('@',','))) for x in open(aocinput)]
s,e = 2e14,4e14
part1 = sum(s<=inter.x<=e and s<=inter.y<=e for h,k in combinations(hail, 2) if (inter:=h.l.intersection(k.l)))
10e15 lol
solution isn't too bad though
spoiler?
this is so bad
(the day)
hey can someone help me out with 19? ||I have all the different spaces where valid combinations are in but they overlap and its not a size where I can just put them all in a set||
me when probably magical intertia
p1 is generally 'bruteforceable' p2 is harder compared to part 1
usually needs a more targeted approach
Any extremely hard days
Ah crap
Oh well guess im gonna be in for a fun time
I have to finish day 5, 12 and 18-25 in a month so i can get help in the aoc channels lol
But atleast i understand whats going on in day 5 so im almost done solving that
@mossy basin do you have a hint for 19 2?
I said I was gonna start doing aoc like 2 weeks ago and never started, and now I feel guilty π₯Ή
Its not to late
oh my god
just spent like 10 minutes debugging my day24p1 solution thinking "this should be trivial, how come I'm getting wrong answer", then realised I flipped the sign of a single term when transcribing from notepad, which flipped the sign of all my times π
aw
i am almost at the brink of solving part 2
i just need to ||guess the upper bound for time?||
because ||it looks like it would take forever without an upper bound||
context ||z3||
π₯΄
HOW DO I CHECK RELIABLY FOR PAST/FUTURE?>????
hol up
does time have to be integer for p2?
it isnt mentioned
fuck around and find out time
calculate the collision time and check if it's >0?
iiii have no clue how to do that
like do i just do ||(inter_y-y1)/rise1||
||if vx > 0 then collision x > initial x and vice versa||
is that correct
||was it cheating that I used z3 for p2||
Hey guys can anybody help me with Day 10? I am confused about this:
..........
.S------7.
.|F----7|.
.||OOOO||.
.||OOOO||.
.|L-7F-J|.
.|II||II|.
.L--JL--J.
..........
Why are the 8 tiles marked as 'O' . It does say "In fact, there doesn't even need to be a full tile path to the outside for tiles to count as outside the loop - squeezing between pipes is also allowed! Here, I is still within the loop and O is still outside the loop:" but I did not get it
they are still outside the loop
there's a 'corridoor' between the Is which connects the O to the outside
day 10 got me fucked up dawg
||when I attempted it two days ago I came up with an algorithm that should work on a continious space but on a discrete grid there are just waaay to many fucking edge cases to think about||
i see... a little bit clearer.
wtf did i just read
if you can draw the graph of the connections, you'll get a big clue
At the moment I have all ranges that are valid. Problem is they overlap
The one with finding the amount of combinations
oh, uhh, i wrote a recursive solution
I did recursive to get all valid paths and the ranges the x m a and s can be. Problem is there are overlaps and I don't know how to deal with that
what do you mean overlaps? you mean you have multiple, say, xs and the ranges overlap?
you can combine the ranges maybe, like (2, 10) and (5, 12) combine to (2, 12)
As in I have list of every path that gets accepted. And then I get the ranges. So I have a path with x(1,100) m(500,600) a(40,300) s(300,600)
I can get the combinations for that.
But a second path x(1,100) m(550,650) a(40,300) s(300,600) shares some of the combinations so I can not sum them up
you can combine those two sets of ranges though
into x(1,100) m(500,650) a(40,300) s(300,600)
if all the xmas intersect, there should be a simplification into non-overlapping ranges
x(1,100) m(500,600) a(40,300) s(300,600)
I x(50,150) m(550,650) a(40,300) s(300,600)
What about something like this?
after doing linear algebra for an hour I've proven day24p2 is impossible, whoops
lol
If you add them then I think you have extra combinations that do not work. Or i might be wrong
the simplification is more complicated here
Yeah 4d cube intersections are a headacheπ
is it necessary to simplify intersections at all?
it would look like:
x(1,50) m(500,600) a(40,300) s(300,600)
x(50,100) m(550,600) a(40,300) s(300,600)
x(100,150) m(550,650) a(40,300) s(300,600)
i think
i didn't need to simplify
but i could see an algorithm where'd you'd need to
4d is a real head scratcher, when i made 4d models i fought and fought against cell normals
missed an x
It's a lot of numbers to simply put in a set. Think it's something that finishes within a reasonable amount of time?
you can do it just with endpoints, it's just a product of intervals, so if you can do a single interval intersection/simplification you can do 4
but also intersections for that day didn't seem too hard to me maybe i lucked out
i feel like this should just never happen ||cause u start with one and only ever split right?||
like ||none of the instructions ever add anything to a range they only ever split it, so if you split it correctly there cannot be any overlap||
Maybe I am doing it wrong. I am basically tracing the conditions for every possible path with gets accepted. And some of the conditions during a path overlap
But yes I will go over the logic again.
||technically conditions overlap but those are self contained in the instruction so you could just solve that||
||like if you have {x>1000; x>500} that techncially overlaps (1001-4000) (501-4000) as condition but you can clearly see that after the first one it only has 0-1000 left so the 2nd one should jsut be (501-1000)||
||so it should still result in no overlaps in the end imo||
I will have to think about it some more. But your input helped a lot
gl 
omfg i done day 10
first time running into "Segmentation fault" in python
C flashbacks
Idea was
||expanded_version = { '|': [ ['.', '|', '.'], ['.', '|', '.'], ['.', '|', '.'] ], '-': [ ['.', '.', '.'], ['-', '-', '-'], ['.', '.', '.'] ], 'L': [ ['.', '|', '.'], ['.', 'L', '-'], ['.', '.', '.'], ], 'J': [ ['.', '|', '.'], ['-', 'J', '.'], ['.', '.', '.'], ], '7': [ ['.', '.', '.'], ['-', '7', '.'], ['.', '|', '.'] ], 'F': [ ['.', '.', '.'], ['.', 'F', '-'], ['.', '|', '.'] ], 'S': [ ['S', 'S', 'S'], ['S', 'S', 'S'], ['S', 'S', 'S'] ] } and solve like part one with some modification||
lmao, just noticed something
the fancy animated fluids on the aoc main page for this year eat like a full CPU core for me
poggers
im genuinely so happy about this
code is hideous
ok im gonna need to pastebin
!pastebin
If your code is too long to fit in a codeblock in Discord, you can paste your code here:
https://paste.pythondiscord.com/
After pasting your code, save it by clicking the Paste! button in the bottom left, or by pressing CTRL + S. After doing that, you will be navigated to the new paste's page. Copy the URL and post it here so others can see it.
you stayed up?
||I think my problem is that I didn't keep the order. Probably would be clearer then.||
8 hours
tbf i had dinner for 2 hours
it was worth it
the amount of happiness i got from finally solving it
the later problems of aoc just kind of make me feel stupid XD. probably a bit out of my skill level
if it makes you feel any better they also make me feel stupid
yes but I've been going at this one problem for days and it turns out i did a lot of unnecessary thinking
congrats!
amazing
is there something about the intersection formula i'm missing in p1
Sometimes I feel like it's like Jeopardy (the game show). The concept is you ask questions from a lot of categories. Viewers at home feel smart cause they know most of the answers.
But the challenge is that there are questions from a broad variety of topics, and it's rare to find someone that knows all of them.
Like last night's was probably a lot easier for people that ||remember the math or are working with math|| a lot. But maybe they struggled with the pathfinding problems earlier.
just find another stackoverflow link lol
How many are you finding for the example data?
||you need to keep in mind that line intersection formula consider the line extending in both directions. you only extend in one for this problem.||
2
Sounds like you're off to a good start then.
||for the full data did you remember to change the area? And you're using including the boundary?||
yep
that should be handled by the future check right
are you using numpy
Are you getting an offbyone error?
and did you post your code?
absolutely no clue what's going wrong
part 1 of today doesn't seem bad at all. first thoughts give me this approach: ||get the equation of a line for each hailstone, calculate each pair's POI (if their slopes are different), see if it lies within area||
Sounds right to me
wait a damn minute
can ||trajectories be collinear|| 
if somebody actually answers please put it in spoilers lol
i'll err on the side of easy, so no ||collinear lines|| :P kinda wanna have the surprise of getting this edge case
||collinear as in they travel the same path?||
as in, if you expressed ||their trajectories as equations of lines||, with no extra properties, you can plug em into desmos and they show up as ||the same line||
which messes up my logic outlined above
||probably not, because of p2 reasons||
will read this after getting to my laptop and having a real attempt at the problem (assuming the edge case doesn't exist) lol
ok found my fault. i didn't add the last condition
in my input no, and moreover, ||no two hail velocities are parallel|| in my input.
any d24p2 hint givers around?
d24p2 hint: so far I've only seen one solution that didn't involve a bunch of linear algebra (only as much as p1 does) π₯΄
i would like to do whatever solution that is lol
i'm happy to brute force if that's possible, i just can't understand how one would
then the (big) hint is: suppose you have two hailstones whose lines don't intersect, and they also ||have the same velocity along an axis, let's say the axis is the x-axis and the velocity is v||.
Then let the rock's position and velocity along that axis be x0,v0. Then the collision equations are ||x0+t1 v0 = x1 + t1 v, x0 + t2 v0 = x2 + t2 v||. Then we can subtract the two equations to get ||(t2-t1)(v0-v) = (x2-x1)||. Then, and this is the fun part, suppose also ||collision times are integers|| (there's no reason why this must be true, but it's in fact true in part2). Then this implies ||x2-x1 is divisible by v0-v||, which gets you a finite set of possible values of v0. And in practice, there are enough rocks that doing the same for each ||group of rocks with the same velocity along a given axis|| lets you narrow it down to a single solution for v0 along this axis. After you have the rock's velocity, there's another trick to to get a component of its starting position, after which getting the full starting position becomes simple.
Ah this sounds like a fun day
who here didn't use a CAS to solve p2
That does sound like a much nicer problem than "shove it all into z3"
I learned more maths this aoc then in school lol
I was embarrassed and surprised at how much geometry I had forgotten in p1. I also had vx, vy, vy = data which took a while to debug.
i'm gonna have to read this like 10 times before i understand it
the idea of this solution comes from @mossy basin and I too had to think of it a lot and implement it before I convinced myself it actually works
my own solution was, uhh, the same as most people's. tons of linear algebra and a CAS.
? if you use a CAS idt much is needed after
tons of linear algebra ftw
damn, it's still not clicking for me. I feel like i have a mental block or something
is there a specific point at which it becomes unclear?
i think i'm struggling with what each of the variables represent. As well as what it's actually calculating
i can't get past the thought of if i were to be solving this in one dimension. the fact that between two hailstones, there are infinite starting positions and velocities in which I could intersect at infinite points in time?
or not 2 hailstones but rather a single hailstone and the rock you're throwing is what i meant
it becomes finite when you need to collide with multiple hailstones
hmm, here's a maybe more intuitive explanation: ||if you have two hails moving with the same velocity (along an axis - let's forget about the other axes entirely), they are stationary with regards to each other. The rock is moving with regards to them though, and passes first through one, than the other. The collision times, we assumed, must be integers - so the time the rock moves between hails is an integer too. But that means a certain divisibility - if the distance between hailstones is 55, the rock's velocity relative to the hailstones must divide it, otherwise it can't be at one hailstone at one integer time and at the other hailstone at another integer time. So the rock's velocity relative to the two hails can be Β±55, Β±11, Β±5, Β±1.||
hmm
so ||find 2 hails with the same velocity and get the possibilities of the rock's velocity from there||
it narrows down pretty fast
my incomplete solution just had like two or three guesses to make, and it wasn't using the complete set of diffs
yeah, pretty much - I iterate over ||all pairs of hails with the same velocity-along-the-current-axis which also don't intersect||. for some hails you get like a hundred possibilities but for some you only get a few, and it very quickly narrows down.
so this hinges on ||there being multiple hailstones that have the same velocities for the same axis?||
if we had hailstone a have an px=5 and a vx=-1, and then another hailstone b of px=3 and vx=-1, what are the possible velocities of our rock?
so this is done ||for every axis||?
you also need to check that ||they don't intersect (this is an important requirement, because otherwise it's possible the two hails and the rock all intersect at the same time)||, but assuming so ||the rock has to cross a distance of 2 over an integer time, so relative to the hailstones the rock's velocity has to be Β±2 or Β±1, and to move back to the global frame of reference we add vx=-1 to all 4 possibilities, getting 1,-3, 0,-2||.
yup, ||entirely separately for each axis||
||ok i sort of get that it has to cross a distance of 2 because that is the distance of the hailstones. but you lose me at the Β±2 or Β±1 part. I assume a valid rock for this would be px=7 and vx=-3 right?||
assuming i calculated that right, i don't actually know how to get that answer programatically, I kind of just did some trial and error in my head
you do some trial and error in a loop
lol
Rock's starting position I calculate separately after all the velocities
||relative to the hailstones, the rock can't move at a velocities of 3, because then it can't move by 2 in an integer time||
so ||1, 0, and -2|| are valid velocities too?
Ok I stop with the super reactions 
||so the rock's relative velocity must, by magnitude, be 2 or 1 (in which case it moves between them in 2 timeunits). Only then is 2 divisible by it.||

yup. they correspond to rock velocities-relative-to-hailstones of (subtract vx) ||2, 1, -1||, all of which are divisors of 2.
i can see how vx=1 is valid, if you started with px=1. I don't understand what px you could use for vx=-2. And i'm still not understanding how you determined these velocities
oh px=6 i guess, for vx=-2
i get that -1 - 2 == -3 and -1 + 2 == 1. Why is Β±1 valid though?
yeah, negative relative velocities mean the rock visits them in the opposite order
It means the rock crosses the distance between rocks in two timeunits. If rock's velocity is 0 and starting position is also 0, then at t=3 it crosses the second hailstone, and at t=5 it crosses the first hailstone. In the hailstones' frame of reference, this situation looks like the rock moving right with velocity 0-(-1)=1.
ok lets assume for a second that I understand. Is the problem then in a sense, to do this with multiple pairs of hailstones, and find a common valid velocity among them?
christmas is doomed
i'm struggling to use the logic above to even reason why the velocity given in the example is valid for 2 of the hailstones that share a velocity. with px=18, vx=-1 and px=12, vx=-1, they have a distance of 6. How do we then glean from that, that vx=-3 is a valid velocity to hit them both?
i finally got it :) Problem was not keeping the reverse of a condition, for example s>1000:FG,m>10:zd if you have s is smaller than 1000 you have to add s (1,1000) to the m(11,4000)
ahhhh yes, well done
fun problem, I liked that one
move everything into the hailstones frame of reference for a sec
so the hailstones aren't moving relative to each other
and a rock hits one of them
in this frame of reference what velocity does that rock need to be to hit the other
if it hit at px=12 and it needs to hit at px=18 it can move at velocity one relative to hail, hitting 13, 14, 15, 16, 17, and 18 along the way
it can move at 2 velocity hitting, 14, 16, 18 along the way
it can move at 3 velocity hitting 15, 18
or it can move at 6 velocity going straight to 18
any other velocity and it misses the 2nd hailstone
ok that much makes sense to me so far
once we have these velocities, we need to move back into the rocks frame of reference so we just subtract the shared velocity of the hailstones
from those possible velocities of the rock we just found
so -1 - 1 == -2, -1 - 2 == -3 (the one we end up using?), -1 - 3 == -4, and -1 - 6 == -7 are the possible velocities if the rock only has to hit these two hailstones?
i think so
heh
i think we need to reverse the signs, but lets say, 2, 3, 4, 7
a 12
b 18 17 16
rock @ 2 12 14 16
b 18 19 20 21
rock @ 3 12 15 18 21
b 18 19 20
rock @ 4 12 16 20
b 18 19
rock @ 7 12 19
i'm confused what this is representing
sorry
lemme align it
this shows the position of b and the position of the rock a few nanoseconds after it hits a
up until they collide
day 24 part 1 solved :D
this felt super clean, high school math failed me not xD
https://paste.pythondiscord.com/5EEA
part 2 looks super interesting
the math might be beyond me though lol
not sure if you need some ||linear algebra|| shenanigans, but i did just fine with part 1 with manual ||solving for systems of eqs||
now part 2 does ||amp it up to 3D||, so probably gonna have to bring in ||np.linalg.solve||
oh ok i think i get it, so first line is the hailstone's movement, and the line after is the rock's simultaneous movement/position
yeah, the first case b is actually traveling backwards
shouldn't it always travel backwards?
sorry, the other cases are traveling backwards, i forgot its -dx
we are hitting in the past
oh
the solution, at least what i had, tries like all these sign combinations anyway
i still am not sure how to get the other hailstones with different velocites involved though
but how can we narrow down to the correct velocity and use that velocity to then find the starting position?
oh i'm so confused
are time and position continous?
or do the stones have to collide at integer times (number of nanoseconds)
they collide at integer times, but this isn't specified in the problem because you're not solving for t anyway
kk i think part 2 might be beyond me
i'll do a first attempt, and unless miracle strikes, look for a hint :P
if you look at enough groups of parallel stones, you'll find a common velocity
you don't even really have to look very long
interesting
like if you get say 2, 3, 5 for a bunch just take the product
probably the velocity is 30
and i'm assuming you can do this for each individual axis indepedently?
yep
once you have the velocities, the position is really easy to get
and the input makes it even easier
you can actually look up the position in your input in most cases
that i can believe. I still don't feel very close to being able to write any code though, it's all very fuzzy still
yeah, i think this solution is kind of the messiest, but it's also in some sense the simplest
like, we're making very simple arguments to get the solution, but the code involves quite a few loops
but i guess less loops than gaussian elimination or whatever
i wish i had time to actually work on it, but i have to clean the house first as i'm hosting christmas festivities later. Hopefully I can find some time inbetween
TIL about ||Z3||
how
does such a thing even exist
i'm accessing technology beyond my comprehension
this feels like dall.e all over again
i remember how awestruck i was
It's a bunch of very interesting math, you can DIY your own and though it will be slower, it will work.
guys I'm on day 10 rn do you guys think I can catch up to day 25 in 5 hours?
you can with a couple ctrl+C, ctrl+V π
I don't do that type of shit
unless I'm backed to a corner
what's ||Z3?||
||pip install z3-solver|| make sure you get that and not ||z3|| which has a similar name, but has to do with amazon s3.
probably not
wait i feel like ive heard of that
is it similar to sympy?
its like sympy but on steroids
that's tuff
if you thought day 5 was "easy" and don't mind googling or asking here, it's possible. make sure to timebox yourself. so that you give up after x minutes per puzzle and get help asap. You have 5 hours to do 15 puzzles. some of which will take over an hour each.
day 5 wasn't easy but I didn't google anything to solve it
sympy but fast
the hardest day for me so far was day 10 part 2 at least with the approach I'm doing it (I refuse to bruteforce it)
next year i'm making utils so i don't spend 1 hour on the same thing each time
day 12 was my breaking point lmao
there will be a couple problems similar to day 10 coming up.
fuck I'll probably just take my time once aot ends
no reason to torture myself
I'll jump 25 like I did 23 and 24
I resisted jumping before because I was scared of the sudden jump in difficulty
but 23 and 24 (using z3) were both easier than problem 10 and 5
oh nice
fuck I gotta try 20 and 21 if they're the only real hardest
24 is kind of a cheat ||if you use z3||
here's a relative scale to give you an idea how the puzzles compare to each other I put together:
click on it, it expands. lolz
pretty accurate to see 5 and 10 being the first tough ones
goes along with what I've had personally
My eyes could never π
also: there's a similar table here: https://aoc.xhyrom.dev/ he liked my table and made it better.
I don't know if I'd call day 23 hard, my non-optimized version of p2 took 4 minutes and that was just a classic ||dfs||
so it's only hard if you need an ||optimized version||
the scale is based on how long it took the leaderboard for part2 to fill up. so scale from there. There's always going to be a problem you find easier. Almost by design as it touches so many topics.
if I had to guess the reason it took a bit longer for d23 is because people ran it for 10+ minutes to find solutions π€£
I wasted some time seeing if writing it in C++ would let a dumb approach succeed
still no, OOM killed π
the maker of aoc really went easy on us this year
many less extreme problems and 0 insanes
some people got it in like 20ms in python (d23)
so there's some crazy optimizations to be made
My final Python solution ran in just a few seconds, and it only took one pretty tiny change to get there.
did you google stuff to do that? I know the optimizations have to do with ||significantly reducing the nodes in the graph|| right?
2015 day 1 insane? Weird
||I'm too far behind in AOT to go that deep in optimizing though||
didn't google anything, did do the thing you said, yeah
the metric breaks down for earlier years, and as it is time based a number of external factors could be involved
(like the number of people who knew about aoc)
today's was the only one I needed to use a spoiler for this year. And it was a small one - ||use z3||
still though, ||using z3 is not a real solution in my opinion||
I had a little fun with my display code for day23.
perhaps, but I don't think I was ever gonna solve it otherwise
I'm sure some people found an ||analytical solution|| which I'll try after I finish all prev questions
the math required for a proper solution to today's is definitely past my depth
haaa now do it for the real input
here's mine
wait i don't get how that works
worth a shot maybe there's a cool simplifying trick
we'll see
if you understand the math, ||there's at least 1 very good optimisation to make. ||
nvm
just didn't see the relevant wording
it's a ||constraint solver. what that means is you can define a series of variables, set up constraints (in this case, equations) with them, and use z3 to get all possible values for those variables to satisfy these constraints. for hard yet "simple" problems like these, you can chug the problem statement directly into z3 and let it spit out an answer (thereby cheesing the problem).|| i don't like it bc it's basically cheating, but today's math was beyond my reach
ok I'd like a slight spoiler. what is part 2 of 22?
i was gonna ask how those numbers were gotten since there was a mismatch with what i got but i remembered ||i only kept possible rock velocities that are shared between all of the same hail-velocities of an axis||
how should this work
currently rn i have 256 possible combinations for the test input
978960 combinations for the real input
isn't that just casadi?
that how it should be, nice and simple problems or just a little challenging
imagine for a exaggerated example, you have to solve P v NP problem in a day
i'm not sure what that is
i think ||Z3|| generalizes to any constraints though, not just mathematical and definitely not merely a system of linear equations
hence why you can cheese a lot of things with it
ohh
where's the line between cheesing and using the right tool for the job?
depends tbh
Merry Halloween everyone
if I can get 80th or better today I'll probably end up on overall global
that's a lot of pressure though lmao
Language Roulette: Day 25 π
The language is ... Python 
Also yes, The Advent of Code Completionist Role will return. More details about that will be released in a few days. Merry Christmas & Happy Holidays y'allπ
literally rigged
literally
me? Rig the roulette to get a cute outcome? Neveeeer
.xkcd 221
yeah i'll come back on this later
||use z3||
We're very fair here
||that's like probably the only way if you're doing p2 in 8 mins||
This is really the only good way of doing p2 lmao
smh. cooking the odds
very sad that it's like this
Anyway Merry Halloween and good luck to everyone
Here's hoping that I will be fast enough and enough people will be slow enough that I can get overall global LB
(I need like 80th to even have a shot)
((I wonder how many leaderboard people dropped off though, maybe non-zero given yesterday's p2))
GLHF everyone

<@&518565788744024082> Good morning! Day 25 is ready to be attempted. View it online now at https://adventofcode.com/2023/day/25. Good luck!
wtf
looks easy tho
Looks alright tbh
Im reading the puzzle as I'm going up a chairlift
And my hands are freezing
But looks doable at a glance

does advent of code 2023 ends today?
yeah i'm not sure how to do this
yay, done. now, how do I solve d25 without cheating with my ||human eyes||?...
i mean this is just solving ||min cut||
man 3 classic problems in the past few days
damn
let's
GOOOOOOOOOO
@pine tiger how do you do it without ||flows - I used networkx to compute this and got a decent place||
I'm 33rd - fine by me
that's literally what i did idk what you're talking about π
blud got 33rd and just says "fine"
these past few days have felt more like knowledge checks than anything tbh
yeah, definitely.
i'm just the tiniest bit afraid that eric's started running out of ideas
i didn't know ||what a cutset/min cut was before this, so i had to do some googling||
I literally ||drew the graph with networkx and then typed in the three obvious edges stretching between|| :p
i've now solved it the proper way and realised it'd have actually been faster π
since it's ||literally a single networkx function call||.
ok but you donβt know ||which nodes are in different partitions||
alright, two function calls.
Dang
just two?
idk i might just be dumb
my current solution ||runs through every pair and stops when there's 3||
||min_edge_cut, remove all these edges, then connected_components||
yeah
i still need to figure out how to narrow down d24 p2
can't say i've enjoyed this year as much as the others tbh
i did more autowriting this year than in the past few years
Yeah, me neither
which i think is a great improvement
There were only a few good puzzles
yeah
the rest felt like either knowledge checks or "figure out this cool thing about ur input"
But that's only because I didn't do the ||quadratic|| solution - I did it by hand
mine was day 23
I didn't like that one at all actually
followed by day 19 and then day 5
For part 1 there's a really fast way but it's not needed
D23 was kinda neat ig
For part 2 there's an optimisation that doesn't really help the time complexity but it speeds it up MASSIVELY somehow
and there's no other optimisation I think
i've known of the ||collapse the maze into a smaller graph so you can run dijkstra/other weighted graph algs on it|| thing for a while, but i'd never actually done it before so it was cool for me
I think my favourite puzzle was probably day 7 honestly
and i liked my ||dfs with backtracking||
day 19 and day 5 were just ||reminders that i should make some interval interface||
I liked day 19 a lot
i'm immediately prejudcied
towards any day that requires some assumptions about the input
My favouite was probably day 12 tbh
i had fun with day 15 but that's because i did a one liner
that was just brute force with cashing iirc
those half-inspired me to make a custom range() with &
but thinking about it i realized it was probably more complicated than it was
least favourite was day 8
you can contribute to mind_the_gaps if you want
you guys even working on christmas? leave today's aoc for tomorrow π
it's not even christmas yet
its here, timezone matters*
but i get to take off my santa hat soon
i'll think about it
i was thinking about writing a more specific version for numeric intervals
mind_the_gaps doesn't require numbers just the items need to have __lt__
but things like shifting an interval or mapping an interval can't really be done with non-numbers
i have esoteric tendencies so i'm hesitant to start contributing to stuff people actually use
i dont understand but every aoc problem can be solved using regular expressions, would it be legal?
why wouldn't it be
you can solve however you want
ah thats nice
Including by-hand if you want (people did that for upping the ante one year, I remember)
can solve with pencil and paper or quantum physics or whatever
There might be logistical issues with that second one but yeah
what's mind the gap
!pypi mind_the_gaps
lmao there's no documentation
well it's been a trip and a half, have fun y'all.
The thing that bugs me about that is you're calling the intervals gaps when gaps are the absence of gaps Β¬.Β¬
yes there is
Anyway aoc_helper also has range and multirange helpers for numeric intervals
It's literally a replacement for the vanilla range that's also useful for interval arithmetic
(I was already shadowing range with a custom helper but I took the opportunity to make the helper better at the point where I realised interval arithmetic would be useful)
One of the most cool things it lets you do is for i in range(large_number_pasted_from_aoc) + 1 for 1-indexed loops
did you implement sweep-line?
when you do some binary operation on a set of ranges you sweep-line to create the new set of ranges
well there are docstrings
I genuinely have no idea what you mean by this lmao
well, you sweep across the sorted endpoints of the set of the intervals and determine for each endpoint whether you are inside or outside the new set of intervals
I don't think I actually made that optimisation, but I do merge ranges where possible - range/multirange operations return a range if possible and a multirange if not lol
i had something similar, but now i always use a set of intervals instead of a single interval
in
||stoer wagner's algorithm , the motive is to find the edges with sum of min weight right , so here we plug weights = 1 i suppose ?||
anybody else tried ||randomized search||
I wrote a purely geometric solution for day 24, part 2, if anybody is interested https://github.com/P403n1x87/aoc/blob/main/2023/24/SOLUTION.md
also I guess roulette completed
leak the roulette making process fr
roulette people should get a clown emoji as the thing instead of the π
a roulette enjoyer role would be fun
"enjoyer"
yk it actually made a lot of the early days more fun
but also roulette is a bit of a misnomer. more like rigged π‘
i made it :D
had to paste my code onto dpaste then reshare as a file it onto discord to run it on a code bot but i made it
huh. can't install python locally?
you can set up a decent environment on a phone
day 25, ||minimum cut problem?!?!?!||
though ||this graph is undirected||
and we also know it's just ||three cuts||
it's as simple as it looks, yes
heck, i wonder if ||with the number of edges i can just O(E^3)|| it
there are at least 1000 edges, so probably not
sure, if you want to write the algorithm for this yourself
i've seen some very interesting ||approximate|| solutions, but most people either used a library or implemented a proper ||min-cut-max-flow|| algo
There's an easier way to do it involving ||visualising the graph|| @sleek cave
You can use ||the algorithm of your brain and eyes||
it can be done. Won't even take a day I think, but you'll have to be patient
@woven solar where did you guys learn all these algorithms?
go yt and bookds
Print(βMerry Christmas!β)
What does @ mean? I've literally never seen this in Python before
a1 = (r3 - r2) @ (v3.x(v2))
It's matrix multiplication. In my implementation of Vector I have defined it to be the scalar product
aoctk/aoctk/data.py lines 305 to 306
def __matmul__(self, other) -> float:
return sum(a * b for a, b in zip(self._c, other._c))```
That's pretty cool! How does it know that @ -> __matmul__?
Don't you have to write it somewhere for it to be recognized? I thought you needed tokenize for something like this
thats builtin into python
its an operator just like +
Huh, I've never seen it listed as an operator online. It's all very new to me π€
!e
class T:
def __matmul__(self, other):
return 42
print(T() @ None)
@thorn inlet :white_check_mark: Your 3.12 eval job has completed with return code 0.
42
yeah its not used much, i think it was added for numpy specifically
Thanks for clearing things up!
Does anyone have an image showing the difficulty rating for each day of aoc?
Based on what?
Perhaps difficulty of previous years? I saw one posted a week ago that was every day up to the 16th
Categorised by easy, medium, hard, extreme, insane
@rancid creek website version of your AoC difficulty chart
For day 13 would someone mind runnng their solution on my input and giving me a list of the value for each segment? My code works for the test but not for the whole thing and I can't spot the issue
||```py
def check_row(section: list[str], i: int) -> bool:
m = i
n = i + 1
while m >= 0 and n < len(section):
if section[m] != section[n]:
return False
m -= 1
n += 1
return True
def get_value(section: list[str]) -> int:
# Rows first
for i in range(len(section)):
if i + 1 != len(section) and check_row(section, i):
print("Row", i + 1)
return 100 * (i + 1)
# Columns
columns = [[] for _ in range(len(section[0]))]
for i in range(len(section)):
for j in range(len(section[0])):
columns[j].append(section[i][j])
for i in range(len(columns)):
if columns[i] == columns[i + 1]:
print("Column", i + 1)
return i + 1
def part_one(data=data):
total = 0
for section in data:
total += get_value(section)
return total
this is p1?
Yes
put your input in a pastebin here i suppose
TIL about ||randomized algorithms via karger's algo||
pretty cool to know that bogosort is sometimes a viable solution :P
time to implement it π©
Yeah. Messaged me when they made it. Pretty cool.
nice
so I'm not wrong in thinking 2020 was an easy year π
that's the only year I've gotten all 50 so far
I'm so close this year, I may try to get it. 23 seems pretty reasonable; so it's just that, figuring out two bugs in earlier part 2's, and the real issue will likely be day 24
an interesting question might be; in the context of AoC, are there really situations where this metric (leaderboard times) significantly depart from "difficulty" - i.e. questions where they take longer to do, but aren't "harder" in the sense that the completion rate of people who stick with them might be higher
it's quite possible there isn't any substantial departure (and if you thought there was, what would be a good, i.e. objective way, to make the case)
It had some hard ones, but far less extremely hard ones than other years.
yeah
2020 day 20 was challenging.
There are certainly some puzzles where they are more involved and simply take more time, not that they are "harder" But for the most part as a scale it's readonably accurate. The ones the leaderboard finds harder are generally harder for everyone.
With the caveat that if a puzzle hits something you have some expertise in you'd going to do better than usual. π
i could be misremembering but that is actually (i just reread it), a pretty good example of something that I see as more time consuming than actually difficult
Yeah, looking back a bit at my solution, I personally think it was more grindy than anything else
you didn't really need to know, actually almost anything in particular; there's no graph traversal trick, no CRT, no shoelace...
If you take the fairly obvious heuristic for trying to combine edges, that heuristic was (IIRC) completely sufficient to actually solve the map
was there a clever solution for day 24 part 2? ive finally finished everything and day 24 part 2 was the last one i got only because i left my thing running overnight and thankfully it terminated with the right answer by the time I woke up π
most people ||derived the formula they needed|| and than plugged it into a ||formula solving library like z3 or sympy.||
There was a couple other methods available that were likley more work
but ultimately it was ||figure out the math, find a way to solve it using linear algebra or using a lib to solve it||
if you find yourself spending 2+ hours on it and you're not getting anywhere, go read some of the solution threads on reddit or https://discord.com/channels/267624335836053506/1188712619251613776 and see if you can pull some ideas or figure out if you're headed in the right direction at least.
chist ok, i took out my notebook and tried but i just could not in the end
dunno if you've been around to pick up my schtick: but I like to solve problems with very very terse code, but readable terse code, so not golfing, just terse.
I have around 800ish lines of experiments trying different things for day 24 part 2. and my eventual solution with ||z3||is about 8-10 lines. Possible could have been even more succinct if I knew ||z3|| better. π
I also have a lot of code for part 1, After I solved it I went back and learned ||shapely|| to solve part 1 again. That was fun!
I too have on the order of 900 lines of commented out experimentation code for d24p2 :P
I ended up going with one of my first attempts anyway cuz I just couldn't figure it out on my own otherwise (and I really didn't want to ||use a solver like z3/sympy||)
my (i thought at the time) half-decent insight was that ||although none of the lines currently intersect, if the velocities are offset by the velocity of the rock then all the lines would intersect at the starting point|| but after that I ran out of bright ideas so ||I just brute forced outwards from offsets starting at (0, 0, 0)||
arg, 23 part 2, pass the test input but not the real one... π
rip
||hard code anything? start, end, height, width ||?
the end, but I passed part 1
my solution for part 2 was a copy paste of my part 1 solution with minor modifications
i'm getting some kind of infinite loop, so I guess there's something incorrect around the logic for keeping track of points I've already been to
presume you're maintaining ||your current path and just not revisiting it||
I thought I was. I have a simple ||visited set. When I hit a fork in the road, I push copies of the visited set into the stack. ||
are you making ||a copy of the visited set? you don't want it shared across each search||
Yep, exactly
did you uh, do anything to ||remove nodes from the maze|| ? <-- major spoiler so don't click if you're not ready
It's very simple so I'm super confused how it could go wrong.
What do you mean by this exactly?
if you have ||1000 nodes in a row with no branching||, you can ||remove 998 of them|| and just ||connect the 2 branching nodes. ||
I considered that approach, but I didn't ||remove in the end, but if there's only one branch I just proceed down it directly||
My p1 was very fast so I thought that was good enough
I guess it's possible that it's not an infinite loop at all, and it's just slow
take a look at this picture I posted: #1187992625886793838 message
Doing day24 part2, want clarification: ||do the collision times need to be integers? Or is it possible for the rock to hit a hailstone e.g. 2.5 nanoseconds after being thrown? Assuming they don't need to be integers, hoping they do.||
||they are integers according to everyone else's inputs (including mine)||
||phew, that should make things easier, I hope. Still plan on trying a solution that works for all numbers though.||
I noticed that in the summer there were some weekly challenges based on AoC here on this Discord server.
But I forgot how they were called and where to find them.
Does anyone know?
revival of code
exactly, thank you!
is there a limited time to get 50 stars?
cause days 22 to 24 killed me and i need some time to do them
no
Codewars is not even in the same league as advent of code
There are other years you can practice on
Well there's 9 years worth of adventofcode to finish. 450 stars to collect.
Thats true
I need to learn git and make a repo with all my solutions
Ive been trying to learn vim but gave up
time to give emacs a try instead. π
I think i ought to stick with something super simple like atom for now and just focus on going through a python book like crash course or automate the boring stuff
solid start.
codewars will be a fine place to just practice simple things. if you did codewars adventofcode this year make sure you review others' solutions and look for new techniques or libraries to play with.
oh and probably not take any xelf solutions on codwars too seriously. more meme than best practice.
Ok, thank you for the advice!
oops. meant to say if you did adventofcode this year to also review others solutions. but yeah review others solutions for both.
is atom still a thing?
Sure why not?
i thought it was kind of dead; had its lunch taken by vscode
it's kinda dead yeah
What does that mean?
i guess according to this it's... a bit ahead of emacs π
It means that the community is a lot smaller, there's fewer people who are likely to have written a guide explaining how to do something you want, fewer people who will have written a plugin for it
Ah i see
fewer people who will be maintaining a language server for it, for some language you want
etc
it's also kind of, unclear, I guess, why one would use atom over vscode because... they're really exactly the same idea.
Well theres always vim
emacs is niche yes but it's doing something totally different from vscode, in some ways. same with vim.
Vscode is hard on my laptop
i'd be surprised if atom solves that issue tbh. In any case what' smostly bad isn't the GUI/editor itself, it's the language server stuff
the bad about the editor is that it's ||not vim||
lol
Whats the best way to actually get good at vim?
with vim emulation you get the good parts of vim without the bad parts (everything else)
just keep using it; like anything else really. Mix in some occasional reading of blog posts with tips/tricks.
mostly just force yourself to use it and you will find your brain figures it out
just do read ocasionaly so you don't end up like me, having to learn to use I and A about 2 years too late
just keep in mind that some vim stuff just isn't really as worth knowing anymore, to teh same degree it was before
and also really, in the end these are all pretty small optimizations in the grand scheme of things
Got it
the core editing stuff is the most important parts to learn
that's where most of the vim magic is at
and in connection to that, learning the automation powers of vim like macros, global commands, etc π€€
Yeah that's the stuff I don't think is very worthwhile
how so? 
If you already know it I'm sure you get occasional opportunities to use it but I think it's mostly superceded by other stuff
it's the part that actually makes it a power tool
That's not what I find. I also find that term a bit cringey tbh
what superseded stuff like "execute this action on all lines matching this pattern"?
I don't really find it's something I ever need to do. In the past people would sort of try to make these things work for refactoring, but nowadays language-aware refactoring just works much better and it's easier to use
I've had to do a lot of "do some processing of text in this semi-structured format"
it kidn of becomes more difficult to talk about once you move the conversation to things like that, as then a whole bunch of other things enter the picture
macros and other automation is a godsend to avoid repeating the same processing of like 100 elements
I'm thinking mostly of actually editing code in this particular discussion
ok, more reasonable scenario then:
I have this semi structured data and I want to do some processing to make it into a python list/dict for use in my program
i would probably just parse the whole thing with python
when I've had semi structured data it's far, far too large of a quantity that trying to munge files with vim would make any sense
100s to 1000s of lines is in the sensible range with just some vim automation
but yeah, I mean, it's not hard for me to believe that there's some fairly specific scenario where vim allows you to save a handful of seconds with some clever /g commands or whatever.
I just dont' think these are tasks that most programmers are doing regularly; and usually when people want to have editor discussions I feel like it's pretty focused on code
it's not always about being faster
uh ok π
it's often about being less annoying and often less error-prone
I have never needed anything more complicated than a series of :%s/. Sure, could probably :norm my way into a couple fewer keystrokes, but vim is god-awful at making these operations introspectable, so it's IMO just not worth it.
yeah. the ergonomics on macros/repeated commands is pretty terrible, for typical tasks, compared to multiple cursors
repeating the same manual edit in a bunch of places is a recipe for human error slipping in
I mean, sure, yes, but like... it's weird to use that as an argument for vim because that's ultimatelys till pretty manual, and it doesn't scale
that's not unique to vim, 99% of what you need you can do with search and replace.
or multiple cursors
the actual thing to do, and what you'd undoubtedly do if you had more data, is write something to parse the semi-structured data as best possible
I've written python scripts to parse messy data dozens and dozens of times in my life, I've had a situation where the amount of data was in this rather narrow sweet spot for vim, just about never I think
I've had a bunch of recent tasks that just didn't lend themselves well to full automation
but automating some building blocks was helpful
my actual favorite vim feature probaby and one of the main reasons I keep coming back to vim emulation is text objects
Especially the add-on "argument" object, it's almost funny how useful it is
cia for days
I would not consider the tiny slice of extra power over search-and-replace complicated vim gives you worth learning, especially since you are forced into writing all your steps into a single line that offers no syntax highlighting, introspection, etc.
^
I learned a lot of that stuff at some point when I was really into vim and had so few opportunities to use it that I just forgot
tl;dr of that case:
cross reference/join two related sets of data where the "keys" may match but also might be a bit different, to find the exact key you might also need to cross reference an external file
when the key matches exactly you can automate fully, when you need the manual intervention you can't, but you can still automate parts of the edit
idk, I just don't think most software developers do such tasks very often
maybe sysadmins do, or people in other roles
that's an awfully specific reason to recommend vim
it's a specific case where the automation capabilities bridge the gap between purely manual edits and full on automation, but I end up using simpler versions of the same stuff a bunch in general editing
like recording a macro or defining some ad-hoc keybind for some edit I need to repeat
honestly, my experience with vim macros has been miserable
It's the bare minimum you need to have macros and absolutely 0 extra UX
it's just like I mentioned, there's a lot more tools now that "push" out places where you would use macros
formatters, refactoring like e.g. renaming variables but even also changing argument order, etc
one usecase is taking code from language A and adjusting it for language B
in the past it was common to have to do a bunch of this repetive work "by hand" so macros had more opportunities for use
I find myself doing that every once in a while
yeah, it comes in handy very occasionally
you'll always have some stuff that doesn't fit the buckets
but yeah, improved overall tooling is nice
But honestly, there are more productive things to do than learn which specific utterly opaque, undiscovrable, memmonic-free, sequences of keybinds will do the right thing.
yeah, pretty much that
I started using vim to avoid modifier keys, since it hurt my hand to press them. It does moderaly poorly at that, beating everything else by a mile
vscode or an IDE will get you a lot more stuff that you use more often, with less effort
and will still have vim emulation (including macros)
the more elaborate vim things do tend to be missing from these emulations
yeah
:norm not being in VSCvim has been an issue exactly twice for me
yeah, that's the thing, the emulators usually get the stuff you use 99% of the time anyway
to be fair, most of the core editing stuff have decent mnemonics
the remaining 1% just doesn't really matter
we aren't talking about those though
those we all agree are useful
but those are the main things you would use in a macro/keybind 
it's a lot nicer to get feedback while you're doing stuff
compared to a macro where it just pukes out the whole command
a lot of the macro experience is: you want to do something on N lines. you record yourself doing it on the first.
Then you run it on the next n-1
and you see subtle mistakes
you undo, re-record
etc
in a lot of cases it takes longer then just doing the thing manually
but in vscode, you can literally create N vim cursors, and use vim commands to edit all N lines simultaneously. And see what you're doing step by step.
It's just a vastly better experience.
maybe I've just gotten used to the editing stuff where I know how generic I need to be for an edit to be generic enough
stuff like avoiding relative movements a lot of the time, going right 4 times on this row might really be "go to the next )"
sure, but you must admit that's easier to do when you can see what you're doing
i have no trouble believing you've adapted to it
when I record my macro I can see what I'm doing, but sure I get that seeing the action applied on multiple lines as you go can be quite useful
iirc kakoune (and maybe also helix?) tries to make that flow be possible
but my muscle memory ends up fighting the new patterns in these editors that are subtly backwards vs vim at times π₯΄
for sure, I mean, if it works for you, you've been doing it a long time, it would be silly to force yourself to switch. I just think you gotta be realistic that for someone who hasn't yet acquired that... it's probably not worth it when they can just use multiple cursors and have everything be dead simple
π #editors-ides
#advent-of-vim
π
i didn't follow this conversation, but i use multiple cursors in vs code all the time
very useful. and easy to use. alt-shift click and drag. I also use macros in emacs. basically it records key strokes like "search for this text, then backspace 4 times, then add this new text" save macro, execute 400 times. Also very useful.
also alt+ctrl+up/down and or just spamming ctrl+d
i used to use emacs via spacemacs, then clion, now I'm trying to switch to vscode at work, I already use it at home. vscode with vscode vim and vspacecode is really nice
helix can probably provide a similar experience, never tried vscode vim though
e β¬ββ¬γ( ΒΊ _ ΒΊγ)
No more event status for AoC? π
event status?
where roles? :V
https://www.reddit.com/r/adventofcode/comments/18rros0/high_schooler_doing_aoc/
get a load of this π
I've read that earlier. Quite the journey
seems like just obvious trolling
dude's dedicated to the craft, kept it up in the comments too
Saying the parsing was harder than solving the problem throughout is kind of a giveaway
I understand different people can think different things are difficult but this opinion just fails basic plausibility for the later days of aoc
yeah it's probably trolling
this is his account details
I can give him some slack due to being grade 9: still young and maturing.
I'd lay better odds they're in their 20s, maybe 30s.
The comment I enjoyed was "I did all 25 solutions".
Posts 0 lines of code on the day of each puzzle or in fact ever. Claims to have done 25 solutions. Misses how many puzzles there actually were.
Low effort troll. I'm not going to reply to them. π
also in 25 diff languages.
Real programmers used 49. π

