diff --git a/2024/d14/ex1/ex1.py b/2024/d14/ex1/ex1.py deleted file mode 100755 index 6ce4871..0000000 --- a/2024/d14/ex1/ex1.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python - -import dataclasses -import functools -import operator -import sys -from collections import Counter -from typing import NamedTuple - - -class Point(NamedTuple): - x: int - y: int - - -@dataclasses.dataclass -class Robot: - pos: Point - vel: Point - - def step(self, dims: Point, delta: int = 1) -> "Robot": - x, y = self.pos.x + self.vel.x * delta, self.pos.y + self.vel.y * delta - return Robot( - Point(x % dims.x, y % dims.y), - self.vel, - ) - - -def solve(input: str) -> int: - def parse_robot(input: str) -> Robot: - pos, vel = map(lambda s: s.split("=")[1], input.split(" ")) - return Robot( - Point(*map(int, pos.split(","))), - Point(*map(int, vel.split(","))), - ) - - def parse(input: list[str]) -> list[Robot]: - return [parse_robot(line) for line in input] - - def compute_safety(robots: list[Robot], dims: Point) -> int: - mid_x, mid_y = dims.x // 2, dims.y // 2 - counts: Counter[tuple[bool, bool]] = Counter() - for x, y in map(lambda robot: robot.pos, robots): - if x == mid_x or y == mid_y: - continue - counts[(x < mid_x, y < mid_y)] += 1 - return functools.reduce(operator.mul, counts.values()) - - robots = parse(input.splitlines()) - dims = Point(101, 103) - robots = [robot.step(dims, 100) for robot in robots] - return compute_safety(robots, dims) - - -def main() -> None: - input = sys.stdin.read() - print(solve(input)) - - -if __name__ == "__main__": - main() diff --git a/2024/d14/ex1/input b/2024/d14/ex1/input deleted file mode 100644 index 9b1465d..0000000 --- a/2024/d14/ex1/input +++ /dev/null @@ -1,500 +0,0 @@ -p=62,20 v=85,-14 -p=88,18 v=-70,97 -p=51,21 v=35,-22 -p=19,56 v=2,45 -p=93,11 v=-87,26 -p=90,67 v=44,-13 -p=99,34 v=82,57 -p=55,42 v=82,22 -p=61,22 v=-24,-95 -p=100,7 v=18,-29 -p=92,56 v=-56,66 -p=66,15 v=-6,77 -p=62,21 v=68,39 -p=8,80 v=-72,-90 -p=33,40 v=89,-46 -p=28,10 v=-4,-64 -p=4,78 v=-55,1 -p=87,23 v=-32,-10 -p=1,76 v=85,6 -p=15,51 v=-35,-75 -p=58,98 v=-41,80 -p=34,17 v=-25,-47 -p=66,81 v=23,50 -p=48,97 v=-53,88 -p=99,69 v=-97,83 -p=25,23 v=-38,31 -p=16,54 v=91,37 -p=12,65 v=-85,-41 -p=13,62 v=51,64 -p=54,16 v=-91,-30 -p=99,92 v=34,30 -p=44,21 v=-50,-9 -p=0,55 v=15,-46 -p=68,23 v=-53,-51 -p=29,51 v=24,-55 -p=42,10 v=-98,28 -p=76,50 v=-55,-54 -p=83,24 v=65,-70 -p=13,15 v=-85,64 -p=2,53 v=-43,-59 -p=8,88 v=-24,34 -p=100,50 v=33,-20 -p=24,83 v=17,54 -p=18,71 v=52,38 -p=93,21 v=-33,-18 -p=8,78 v=-19,-7 -p=23,31 v=61,-46 -p=76,60 v=47,46 -p=51,26 v=-53,32 -p=32,54 v=-76,33 -p=66,65 v=-42,62 -p=19,3 v=78,-23 -p=96,46 v=88,-76 -p=53,44 v=12,-13 -p=64,56 v=-30,64 -p=41,52 v=35,-24 -p=49,9 v=-28,35 -p=77,18 v=9,-43 -p=57,3 v=97,-97 -p=81,57 v=-23,27 -p=13,73 v=-22,-90 -p=97,76 v=-46,-49 -p=63,43 v=-80,99 -p=90,96 v=-37,-92 -p=89,33 v=82,-42 -p=79,64 v=-19,-58 -p=64,65 v=59,-90 -p=84,54 v=17,24 -p=95,42 v=18,-13 -p=90,43 v=-36,-62 -p=83,2 v=32,-97 -p=34,69 v=-38,-78 -p=91,17 v=18,31 -p=42,82 v=74,-94 -p=1,33 v=-72,-42 -p=97,82 v=-20,-94 -p=83,83 v=-23,40 -p=56,22 v=85,-22 -p=50,42 v=25,-70 -p=32,1 v=88,-60 -p=63,71 v=-3,-33 -p=49,85 v=-67,59 -p=18,8 v=-23,39 -p=24,60 v=-76,-87 -p=34,100 v=-88,-85 -p=84,84 v=44,79 -p=16,101 v=53,-64 -p=44,33 v=88,-25 -p=52,22 v=-43,-35 -p=30,63 v=-23,-86 -p=14,40 v=65,-50 -p=56,98 v=-41,88 -p=42,11 v=-14,-72 -p=72,9 v=-4,-72 -p=26,71 v=-47,-62 -p=92,18 v=-71,15 -p=81,40 v=59,7 -p=79,69 v=16,64 -p=4,40 v=24,-83 -p=17,78 v=65,-32 -p=87,85 v=81,-36 -p=98,27 v=42,42 -p=100,55 v=72,95 -p=94,12 v=-80,61 -p=73,34 v=96,-38 -p=32,30 v=-63,-38 -p=45,37 v=-27,-75 -p=6,0 v=-72,-68 -p=24,58 v=39,41 -p=25,74 v=-26,-15 -p=99,82 v=80,64 -p=88,54 v=-94,-21 -p=100,81 v=29,-28 -p=84,87 v=56,6 -p=71,17 v=-95,-96 -p=37,89 v=-9,-18 -p=42,30 v=-78,-59 -p=92,17 v=-68,14 -p=31,55 v=88,66 -p=28,10 v=-13,-62 -p=30,30 v=29,60 -p=89,80 v=8,-42 -p=23,75 v=41,-44 -p=65,78 v=-55,42 -p=1,80 v=-9,19 -p=54,78 v=36,83 -p=10,40 v=66,-95 -p=67,71 v=8,58 -p=23,17 v=12,69 -p=36,70 v=76,21 -p=7,63 v=-60,-65 -p=39,96 v=87,41 -p=8,56 v=-34,-90 -p=64,66 v=9,79 -p=2,61 v=4,17 -p=64,51 v=28,-6 -p=91,25 v=-41,69 -p=92,3 v=-85,47 -p=61,41 v=-90,57 -p=86,61 v=-69,70 -p=82,45 v=7,-13 -p=23,39 v=-78,-40 -p=58,3 v=-30,15 -p=87,30 v=87,-25 -p=21,84 v=39,34 -p=36,26 v=89,-59 -p=90,51 v=-83,-91 -p=5,39 v=79,-87 -p=5,63 v=66,-74 -p=71,45 v=21,-21 -p=49,40 v=-68,-66 -p=68,93 v=96,96 -p=67,96 v=46,51 -p=72,44 v=-32,82 -p=15,90 v=15,2 -p=26,78 v=28,-44 -p=7,3 v=-87,-39 -p=74,101 v=94,-76 -p=90,20 v=-6,-46 -p=22,17 v=-68,-63 -p=12,81 v=-37,14 -p=37,84 v=-15,22 -p=75,31 v=83,-63 -p=48,2 v=-90,-27 -p=44,94 v=-63,31 -p=73,71 v=-50,22 -p=22,101 v=39,51 -p=49,94 v=-90,26 -p=93,67 v=5,-12 -p=57,83 v=-68,80 -p=86,82 v=44,-32 -p=3,64 v=87,-62 -p=43,87 v=-20,-57 -p=40,18 v=-8,-56 -p=80,46 v=-89,57 -p=79,26 v=-18,27 -p=3,27 v=-98,77 -p=99,44 v=42,-99 -p=25,27 v=-72,23 -p=98,24 v=43,85 -p=54,93 v=-28,-60 -p=29,4 v=86,80 -p=42,96 v=-75,14 -p=75,77 v=54,81 -p=96,63 v=-46,-33 -p=51,94 v=88,-69 -p=31,88 v=51,39 -p=75,15 v=-43,-84 -p=8,18 v=93,63 -p=20,65 v=99,30 -p=71,5 v=72,-98 -p=31,95 v=63,-19 -p=87,70 v=-68,71 -p=11,55 v=15,37 -p=63,36 v=10,36 -p=41,98 v=37,10 -p=27,78 v=26,-36 -p=53,93 v=30,18 -p=78,25 v=-58,-80 -p=21,100 v=-73,66 -p=36,33 v=25,11 -p=65,3 v=-92,-68 -p=46,22 v=-64,48 -p=49,87 v=-91,38 -p=82,37 v=6,16 -p=24,94 v=-30,-3 -p=14,94 v=94,37 -p=28,32 v=39,-1 -p=35,19 v=-68,-25 -p=3,51 v=-47,70 -p=12,6 v=-29,-28 -p=28,19 v=15,2 -p=75,45 v=95,-67 -p=76,4 v=7,-93 -p=45,29 v=-63,-37 -p=41,22 v=-64,93 -p=67,45 v=10,-36 -p=51,1 v=21,-74 -p=25,84 v=1,-81 -p=15,36 v=-47,-29 -p=44,98 v=24,-81 -p=79,30 v=45,94 -p=45,57 v=12,-57 -p=12,23 v=65,78 -p=65,76 v=-68,17 -p=100,100 v=79,23 -p=75,22 v=58,-84 -p=82,65 v=69,-74 -p=76,6 v=-61,-61 -p=61,38 v=27,53 -p=68,94 v=86,37 -p=64,71 v=6,-88 -p=21,93 v=-53,-65 -p=32,86 v=64,-98 -p=11,11 v=-95,-95 -p=36,32 v=-38,65 -p=23,95 v=91,-65 -p=31,33 v=12,-34 -p=12,5 v=-99,-72 -p=50,3 v=-91,-93 -p=74,66 v=33,13 -p=22,7 v=-12,-97 -p=11,6 v=41,-43 -p=14,16 v=-21,60 -p=95,76 v=81,-61 -p=3,55 v=79,99 -p=43,97 v=-1,-60 -p=73,66 v=31,-33 -p=60,33 v=73,-57 -p=63,57 v=71,-95 -p=86,11 v=-20,-80 -p=50,28 v=86,-34 -p=66,5 v=-80,45 -p=96,87 v=67,6 -p=52,16 v=-53,40 -p=31,31 v=38,32 -p=96,23 v=-34,-72 -p=46,64 v=-91,45 -p=14,19 v=-73,60 -p=31,85 v=12,-32 -p=19,36 v=-36,-46 -p=39,21 v=-52,15 -p=98,34 v=-10,81 -p=96,65 v=-9,1 -p=97,75 v=-21,34 -p=22,0 v=64,2 -p=8,15 v=-24,36 -p=67,1 v=61,-89 -p=64,76 v=70,34 -p=22,29 v=-74,-54 -p=73,48 v=-41,-75 -p=83,7 v=-82,-72 -p=57,6 v=-66,-93 -p=31,21 v=-50,81 -p=90,21 v=-56,-35 -p=79,73 v=54,77 -p=62,64 v=60,29 -p=51,70 v=-96,-6 -p=35,71 v=75,-33 -p=9,56 v=53,-58 -p=63,48 v=-94,49 -p=61,72 v=82,55 -p=51,79 v=-66,5 -p=2,62 v=46,-46 -p=56,2 v=10,-64 -p=42,74 v=-64,75 -p=0,83 v=17,-61 -p=3,59 v=-97,33 -p=40,82 v=-15,47 -p=89,8 v=94,19 -p=76,26 v=-95,-23 -p=4,86 v=79,76 -p=4,32 v=-77,31 -p=35,38 v=-9,-59 -p=78,87 v=72,-57 -p=72,72 v=-72,67 -p=94,33 v=-2,-93 -p=59,96 v=37,-19 -p=90,24 v=-83,-1 -p=88,61 v=69,50 -p=67,28 v=35,-66 -p=40,63 v=75,29 -p=84,27 v=-42,-91 -p=40,21 v=-31,-30 -p=1,50 v=-34,-95 -p=87,59 v=96,-94 -p=36,19 v=-78,-68 -p=5,43 v=-78,91 -p=27,49 v=91,-99 -p=61,85 v=11,14 -p=89,61 v=-83,-97 -p=31,78 v=-86,81 -p=76,69 v=33,-82 -p=74,28 v=-43,-71 -p=23,27 v=-35,86 -p=80,74 v=-33,-86 -p=99,10 v=43,-10 -p=59,55 v=-41,-95 -p=89,94 v=58,43 -p=72,87 v=7,67 -p=68,73 v=-29,-57 -p=1,46 v=80,41 -p=45,33 v=36,-38 -p=24,4 v=46,21 -p=18,94 v=-35,5 -p=82,45 v=53,74 -p=93,75 v=-83,-86 -p=14,3 v=51,-80 -p=74,30 v=-30,-96 -p=70,38 v=-29,-34 -p=55,76 v=-94,-13 -p=11,82 v=-10,38 -p=11,55 v=-35,-4 -p=93,76 v=6,-57 -p=17,57 v=-80,-42 -p=47,82 v=18,94 -p=84,70 v=-84,1 -p=48,94 v=-90,6 -p=95,41 v=-51,57 -p=18,53 v=55,-84 -p=100,20 v=-20,-56 -p=49,26 v=-17,34 -p=31,62 v=92,-86 -p=69,2 v=-81,82 -p=76,43 v=-71,97 -p=23,15 v=-62,97 -p=26,23 v=-87,40 -p=67,48 v=34,16 -p=64,11 v=-54,85 -p=85,58 v=8,-49 -p=80,25 v=57,-6 -p=45,35 v=49,-9 -p=96,65 v=-20,-25 -p=91,49 v=68,16 -p=8,62 v=29,33 -p=97,50 v=69,-85 -p=52,53 v=-2,70 -p=70,68 v=44,83 -p=65,7 v=-17,39 -p=45,14 v=-87,-34 -p=94,47 v=-93,-46 -p=29,84 v=70,11 -p=70,73 v=-23,-6 -p=100,51 v=45,18 -p=21,2 v=-13,-19 -p=67,32 v=-95,-82 -p=61,2 v=-54,64 -p=17,12 v=65,35 -p=67,54 v=-74,-89 -p=2,6 v=5,-92 -p=26,77 v=-12,-28 -p=39,77 v=12,-86 -p=70,57 v=84,-83 -p=8,88 v=-60,13 -p=19,37 v=-38,-89 -p=0,14 v=6,-2 -p=24,59 v=-24,-82 -p=5,13 v=-11,-47 -p=21,27 v=88,23 -p=89,75 v=-20,83 -p=68,66 v=19,1 -p=34,72 v=-74,25 -p=27,70 v=14,-90 -p=89,9 v=-44,2 -p=5,67 v=-61,-36 -p=52,13 v=-53,-84 -p=50,21 v=-90,-9 -p=21,16 v=2,64 -p=69,21 v=-18,-88 -p=64,85 v=-80,34 -p=31,70 v=50,95 -p=15,8 v=-23,52 -p=97,52 v=28,41 -p=85,6 v=8,-15 -p=9,33 v=-74,52 -p=46,59 v=90,96 -p=71,50 v=-93,98 -p=15,74 v=-24,-82 -p=54,87 v=-15,-36 -p=37,25 v=-15,7 -p=92,13 v=86,78 -p=90,14 v=20,-68 -p=68,37 v=-5,4 -p=58,56 v=48,-99 -p=27,16 v=-36,-32 -p=4,49 v=-58,65 -p=5,50 v=-60,98 -p=13,31 v=-48,-91 -p=58,75 v=46,8 -p=66,88 v=-6,-98 -p=95,16 v=32,23 -p=86,21 v=-57,-55 -p=19,65 v=-32,-98 -p=83,57 v=-46,-95 -p=37,10 v=38,64 -p=87,33 v=46,8 -p=45,54 v=-53,-58 -p=35,95 v=-39,-7 -p=89,65 v=58,-45 -p=82,80 v=-82,-65 -p=35,7 v=25,76 -p=66,92 v=-16,-44 -p=75,89 v=-92,66 -p=48,84 v=98,42 -p=70,84 v=-30,-44 -p=49,51 v=-92,28 -p=27,85 v=62,-36 -p=31,21 v=3,-64 -p=61,101 v=-15,88 -p=56,44 v=90,68 -p=83,49 v=-95,-83 -p=69,38 v=8,-92 -p=34,13 v=-32,43 -p=0,51 v=-75,25 -p=39,36 v=76,69 -p=66,59 v=70,-96 -p=78,42 v=-31,-62 -p=5,5 v=-33,-22 -p=54,74 v=-12,44 -p=25,26 v=25,85 -p=74,88 v=-39,56 -p=65,83 v=33,-28 -p=87,90 v=95,30 -p=71,20 v=-29,93 -p=66,9 v=83,-96 -p=38,51 v=50,41 -p=66,87 v=44,46 -p=30,31 v=-49,-14 -p=70,32 v=73,28 -p=0,94 v=95,26 -p=87,80 v=-83,46 -p=92,70 v=-58,99 -p=48,67 v=-1,41 -p=43,74 v=49,34 -p=87,51 v=43,8 -p=23,63 v=39,-86 -p=2,77 v=48,7 -p=32,60 v=-63,-37 -p=99,3 v=-21,31 -p=82,55 v=57,8 -p=5,68 v=-46,-41 -p=32,77 v=-38,88 -p=84,0 v=6,-64 -p=20,95 v=52,26 -p=29,98 v=-16,83 -p=44,81 v=-27,-73 -p=43,40 v=-41,-42 -p=24,73 v=-88,-49 -p=99,45 v=-97,8 -p=37,9 v=-31,-57 -p=70,11 v=8,-39 -p=0,11 v=96,57 -p=83,70 v=70,75 -p=65,71 v=-40,-65 -p=82,66 v=73,-80 -p=31,41 v=52,-96 -p=19,72 v=65,75 -p=24,4 v=-86,54 -p=75,85 v=85,30 -p=2,83 v=17,-7 -p=9,87 v=-22,59 -p=24,3 v=-12,21 -p=5,74 v=-34,46 -p=22,90 v=-37,-11 -p=20,84 v=4,95 -p=95,10 v=-96,-55 -p=52,9 v=23,-14 -p=20,51 v=-63,-75 -p=64,27 v=24,48 -p=50,2 v=-90,-68 -p=54,47 v=23,70 -p=26,22 v=51,-51 -p=4,49 v=-72,-54 -p=53,47 v=2,-86 -p=21,29 v=-37,13 -p=37,70 v=38,-40 -p=6,41 v=43,-20 -p=88,23 v=-38,-68 -p=67,20 v=79,-71 -p=37,7 v=24,25 diff --git a/2024/d14/ex2/ex2.py b/2024/d14/ex2/ex2.py deleted file mode 100755 index 65fc259..0000000 --- a/2024/d14/ex2/ex2.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python - -import dataclasses -import functools -import itertools -import sys -from typing import Literal, NamedTuple - - -class Point(NamedTuple): - x: int - y: int - - -@dataclasses.dataclass -class Robot: - pos: Point - vel: Point - - def step(self, dims: Point, delta: int = 1) -> "Robot": - x, y = self.pos.x + self.vel.x * delta, self.pos.y + self.vel.y * delta - return Robot( - Point(x % dims.x, y % dims.y), - self.vel, - ) - - -def solve(input: str) -> int: - def parse_robot(input: str) -> Robot: - pos, vel = map(lambda s: s.split("=")[1], input.split(" ")) - return Robot( - Point(*map(int, pos.split(","))), - Point(*map(int, vel.split(","))), - ) - - def parse(input: list[str]) -> list[Robot]: - return [parse_robot(line) for line in input] - - def find_tree(robots: list[Robot], dims: Point) -> int: - def compute_positions(step: int) -> list[Point]: - return [robot.step(dims, step).pos for robot in robots] - - def compute_variance(values: list[int]) -> float: - avg = sum(values) / len(values) - variance = sum((n - avg) ** 2 for n in values) / len(values) - return variance - - def cluster_variance(step: int, dimension: Literal["x", "y"]) -> float: - return compute_variance( - [getattr(p, dimension) for p in compute_positions(step)] - ) - - # The tree should have robots clustered together in X and Y - cluster_x = min( - range(dims.x), - key=functools.partial(cluster_variance, dimension="x"), - ) - cluster_y = min( - range(dims.y), - key=functools.partial(cluster_variance, dimension="y"), - ) - - # And those clusers should repeat modulo each dimension - for i in itertools.count(cluster_x, step=dims.x): - if i % dims.y == cluster_y: - return i - assert False # Sanity check - - robots = parse(input.splitlines()) - dims = Point(101, 103) - return find_tree(robots, dims) - - -def main() -> None: - input = sys.stdin.read() - print(solve(input)) - - -if __name__ == "__main__": - main() diff --git a/2024/d14/ex2/input b/2024/d14/ex2/input deleted file mode 100644 index 9b1465d..0000000 --- a/2024/d14/ex2/input +++ /dev/null @@ -1,500 +0,0 @@ -p=62,20 v=85,-14 -p=88,18 v=-70,97 -p=51,21 v=35,-22 -p=19,56 v=2,45 -p=93,11 v=-87,26 -p=90,67 v=44,-13 -p=99,34 v=82,57 -p=55,42 v=82,22 -p=61,22 v=-24,-95 -p=100,7 v=18,-29 -p=92,56 v=-56,66 -p=66,15 v=-6,77 -p=62,21 v=68,39 -p=8,80 v=-72,-90 -p=33,40 v=89,-46 -p=28,10 v=-4,-64 -p=4,78 v=-55,1 -p=87,23 v=-32,-10 -p=1,76 v=85,6 -p=15,51 v=-35,-75 -p=58,98 v=-41,80 -p=34,17 v=-25,-47 -p=66,81 v=23,50 -p=48,97 v=-53,88 -p=99,69 v=-97,83 -p=25,23 v=-38,31 -p=16,54 v=91,37 -p=12,65 v=-85,-41 -p=13,62 v=51,64 -p=54,16 v=-91,-30 -p=99,92 v=34,30 -p=44,21 v=-50,-9 -p=0,55 v=15,-46 -p=68,23 v=-53,-51 -p=29,51 v=24,-55 -p=42,10 v=-98,28 -p=76,50 v=-55,-54 -p=83,24 v=65,-70 -p=13,15 v=-85,64 -p=2,53 v=-43,-59 -p=8,88 v=-24,34 -p=100,50 v=33,-20 -p=24,83 v=17,54 -p=18,71 v=52,38 -p=93,21 v=-33,-18 -p=8,78 v=-19,-7 -p=23,31 v=61,-46 -p=76,60 v=47,46 -p=51,26 v=-53,32 -p=32,54 v=-76,33 -p=66,65 v=-42,62 -p=19,3 v=78,-23 -p=96,46 v=88,-76 -p=53,44 v=12,-13 -p=64,56 v=-30,64 -p=41,52 v=35,-24 -p=49,9 v=-28,35 -p=77,18 v=9,-43 -p=57,3 v=97,-97 -p=81,57 v=-23,27 -p=13,73 v=-22,-90 -p=97,76 v=-46,-49 -p=63,43 v=-80,99 -p=90,96 v=-37,-92 -p=89,33 v=82,-42 -p=79,64 v=-19,-58 -p=64,65 v=59,-90 -p=84,54 v=17,24 -p=95,42 v=18,-13 -p=90,43 v=-36,-62 -p=83,2 v=32,-97 -p=34,69 v=-38,-78 -p=91,17 v=18,31 -p=42,82 v=74,-94 -p=1,33 v=-72,-42 -p=97,82 v=-20,-94 -p=83,83 v=-23,40 -p=56,22 v=85,-22 -p=50,42 v=25,-70 -p=32,1 v=88,-60 -p=63,71 v=-3,-33 -p=49,85 v=-67,59 -p=18,8 v=-23,39 -p=24,60 v=-76,-87 -p=34,100 v=-88,-85 -p=84,84 v=44,79 -p=16,101 v=53,-64 -p=44,33 v=88,-25 -p=52,22 v=-43,-35 -p=30,63 v=-23,-86 -p=14,40 v=65,-50 -p=56,98 v=-41,88 -p=42,11 v=-14,-72 -p=72,9 v=-4,-72 -p=26,71 v=-47,-62 -p=92,18 v=-71,15 -p=81,40 v=59,7 -p=79,69 v=16,64 -p=4,40 v=24,-83 -p=17,78 v=65,-32 -p=87,85 v=81,-36 -p=98,27 v=42,42 -p=100,55 v=72,95 -p=94,12 v=-80,61 -p=73,34 v=96,-38 -p=32,30 v=-63,-38 -p=45,37 v=-27,-75 -p=6,0 v=-72,-68 -p=24,58 v=39,41 -p=25,74 v=-26,-15 -p=99,82 v=80,64 -p=88,54 v=-94,-21 -p=100,81 v=29,-28 -p=84,87 v=56,6 -p=71,17 v=-95,-96 -p=37,89 v=-9,-18 -p=42,30 v=-78,-59 -p=92,17 v=-68,14 -p=31,55 v=88,66 -p=28,10 v=-13,-62 -p=30,30 v=29,60 -p=89,80 v=8,-42 -p=23,75 v=41,-44 -p=65,78 v=-55,42 -p=1,80 v=-9,19 -p=54,78 v=36,83 -p=10,40 v=66,-95 -p=67,71 v=8,58 -p=23,17 v=12,69 -p=36,70 v=76,21 -p=7,63 v=-60,-65 -p=39,96 v=87,41 -p=8,56 v=-34,-90 -p=64,66 v=9,79 -p=2,61 v=4,17 -p=64,51 v=28,-6 -p=91,25 v=-41,69 -p=92,3 v=-85,47 -p=61,41 v=-90,57 -p=86,61 v=-69,70 -p=82,45 v=7,-13 -p=23,39 v=-78,-40 -p=58,3 v=-30,15 -p=87,30 v=87,-25 -p=21,84 v=39,34 -p=36,26 v=89,-59 -p=90,51 v=-83,-91 -p=5,39 v=79,-87 -p=5,63 v=66,-74 -p=71,45 v=21,-21 -p=49,40 v=-68,-66 -p=68,93 v=96,96 -p=67,96 v=46,51 -p=72,44 v=-32,82 -p=15,90 v=15,2 -p=26,78 v=28,-44 -p=7,3 v=-87,-39 -p=74,101 v=94,-76 -p=90,20 v=-6,-46 -p=22,17 v=-68,-63 -p=12,81 v=-37,14 -p=37,84 v=-15,22 -p=75,31 v=83,-63 -p=48,2 v=-90,-27 -p=44,94 v=-63,31 -p=73,71 v=-50,22 -p=22,101 v=39,51 -p=49,94 v=-90,26 -p=93,67 v=5,-12 -p=57,83 v=-68,80 -p=86,82 v=44,-32 -p=3,64 v=87,-62 -p=43,87 v=-20,-57 -p=40,18 v=-8,-56 -p=80,46 v=-89,57 -p=79,26 v=-18,27 -p=3,27 v=-98,77 -p=99,44 v=42,-99 -p=25,27 v=-72,23 -p=98,24 v=43,85 -p=54,93 v=-28,-60 -p=29,4 v=86,80 -p=42,96 v=-75,14 -p=75,77 v=54,81 -p=96,63 v=-46,-33 -p=51,94 v=88,-69 -p=31,88 v=51,39 -p=75,15 v=-43,-84 -p=8,18 v=93,63 -p=20,65 v=99,30 -p=71,5 v=72,-98 -p=31,95 v=63,-19 -p=87,70 v=-68,71 -p=11,55 v=15,37 -p=63,36 v=10,36 -p=41,98 v=37,10 -p=27,78 v=26,-36 -p=53,93 v=30,18 -p=78,25 v=-58,-80 -p=21,100 v=-73,66 -p=36,33 v=25,11 -p=65,3 v=-92,-68 -p=46,22 v=-64,48 -p=49,87 v=-91,38 -p=82,37 v=6,16 -p=24,94 v=-30,-3 -p=14,94 v=94,37 -p=28,32 v=39,-1 -p=35,19 v=-68,-25 -p=3,51 v=-47,70 -p=12,6 v=-29,-28 -p=28,19 v=15,2 -p=75,45 v=95,-67 -p=76,4 v=7,-93 -p=45,29 v=-63,-37 -p=41,22 v=-64,93 -p=67,45 v=10,-36 -p=51,1 v=21,-74 -p=25,84 v=1,-81 -p=15,36 v=-47,-29 -p=44,98 v=24,-81 -p=79,30 v=45,94 -p=45,57 v=12,-57 -p=12,23 v=65,78 -p=65,76 v=-68,17 -p=100,100 v=79,23 -p=75,22 v=58,-84 -p=82,65 v=69,-74 -p=76,6 v=-61,-61 -p=61,38 v=27,53 -p=68,94 v=86,37 -p=64,71 v=6,-88 -p=21,93 v=-53,-65 -p=32,86 v=64,-98 -p=11,11 v=-95,-95 -p=36,32 v=-38,65 -p=23,95 v=91,-65 -p=31,33 v=12,-34 -p=12,5 v=-99,-72 -p=50,3 v=-91,-93 -p=74,66 v=33,13 -p=22,7 v=-12,-97 -p=11,6 v=41,-43 -p=14,16 v=-21,60 -p=95,76 v=81,-61 -p=3,55 v=79,99 -p=43,97 v=-1,-60 -p=73,66 v=31,-33 -p=60,33 v=73,-57 -p=63,57 v=71,-95 -p=86,11 v=-20,-80 -p=50,28 v=86,-34 -p=66,5 v=-80,45 -p=96,87 v=67,6 -p=52,16 v=-53,40 -p=31,31 v=38,32 -p=96,23 v=-34,-72 -p=46,64 v=-91,45 -p=14,19 v=-73,60 -p=31,85 v=12,-32 -p=19,36 v=-36,-46 -p=39,21 v=-52,15 -p=98,34 v=-10,81 -p=96,65 v=-9,1 -p=97,75 v=-21,34 -p=22,0 v=64,2 -p=8,15 v=-24,36 -p=67,1 v=61,-89 -p=64,76 v=70,34 -p=22,29 v=-74,-54 -p=73,48 v=-41,-75 -p=83,7 v=-82,-72 -p=57,6 v=-66,-93 -p=31,21 v=-50,81 -p=90,21 v=-56,-35 -p=79,73 v=54,77 -p=62,64 v=60,29 -p=51,70 v=-96,-6 -p=35,71 v=75,-33 -p=9,56 v=53,-58 -p=63,48 v=-94,49 -p=61,72 v=82,55 -p=51,79 v=-66,5 -p=2,62 v=46,-46 -p=56,2 v=10,-64 -p=42,74 v=-64,75 -p=0,83 v=17,-61 -p=3,59 v=-97,33 -p=40,82 v=-15,47 -p=89,8 v=94,19 -p=76,26 v=-95,-23 -p=4,86 v=79,76 -p=4,32 v=-77,31 -p=35,38 v=-9,-59 -p=78,87 v=72,-57 -p=72,72 v=-72,67 -p=94,33 v=-2,-93 -p=59,96 v=37,-19 -p=90,24 v=-83,-1 -p=88,61 v=69,50 -p=67,28 v=35,-66 -p=40,63 v=75,29 -p=84,27 v=-42,-91 -p=40,21 v=-31,-30 -p=1,50 v=-34,-95 -p=87,59 v=96,-94 -p=36,19 v=-78,-68 -p=5,43 v=-78,91 -p=27,49 v=91,-99 -p=61,85 v=11,14 -p=89,61 v=-83,-97 -p=31,78 v=-86,81 -p=76,69 v=33,-82 -p=74,28 v=-43,-71 -p=23,27 v=-35,86 -p=80,74 v=-33,-86 -p=99,10 v=43,-10 -p=59,55 v=-41,-95 -p=89,94 v=58,43 -p=72,87 v=7,67 -p=68,73 v=-29,-57 -p=1,46 v=80,41 -p=45,33 v=36,-38 -p=24,4 v=46,21 -p=18,94 v=-35,5 -p=82,45 v=53,74 -p=93,75 v=-83,-86 -p=14,3 v=51,-80 -p=74,30 v=-30,-96 -p=70,38 v=-29,-34 -p=55,76 v=-94,-13 -p=11,82 v=-10,38 -p=11,55 v=-35,-4 -p=93,76 v=6,-57 -p=17,57 v=-80,-42 -p=47,82 v=18,94 -p=84,70 v=-84,1 -p=48,94 v=-90,6 -p=95,41 v=-51,57 -p=18,53 v=55,-84 -p=100,20 v=-20,-56 -p=49,26 v=-17,34 -p=31,62 v=92,-86 -p=69,2 v=-81,82 -p=76,43 v=-71,97 -p=23,15 v=-62,97 -p=26,23 v=-87,40 -p=67,48 v=34,16 -p=64,11 v=-54,85 -p=85,58 v=8,-49 -p=80,25 v=57,-6 -p=45,35 v=49,-9 -p=96,65 v=-20,-25 -p=91,49 v=68,16 -p=8,62 v=29,33 -p=97,50 v=69,-85 -p=52,53 v=-2,70 -p=70,68 v=44,83 -p=65,7 v=-17,39 -p=45,14 v=-87,-34 -p=94,47 v=-93,-46 -p=29,84 v=70,11 -p=70,73 v=-23,-6 -p=100,51 v=45,18 -p=21,2 v=-13,-19 -p=67,32 v=-95,-82 -p=61,2 v=-54,64 -p=17,12 v=65,35 -p=67,54 v=-74,-89 -p=2,6 v=5,-92 -p=26,77 v=-12,-28 -p=39,77 v=12,-86 -p=70,57 v=84,-83 -p=8,88 v=-60,13 -p=19,37 v=-38,-89 -p=0,14 v=6,-2 -p=24,59 v=-24,-82 -p=5,13 v=-11,-47 -p=21,27 v=88,23 -p=89,75 v=-20,83 -p=68,66 v=19,1 -p=34,72 v=-74,25 -p=27,70 v=14,-90 -p=89,9 v=-44,2 -p=5,67 v=-61,-36 -p=52,13 v=-53,-84 -p=50,21 v=-90,-9 -p=21,16 v=2,64 -p=69,21 v=-18,-88 -p=64,85 v=-80,34 -p=31,70 v=50,95 -p=15,8 v=-23,52 -p=97,52 v=28,41 -p=85,6 v=8,-15 -p=9,33 v=-74,52 -p=46,59 v=90,96 -p=71,50 v=-93,98 -p=15,74 v=-24,-82 -p=54,87 v=-15,-36 -p=37,25 v=-15,7 -p=92,13 v=86,78 -p=90,14 v=20,-68 -p=68,37 v=-5,4 -p=58,56 v=48,-99 -p=27,16 v=-36,-32 -p=4,49 v=-58,65 -p=5,50 v=-60,98 -p=13,31 v=-48,-91 -p=58,75 v=46,8 -p=66,88 v=-6,-98 -p=95,16 v=32,23 -p=86,21 v=-57,-55 -p=19,65 v=-32,-98 -p=83,57 v=-46,-95 -p=37,10 v=38,64 -p=87,33 v=46,8 -p=45,54 v=-53,-58 -p=35,95 v=-39,-7 -p=89,65 v=58,-45 -p=82,80 v=-82,-65 -p=35,7 v=25,76 -p=66,92 v=-16,-44 -p=75,89 v=-92,66 -p=48,84 v=98,42 -p=70,84 v=-30,-44 -p=49,51 v=-92,28 -p=27,85 v=62,-36 -p=31,21 v=3,-64 -p=61,101 v=-15,88 -p=56,44 v=90,68 -p=83,49 v=-95,-83 -p=69,38 v=8,-92 -p=34,13 v=-32,43 -p=0,51 v=-75,25 -p=39,36 v=76,69 -p=66,59 v=70,-96 -p=78,42 v=-31,-62 -p=5,5 v=-33,-22 -p=54,74 v=-12,44 -p=25,26 v=25,85 -p=74,88 v=-39,56 -p=65,83 v=33,-28 -p=87,90 v=95,30 -p=71,20 v=-29,93 -p=66,9 v=83,-96 -p=38,51 v=50,41 -p=66,87 v=44,46 -p=30,31 v=-49,-14 -p=70,32 v=73,28 -p=0,94 v=95,26 -p=87,80 v=-83,46 -p=92,70 v=-58,99 -p=48,67 v=-1,41 -p=43,74 v=49,34 -p=87,51 v=43,8 -p=23,63 v=39,-86 -p=2,77 v=48,7 -p=32,60 v=-63,-37 -p=99,3 v=-21,31 -p=82,55 v=57,8 -p=5,68 v=-46,-41 -p=32,77 v=-38,88 -p=84,0 v=6,-64 -p=20,95 v=52,26 -p=29,98 v=-16,83 -p=44,81 v=-27,-73 -p=43,40 v=-41,-42 -p=24,73 v=-88,-49 -p=99,45 v=-97,8 -p=37,9 v=-31,-57 -p=70,11 v=8,-39 -p=0,11 v=96,57 -p=83,70 v=70,75 -p=65,71 v=-40,-65 -p=82,66 v=73,-80 -p=31,41 v=52,-96 -p=19,72 v=65,75 -p=24,4 v=-86,54 -p=75,85 v=85,30 -p=2,83 v=17,-7 -p=9,87 v=-22,59 -p=24,3 v=-12,21 -p=5,74 v=-34,46 -p=22,90 v=-37,-11 -p=20,84 v=4,95 -p=95,10 v=-96,-55 -p=52,9 v=23,-14 -p=20,51 v=-63,-75 -p=64,27 v=24,48 -p=50,2 v=-90,-68 -p=54,47 v=23,70 -p=26,22 v=51,-51 -p=4,49 v=-72,-54 -p=53,47 v=2,-86 -p=21,29 v=-37,13 -p=37,70 v=38,-40 -p=6,41 v=43,-20 -p=88,23 v=-38,-68 -p=67,20 v=79,-71 -p=37,7 v=24,25