Compare commits
4 commits
8c054af2e7
...
8ce97fe1ff
Author | SHA1 | Date | |
---|---|---|---|
Bruno BELANYI | 8ce97fe1ff | ||
Bruno BELANYI | 6ce4f486b7 | ||
Bruno BELANYI | 6b3a2560fc | ||
Bruno BELANYI | 310e4e41bc |
61
2024/d14/ex1/ex1.py
Executable file
61
2024/d14/ex1/ex1.py
Executable file
|
@ -0,0 +1,61 @@
|
|||
#!/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()
|
500
2024/d14/ex1/input
Normal file
500
2024/d14/ex1/input
Normal file
|
@ -0,0 +1,500 @@
|
|||
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
|
80
2024/d14/ex2/ex2.py
Executable file
80
2024/d14/ex2/ex2.py
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/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()
|
500
2024/d14/ex2/input
Normal file
500
2024/d14/ex2/input
Normal file
|
@ -0,0 +1,500 @@
|
|||
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
|
Loading…
Reference in a new issue