diff options
author | Jack Sangdahl <[email protected]> | 2024-12-14 01:16:31 -0700 |
---|---|---|
committer | Jack Sangdahl <[email protected]> | 2024-12-14 01:16:31 -0700 |
commit | 37fded32814b534200f6c6c8c984ad0bed7253a2 (patch) | |
tree | 92b57e93e6a80586a9a5f41442eeaf531d61b783 | |
parent | ed2f696cf2cdf92763c45fedea9c0fc9052818c8 (diff) | |
download | aoc-37fded32814b534200f6c6c8c984ad0bed7253a2.tar.gz aoc-37fded32814b534200f6c6c8c984ad0bed7253a2.zip |
Day 14 2024
-rw-r--r-- | 14_2024.py | 73 | ||||
-rw-r--r-- | data/14_2024.txt | 500 |
2 files changed, 573 insertions, 0 deletions
diff --git a/14_2024.py b/14_2024.py new file mode 100644 index 0000000..a1c36e5 --- /dev/null +++ b/14_2024.py @@ -0,0 +1,73 @@ +import re +from collections import deque + +input = "data/14_2024.txt" +data = open(input).read().strip() +x, y, robots = 101, 103, [] +q1, q2, q3, q4 = 0, 0, 0, 0 +dirs = [(-1, 0), (0, 1), (1, 0), (0, -1)] + + +def ints(s): + return [int(x) for x in re.findall("-?\d+", s)] + + +for line in data.split("\n"): + px, py, vx, vy = ints(line) + robots.append((px, py, vx, vy)) + + +for t in range(1, 10**6): + g = [["." for x in range(x)] for y in range(y)] + if t == 100: + q1 = 0 + q2 = 0 + q3 = 0 + q4 = 0 + mx = x // 2 + my = y // 2 + for i, (px, py, vx, vy) in enumerate(robots): + px += vx + py += vy + px %= x + py %= y + robots[i] = (px, py, vx, vy) + assert 0 <= px < x + assert 0 <= py < y + g[py][px] = "#" + + if t == 100: + if px < mx and py < my: + q1 += 1 + if px > mx and py < my: + q2 += 1 + if px < mx and py > my: + q3 += 1 + if px > mx and py > my: + q4 += 1 + if t == 100: + print(q1 * q2 * q3 * q4) + components = 0 + vis = set() + for x in range(x): + for y in range(y): + if g[y][x] == "#" and (x, y) not in vis: + sx, sy = x, y + components += 1 + q = deque([(sx, sy)]) + while q: + x2, y2 = q.popleft() + if (x2, y2) in vis: + continue + vis.add((x2, y2)) + for dx, dy in dirs: + xx, yy = x2 + dx, y2 + dy + if 0 <= xx < x and 0 <= yy < y and g[yy][xx] == "#": + q.append((xx, yy)) + if components <= 200: + print(t) + gstr = [] + for row in g: + gstr.append("".join(row)) + print("\n".join(gstr)) + break diff --git a/data/14_2024.txt b/data/14_2024.txt new file mode 100644 index 0000000..91fde94 --- /dev/null +++ b/data/14_2024.txt @@ -0,0 +1,500 @@ +p=58,88 v=-38,-20 +p=50,67 v=-42,-90 +p=54,63 v=60,46 +p=56,0 v=20,48 +p=23,40 v=-80,-95 +p=28,102 v=1,79 +p=26,72 v=-96,46 +p=38,22 v=-90,19 +p=80,29 v=38,80 +p=13,47 v=-67,-15 +p=7,74 v=62,-21 +p=61,102 v=65,-6 +p=72,57 v=-56,37 +p=96,60 v=-61,44 +p=68,31 v=20,-72 +p=65,6 v=-41,22 +p=48,8 v=-43,66 +p=69,15 v=-31,-17 +p=97,37 v=85,6 +p=10,26 v=49,5 +p=40,7 v=-89,-73 +p=48,99 v=31,-73 +p=57,34 v=64,35 +p=2,34 v=90,24 +p=28,81 v=-95,92 +p=92,84 v=5,47 +p=67,32 v=-29,-21 +p=47,83 v=-4,96 +p=33,98 v=44,-68 +p=39,70 v=-93,67 +p=81,14 v=29,91 +p=69,42 v=-72,-43 +p=58,96 v=6,-73 +p=31,60 v=-17,41 +p=73,79 v=-22,72 +p=83,72 v=18,-27 +p=64,21 v=-84,81 +p=14,2 v=35,-22 +p=91,27 v=5,73 +p=11,9 v=94,-68 +p=80,96 v=82,27 +p=24,97 v=47,-37 +p=55,84 v=-89,51 +p=70,89 v=90,91 +p=97,93 v=18,90 +p=51,1 v=-39,-86 +p=88,61 v=74,-93 +p=60,51 v=20,-25 +p=45,22 v=-36,45 +p=53,75 v=7,-5 +p=65,98 v=60,-83 +p=22,57 v=-81,11 +p=82,19 v=26,-71 +p=64,13 v=-83,94 +p=92,53 v=-20,72 +p=21,43 v=74,-77 +p=76,94 v=-96,-30 +p=42,52 v=-2,-7 +p=91,13 v=-69,-32 +p=6,1 v=84,-40 +p=87,38 v=-21,96 +p=62,13 v=66,17 +p=13,100 v=-56,94 +p=99,16 v=-22,-21 +p=2,55 v=8,66 +p=37,59 v=-93,-26 +p=67,78 v=-84,59 +p=85,37 v=77,-56 +p=5,86 v=45,82 +p=63,68 v=24,60 +p=89,16 v=30,45 +p=88,87 v=-21,15 +p=79,8 v=-18,27 +p=96,28 v=-20,-25 +p=13,19 v=-10,-25 +p=0,100 v=-23,-55 +p=24,7 v=95,-55 +p=46,37 v=57,-51 +p=18,67 v=-54,-46 +p=36,32 v=-51,6 +p=81,14 v=-26,17 +p=30,68 v=78,35 +p=31,5 v=-47,-37 +p=31,57 v=-22,83 +p=14,40 v=85,42 +p=96,74 v=86,-65 +p=89,102 v=57,-62 +p=99,3 v=83,79 +p=96,22 v=-76,-81 +p=32,34 v=-49,83 +p=3,7 v=85,17 +p=12,31 v=-12,-17 +p=2,26 v=33,40 +p=83,90 v=-32,-8 +p=47,1 v=59,-55 +p=9,84 v=-63,20 +p=80,39 v=37,-41 +p=94,40 v=-20,-38 +p=100,90 v=-69,-52 +p=81,30 v=66,-90 +p=40,20 v=5,-9 +p=13,102 v=89,43 +p=3,82 v=-64,79 +p=14,8 v=-57,70 +p=43,63 v=49,93 +p=92,31 v=6,-3 +p=89,51 v=32,3 +p=65,90 v=-27,59 +p=23,23 v=-45,-6 +p=89,69 v=18,-37 +p=7,16 v=89,-45 +p=47,59 v=-40,77 +p=31,14 v=-48,-58 +p=33,49 v=59,-46 +p=61,60 v=13,26 +p=69,78 v=13,-76 +p=8,70 v=-25,53 +p=0,75 v=32,45 +p=50,33 v=7,-97 +p=84,75 v=-99,-36 +p=4,41 v=-16,-27 +p=18,64 v=-75,-35 +p=86,36 v=20,-15 +p=49,64 v=-90,-98 +p=24,45 v=-95,-34 +p=61,30 v=-35,19 +p=19,30 v=-7,6 +p=53,26 v=-58,27 +p=20,31 v=43,-35 +p=50,55 v=-27,-84 +p=36,2 v=56,66 +p=85,93 v=-23,-42 +p=14,16 v=-6,22 +p=26,61 v=28,-3 +p=12,42 v=91,21 +p=32,63 v=8,-28 +p=60,75 v=-94,-16 +p=12,102 v=-16,27 +p=16,20 v=-15,-50 +p=65,77 v=-85,-34 +p=81,15 v=80,-99 +p=11,16 v=42,-81 +p=75,83 v=-36,-6 +p=47,44 v=26,-94 +p=22,60 v=98,85 +p=30,43 v=-5,37 +p=55,75 v=8,23 +p=49,92 v=-63,38 +p=67,94 v=-74,-6 +p=76,2 v=-71,40 +p=29,73 v=-34,63 +p=67,65 v=43,7 +p=72,87 v=72,-57 +p=19,50 v=-65,-4 +p=78,25 v=-90,97 +p=60,98 v=40,53 +p=71,83 v=20,-21 +p=23,28 v=-8,-71 +p=1,98 v=34,-29 +p=97,61 v=99,-27 +p=17,65 v=32,-28 +p=63,55 v=-42,93 +p=16,6 v=40,-99 +p=84,7 v=25,-86 +p=3,53 v=35,8 +p=78,27 v=-70,1 +p=41,91 v=33,-62 +p=28,14 v=-24,83 +p=21,94 v=42,-16 +p=100,74 v=-13,-49 +p=4,84 v=-13,-70 +p=36,57 v=-46,-90 +p=4,62 v=-86,52 +p=78,38 v=-77,-48 +p=22,69 v=-55,41 +p=59,61 v=31,-86 +p=2,52 v=-7,-54 +p=58,0 v=61,-78 +p=93,52 v=58,75 +p=30,64 v=-50,31 +p=97,54 v=-5,63 +p=14,59 v=91,-36 +p=12,90 v=90,61 +p=76,102 v=-73,27 +p=32,26 v=53,-48 +p=42,20 v=2,-76 +p=94,31 v=-21,-12 +p=51,23 v=-39,-53 +p=37,0 v=52,-73 +p=55,82 v=-19,-1 +p=49,25 v=-40,-40 +p=99,79 v=-3,67 +p=91,70 v=-21,95 +p=80,22 v=-27,99 +p=3,1 v=-63,-32 +p=14,98 v=10,88 +p=89,25 v=-34,-57 +p=51,10 v=63,-29 +p=67,58 v=41,-61 +p=75,19 v=-29,-25 +p=51,58 v=12,-2 +p=64,23 v=-32,81 +p=99,48 v=19,81 +p=7,13 v=87,58 +p=22,43 v=-53,65 +p=29,39 v=47,78 +p=92,33 v=-18,-97 +p=59,15 v=75,68 +p=83,31 v=25,-12 +p=44,95 v=56,79 +p=85,74 v=-73,-39 +p=88,11 v=-25,4 +p=52,71 v=-40,-54 +p=79,70 v=81,-34 +p=1,16 v=37,94 +p=40,61 v=7,-59 +p=60,101 v=60,21 +p=25,40 v=-54,-61 +p=41,94 v=-47,-69 +p=99,96 v=-64,-78 +p=45,53 v=7,-15 +p=86,88 v=-7,16 +p=95,66 v=-19,31 +p=99,74 v=-71,-65 +p=90,74 v=-18,18 +p=64,58 v=15,62 +p=2,45 v=-12,73 +p=93,13 v=-12,55 +p=74,81 v=13,-5 +p=21,37 v=-7,-20 +p=10,95 v=-16,46 +p=65,22 v=-81,-22 +p=74,85 v=-37,-68 +p=36,55 v=54,-64 +p=35,64 v=6,44 +p=16,98 v=26,70 +p=15,46 v=-8,-10 +p=34,78 v=19,67 +p=93,34 v=6,-4 +p=27,8 v=-97,86 +p=87,33 v=80,-82 +p=20,32 v=32,59 +p=90,65 v=-21,31 +p=8,37 v=41,6 +p=69,83 v=16,-74 +p=42,93 v=-96,-55 +p=22,52 v=3,-51 +p=32,66 v=94,49 +p=100,72 v=64,-48 +p=63,17 v=60,-19 +p=75,61 v=-67,-38 +p=79,99 v=-12,4 +p=30,97 v=-99,-83 +p=35,6 v=-80,70 +p=44,79 v=-45,-34 +p=62,88 v=13,56 +p=64,20 v=-82,81 +p=20,88 v=45,-24 +p=49,49 v=-92,70 +p=62,80 v=-66,47 +p=49,28 v=88,-81 +p=14,62 v=42,31 +p=98,14 v=-64,4 +p=2,53 v=82,52 +p=40,77 v=-46,-93 +p=45,98 v=-92,-24 +p=78,13 v=-26,-14 +p=25,33 v=96,78 +p=47,95 v=-92,2 +p=59,26 v=-36,-30 +p=49,65 v=59,54 +p=63,3 v=-36,38 +p=37,8 v=-49,-58 +p=37,18 v=-44,27 +p=53,26 v=-39,37 +p=94,93 v=-19,30 +p=24,56 v=-11,-18 +p=21,2 v=-10,-59 +p=7,90 v=86,2 +p=36,34 v=-1,-84 +p=49,76 v=-40,15 +p=59,16 v=57,73 +p=55,26 v=62,-43 +p=56,44 v=13,39 +p=63,94 v=-78,28 +p=94,46 v=9,35 +p=87,102 v=89,-22 +p=0,1 v=47,-19 +p=20,101 v=47,-42 +p=84,59 v=77,54 +p=7,15 v=41,-94 +p=43,45 v=13,31 +p=51,29 v=68,-79 +p=24,59 v=97,-41 +p=41,28 v=63,27 +p=44,97 v=-1,-73 +p=12,20 v=-66,-7 +p=24,7 v=82,41 +p=18,10 v=-57,-71 +p=51,33 v=-51,71 +p=27,54 v=10,93 +p=1,65 v=-77,38 +p=20,0 v=88,-76 +p=24,70 v=23,54 +p=32,29 v=50,60 +p=48,69 v=-43,-62 +p=35,70 v=-13,-29 +p=6,54 v=-72,-50 +p=85,89 v=85,-44 +p=39,32 v=57,-25 +p=25,96 v=48,64 +p=44,55 v=6,44 +p=6,9 v=-2,-73 +p=8,42 v=-4,60 +p=22,100 v=-51,7 +p=26,85 v=-6,-3 +p=68,78 v=-59,76 +p=12,47 v=-58,57 +p=67,85 v=17,64 +p=96,73 v=76,-41 +p=19,14 v=-93,-34 +p=41,31 v=-38,6 +p=40,63 v=4,-36 +p=20,100 v=20,-59 +p=95,52 v=27,87 +p=10,10 v=61,-49 +p=25,49 v=47,66 +p=27,68 v=-55,49 +p=96,46 v=-66,65 +p=26,14 v=-55,-40 +p=90,22 v=18,56 +p=58,9 v=-61,-66 +p=78,9 v=-26,-22 +p=37,93 v=55,7 +p=86,80 v=-21,82 +p=48,97 v=-96,56 +p=17,77 v=-9,-44 +p=42,87 v=-94,-88 +p=99,97 v=-18,61 +p=4,92 v=-21,-83 +p=50,74 v=-42,80 +p=43,16 v=7,-17 +p=57,26 v=11,-89 +p=75,62 v=65,-72 +p=56,10 v=-90,-84 +p=9,12 v=-14,53 +p=63,1 v=12,79 +p=29,44 v=3,51 +p=55,6 v=-92,-53 +p=13,101 v=-50,-54 +p=0,70 v=-15,-18 +p=14,33 v=-37,33 +p=85,65 v=-69,21 +p=37,43 v=31,69 +p=100,91 v=-65,69 +p=1,9 v=-66,-50 +p=27,45 v=56,-23 +p=80,69 v=25,-23 +p=18,52 v=1,18 +p=57,96 v=-88,-73 +p=25,49 v=98,-2 +p=1,96 v=-58,92 +p=17,1 v=94,2 +p=55,81 v=-38,56 +p=35,32 v=54,65 +p=21,20 v=5,97 +p=94,59 v=-69,57 +p=11,99 v=-47,-74 +p=90,25 v=-87,65 +p=97,95 v=36,-42 +p=99,41 v=80,30 +p=82,18 v=-76,55 +p=8,67 v=40,23 +p=76,83 v=-27,87 +p=40,12 v=-89,30 +p=56,94 v=-96,-91 +p=76,66 v=19,-18 +p=31,55 v=4,75 +p=56,62 v=-36,-75 +p=17,3 v=-60,99 +p=84,27 v=72,58 +p=41,28 v=-75,51 +p=25,50 v=-61,-74 +p=100,0 v=90,91 +p=17,48 v=77,35 +p=5,6 v=-63,-91 +p=48,82 v=-88,18 +p=91,10 v=79,53 +p=65,2 v=75,-9 +p=44,65 v=-97,85 +p=91,19 v=73,58 +p=37,93 v=20,-88 +p=27,54 v=-53,29 +p=79,35 v=-78,11 +p=68,46 v=17,21 +p=81,47 v=72,6 +p=0,96 v=-68,-42 +p=94,30 v=39,6 +p=44,100 v=-43,33 +p=25,35 v=89,71 +p=88,7 v=-69,66 +p=97,91 v=-64,77 +p=53,14 v=-90,45 +p=36,73 v=-5,15 +p=11,2 v=-12,-24 +p=89,68 v=-29,72 +p=12,72 v=93,-26 +p=65,88 v=65,-52 +p=88,7 v=81,-32 +p=19,38 v=92,60 +p=31,80 v=50,-98 +p=33,44 v=-99,13 +p=41,50 v=-58,-55 +p=95,51 v=-33,-9 +p=64,42 v=-13,81 +p=73,48 v=22,70 +p=23,47 v=88,-84 +p=34,87 v=9,66 +p=70,5 v=83,50 +p=17,73 v=-65,54 +p=54,59 v=65,81 +p=25,62 v=-56,70 +p=78,102 v=31,-68 +p=3,31 v=-67,-97 +p=69,33 v=28,-19 +p=95,12 v=-78,-79 +p=36,2 v=-99,97 +p=32,1 v=-7,4 +p=49,88 v=-43,-21 +p=45,91 v=3,15 +p=18,87 v=-56,2 +p=89,11 v=-73,63 +p=17,80 v=-9,-25 +p=93,55 v=-48,-74 +p=82,69 v=-45,-99 +p=16,14 v=-60,-94 +p=14,7 v=88,66 +p=77,7 v=66,32 +p=1,72 v=-94,72 +p=66,23 v=62,89 +p=79,50 v=90,5 +p=11,99 v=-62,-73 +p=37,81 v=-48,5 +p=36,32 v=3,-56 +p=3,22 v=6,-29 +p=66,82 v=-91,5 +p=55,67 v=-42,15 +p=27,86 v=99,77 +p=46,38 v=-8,-60 +p=96,47 v=-15,65 +p=63,5 v=69,-1 +p=20,88 v=-57,-3 +p=30,84 v=50,87 +p=57,55 v=11,30 +p=6,55 v=88,13 +p=96,43 v=-42,-21 +p=14,64 v=-8,98 +p=68,86 v=68,33 +p=19,67 v=42,-31 +p=60,7 v=18,48 +p=61,96 v=-88,64 +p=78,85 v=-83,-73 +p=14,28 v=52,16 +p=82,78 v=-75,-93 +p=28,67 v=-50,-5 +p=10,68 v=-45,-76 +p=64,34 v=21,19 +p=44,29 v=87,-63 +p=36,14 v=3,50 +p=27,50 v=-51,60 +p=67,54 v=-82,93 +p=85,69 v=32,-72 +p=36,33 v=91,17 +p=63,92 v=17,25 +p=81,99 v=-47,51 +p=92,49 v=-44,27 +p=28,63 v=97,-34 +p=74,46 v=-2,58 +p=7,62 v=38,31 +p=73,25 v=-29,91 +p=32,80 v=-93,54 +p=77,93 v=29,47 +p=8,45 v=-19,-56 +p=68,35 v=56,-75 +p=27,46 v=-49,-12 +p=86,102 v=26,97 +p=74,63 v=-75,46 +p=3,32 v=88,60 +p=95,73 v=82,10 +p=51,59 v=-33,16 +p=52,77 v=-45,72 +p=69,77 v=77,-88 +p=59,81 v=-29,38 +p=65,12 v=23,97 +p=14,55 v=-9,-15 +p=2,35 v=7,-37 +p=27,47 v=84,-76 +p=84,45 v=74,65 +p=9,2 v=-11,-42 +p=76,14 v=25,-94 |