From 8c59c074f458eea8785fb8eeccf9d3630b46d7d6 Mon Sep 17 00:00:00 2001 From: MrBounty Date: Sun, 15 Dec 2024 12:57:26 +0100 Subject: [PATCH] Added day 14 --- day14/input | 500 ++++++++++++++++++++++++++++++++++++++++++++++++ day14/part1.zig | 70 +++++++ day14/part2.zig | 135 +++++++++++++ 3 files changed, 705 insertions(+) create mode 100644 day14/input create mode 100644 day14/part1.zig create mode 100644 day14/part2.zig diff --git a/day14/input b/day14/input new file mode 100644 index 0000000..850dcd8 --- /dev/null +++ b/day14/input @@ -0,0 +1,500 @@ +p=52,66 v=37,34 +p=0,87 v=41,-19 +p=92,102 v=-26,86 +p=7,12 v=-16,-17 +p=85,34 v=81,38 +p=80,28 v=88,-61 +p=25,20 v=27,92 +p=28,45 v=-80,66 +p=72,86 v=47,-85 +p=36,2 v=28,30 +p=36,29 v=28,69 +p=84,102 v=-26,86 +p=52,73 v=68,-91 +p=26,38 v=-68,-69 +p=54,100 v=65,-70 +p=99,77 v=-1,-42 +p=50,59 v=-94,87 +p=65,34 v=47,-96 +p=87,100 v=-78,86 +p=25,31 v=-62,7 +p=78,8 v=67,-69 +p=19,59 v=-28,9 +p=85,61 v=-17,84 +p=20,28 v=-25,13 +p=25,21 v=-68,-50 +p=34,30 v=9,32 +p=91,15 v=-4,45 +p=2,58 v=-60,56 +p=52,89 v=-21,-79 +p=59,11 v=-88,23 +p=64,45 v=-91,72 +p=42,102 v=-15,-92 +p=64,56 v=99,-36 +p=69,36 v=10,-15 +p=22,74 v=-74,-13 +p=74,32 v=-11,-15 +p=49,37 v=-9,-48 +p=31,55 v=70,-78 +p=15,75 v=-65,-38 +p=69,38 v=54,-69 +p=32,36 v=93,68 +p=36,96 v=67,23 +p=57,96 v=-82,-67 +p=6,88 v=48,30 +p=13,67 v=76,87 +p=32,34 v=-67,-87 +p=87,41 v=-57,11 +p=1,14 v=54,-99 +p=88,51 v=34,50 +p=73,80 v=38,56 +p=19,95 v=88,27 +p=80,71 v=-66,-82 +p=79,30 v=84,54 +p=24,22 v=91,-55 +p=56,27 v=-27,1 +p=69,80 v=4,46 +p=50,78 v=-85,84 +p=7,27 v=51,29 +p=71,78 v=47,96 +p=86,90 v=-23,58 +p=31,37 v=6,19 +p=47,31 v=-95,16 +p=33,91 v=-89,80 +p=36,64 v=-3,6 +p=80,50 v=-38,25 +p=54,84 v=28,21 +p=77,26 v=58,81 +p=43,43 v=68,56 +p=60,95 v=-48,71 +p=95,25 v=5,-57 +p=80,95 v=-45,78 +p=66,29 v=-20,82 +p=99,76 v=-7,-91 +p=81,31 v=-69,-88 +p=76,57 v=-75,94 +p=82,17 v=-66,-5 +p=86,13 v=-13,21 +p=12,94 v=-89,51 +p=21,30 v=61,72 +p=7,98 v=-35,-79 +p=64,92 v=-41,27 +p=16,54 v=-27,-53 +p=69,56 v=-35,-67 +p=51,84 v=-33,99 +p=87,98 v=78,64 +p=10,25 v=33,-75 +p=57,12 v=13,42 +p=9,98 v=-83,-23 +p=97,66 v=32,-75 +p=86,50 v=-29,22 +p=43,0 v=18,21 +p=90,23 v=29,-49 +p=18,63 v=77,-51 +p=61,58 v=-60,-44 +p=69,94 v=-94,33 +p=67,100 v=77,-8 +p=12,50 v=30,47 +p=57,96 v=-24,2 +p=60,95 v=25,-51 +p=9,4 v=3,-46 +p=4,22 v=94,60 +p=79,16 v=38,-93 +p=62,57 v=78,-72 +p=78,0 v=70,92 +p=7,91 v=-93,-25 +p=83,48 v=-57,34 +p=73,35 v=-51,-90 +p=5,32 v=94,-9 +p=89,36 v=-23,44 +p=36,33 v=-27,60 +p=90,98 v=-66,2 +p=81,9 v=93,58 +p=27,101 v=92,36 +p=72,39 v=96,-15 +p=48,75 v=-77,-52 +p=64,1 v=10,45 +p=31,75 v=-31,-99 +p=54,50 v=-92,-40 +p=82,78 v=23,46 +p=92,48 v=34,-65 +p=91,54 v=20,-84 +p=90,67 v=69,-88 +p=72,35 v=-60,-40 +p=18,76 v=55,-44 +p=25,101 v=-92,-73 +p=64,15 v=7,-77 +p=42,42 v=-67,66 +p=47,38 v=-95,44 +p=54,46 v=-45,-19 +p=25,0 v=37,-27 +p=0,55 v=23,-62 +p=41,66 v=43,-94 +p=58,89 v=-61,11 +p=41,90 v=-58,52 +p=29,83 v=-37,2 +p=50,45 v=16,6 +p=59,6 v=65,-83 +p=78,84 v=37,73 +p=2,24 v=-58,-46 +p=100,30 v=8,-96 +p=13,55 v=64,65 +p=84,83 v=78,-1 +p=16,46 v=79,38 +p=94,34 v=-1,75 +p=36,82 v=-58,-85 +p=4,52 v=25,-64 +p=31,101 v=49,5 +p=89,6 v=26,36 +p=46,97 v=58,-64 +p=65,5 v=74,55 +p=24,37 v=-25,41 +p=40,89 v=67,24 +p=84,5 v=29,-48 +p=26,94 v=81,98 +p=51,8 v=-21,-84 +p=10,82 v=-51,-32 +p=56,89 v=50,-6 +p=53,13 v=-58,68 +p=47,36 v=-73,85 +p=59,68 v=16,-60 +p=1,83 v=54,-63 +p=43,6 v=-67,-49 +p=2,68 v=51,9 +p=58,42 v=40,-75 +p=10,71 v=-22,-26 +p=17,79 v=-80,59 +p=28,12 v=24,-11 +p=1,100 v=26,84 +p=58,99 v=16,67 +p=54,8 v=-79,-92 +p=69,26 v=81,-58 +p=11,7 v=47,-41 +p=87,15 v=-99,26 +p=60,20 v=-40,-24 +p=71,92 v=3,37 +p=97,82 v=-41,40 +p=54,12 v=-30,-27 +p=32,17 v=61,82 +p=54,95 v=-38,-16 +p=42,26 v=-67,57 +p=22,45 v=73,69 +p=18,0 v=-22,-92 +p=70,39 v=19,95 +p=63,72 v=10,21 +p=26,88 v=24,46 +p=4,101 v=75,43 +p=31,31 v=30,-12 +p=71,10 v=43,-86 +p=68,42 v=-2,94 +p=90,76 v=-38,68 +p=71,76 v=63,-13 +p=35,76 v=-21,6 +p=95,28 v=35,-77 +p=22,7 v=-52,-8 +p=23,56 v=-8,69 +p=54,45 v=-76,-90 +p=56,64 v=-91,-75 +p=28,39 v=-41,77 +p=42,51 v=-12,19 +p=28,67 v=12,-44 +p=86,52 v=75,-84 +p=69,54 v=71,90 +p=42,70 v=-52,-25 +p=14,48 v=16,-96 +p=1,65 v=-26,-72 +p=80,34 v=-39,-6 +p=78,15 v=41,-33 +p=13,5 v=-7,64 +p=28,80 v=-40,18 +p=43,15 v=40,-8 +p=98,68 v=-6,82 +p=16,32 v=86,11 +p=66,56 v=65,75 +p=84,58 v=48,-33 +p=65,22 v=-63,-84 +p=93,52 v=-75,72 +p=17,23 v=-68,-74 +p=77,65 v=-8,-66 +p=61,37 v=-42,69 +p=86,8 v=66,-20 +p=4,7 v=-44,70 +p=15,82 v=9,-23 +p=67,95 v=-95,57 +p=5,24 v=69,4 +p=58,96 v=99,46 +p=38,21 v=50,56 +p=60,76 v=-64,74 +p=29,0 v=-55,-25 +p=24,13 v=65,71 +p=48,76 v=-67,37 +p=19,39 v=-62,29 +p=33,58 v=6,28 +p=29,38 v=-98,-68 +p=50,55 v=-55,65 +p=5,77 v=91,71 +p=99,38 v=-8,77 +p=58,47 v=16,44 +p=43,45 v=12,-31 +p=21,102 v=45,-20 +p=79,99 v=83,-46 +p=52,56 v=83,16 +p=56,27 v=74,-68 +p=17,20 v=82,-77 +p=62,8 v=13,95 +p=58,24 v=-48,-2 +p=86,68 v=-3,-37 +p=2,24 v=63,-8 +p=1,81 v=-41,-88 +p=15,40 v=-25,66 +p=77,97 v=-23,5 +p=48,4 v=34,42 +p=41,74 v=-3,-91 +p=90,53 v=44,-76 +p=50,42 v=-79,13 +p=77,67 v=17,-53 +p=69,3 v=-8,3 +p=89,60 v=-8,19 +p=15,93 v=54,-32 +p=11,24 v=36,63 +p=22,6 v=-52,79 +p=11,101 v=-80,-79 +p=79,87 v=-8,77 +p=46,97 v=13,61 +p=90,25 v=-45,7 +p=46,95 v=13,-23 +p=89,62 v=-72,-94 +p=32,100 v=-49,58 +p=58,30 v=68,-40 +p=97,28 v=11,37 +p=76,61 v=-88,-31 +p=6,45 v=-7,38 +p=79,34 v=-69,-90 +p=96,76 v=57,-29 +p=9,100 v=-7,55 +p=59,23 v=50,43 +p=19,7 v=33,-74 +p=45,43 v=86,66 +p=50,19 v=56,33 +p=28,65 v=-9,-89 +p=14,2 v=-74,-33 +p=91,98 v=-50,99 +p=93,80 v=94,-48 +p=55,81 v=-7,-20 +p=57,100 v=-30,-39 +p=62,76 v=68,-38 +p=15,20 v=-77,-90 +p=37,33 v=89,60 +p=18,101 v=-3,20 +p=56,65 v=71,-60 +p=26,26 v=-58,-99 +p=33,75 v=-49,-91 +p=10,71 v=-56,-34 +p=25,83 v=39,-6 +p=13,17 v=37,61 +p=98,95 v=2,80 +p=26,83 v=-49,-35 +p=9,27 v=-72,46 +p=27,73 v=-9,40 +p=71,5 v=-94,-89 +p=60,6 v=-21,30 +p=10,68 v=-82,-31 +p=87,45 v=-38,66 +p=55,46 v=-68,-93 +p=34,77 v=55,-63 +p=5,51 v=38,31 +p=3,65 v=94,-16 +p=70,24 v=-48,10 +p=89,78 v=-75,40 +p=32,39 v=3,66 +p=28,94 v=40,-36 +p=91,38 v=-35,66 +p=29,66 v=-94,-50 +p=90,80 v=63,74 +p=15,31 v=-95,78 +p=50,19 v=7,-71 +p=58,64 v=-5,68 +p=16,64 v=65,-35 +p=46,93 v=-59,-22 +p=65,5 v=53,-33 +p=10,83 v=84,47 +p=23,12 v=49,-76 +p=58,14 v=-36,-80 +p=49,4 v=28,17 +p=62,43 v=-39,56 +p=61,11 v=-36,-52 +p=60,72 v=71,87 +p=44,56 v=-85,-76 +p=37,88 v=-3,27 +p=10,35 v=-90,-18 +p=14,40 v=30,-34 +p=22,95 v=27,95 +p=32,92 v=-37,2 +p=54,3 v=-54,-82 +p=98,5 v=11,-24 +p=39,76 v=37,90 +p=69,15 v=47,45 +p=56,40 v=-79,13 +p=80,41 v=63,32 +p=11,85 v=-7,74 +p=24,45 v=46,-50 +p=98,49 v=-38,-81 +p=26,45 v=-26,-80 +p=2,87 v=60,6 +p=93,74 v=26,-16 +p=24,70 v=-28,-85 +p=59,21 v=-63,62 +p=44,74 v=-7,14 +p=75,94 v=47,-86 +p=84,16 v=6,41 +p=17,79 v=33,-44 +p=5,72 v=18,58 +p=96,11 v=8,17 +p=34,48 v=62,14 +p=17,36 v=-42,-64 +p=87,55 v=93,65 +p=84,1 v=75,52 +p=30,74 v=-5,-33 +p=34,22 v=-32,-91 +p=85,94 v=-51,17 +p=37,90 v=-9,55 +p=9,85 v=-58,-37 +p=58,30 v=-2,72 +p=90,55 v=-53,-78 +p=34,48 v=-8,-33 +p=76,62 v=13,18 +p=16,21 v=76,-99 +p=42,71 v=46,68 +p=95,9 v=-75,64 +p=63,99 v=62,-39 +p=73,97 v=68,92 +p=79,17 v=-17,-39 +p=16,54 v=27,90 +p=48,34 v=9,-49 +p=88,72 v=51,59 +p=94,24 v=62,-43 +p=93,37 v=22,24 +p=90,80 v=-23,15 +p=10,98 v=88,80 +p=60,9 v=65,64 +p=44,80 v=21,68 +p=32,3 v=-95,83 +p=83,13 v=78,1 +p=20,49 v=70,-94 +p=51,82 v=-30,71 +p=31,12 v=61,86 +p=67,51 v=4,3 +p=19,25 v=67,76 +p=96,6 v=-99,-11 +p=35,13 v=-98,-42 +p=89,13 v=-29,95 +p=73,73 v=-60,87 +p=50,4 v=77,98 +p=5,86 v=61,49 +p=14,56 v=-7,40 +p=97,4 v=8,-64 +p=19,67 v=-37,-47 +p=61,23 v=-88,60 +p=23,11 v=-59,11 +p=11,16 v=33,-9 +p=90,29 v=-12,75 +p=81,62 v=-9,51 +p=34,60 v=58,84 +p=46,16 v=58,67 +p=47,12 v=74,67 +p=33,50 v=-31,87 +p=76,32 v=-52,-66 +p=56,39 v=-79,88 +p=92,18 v=-75,63 +p=9,17 v=36,70 +p=70,42 v=-11,74 +p=11,8 v=46,69 +p=30,19 v=64,-5 +p=78,42 v=-45,-46 +p=98,64 v=-99,-66 +p=83,31 v=14,-39 +p=97,66 v=73,96 +p=33,55 v=46,-38 +p=67,59 v=59,3 +p=19,34 v=82,-37 +p=9,77 v=45,46 +p=88,100 v=29,55 +p=77,2 v=-54,-42 +p=59,49 v=-79,-53 +p=22,83 v=94,99 +p=75,40 v=99,-15 +p=44,33 v=-28,2 +p=83,42 v=44,-65 +p=61,13 v=-7,-8 +p=39,25 v=-90,93 +p=18,11 v=32,98 +p=49,24 v=3,32 +p=75,30 v=99,85 +p=48,21 v=52,40 +p=5,23 v=91,-52 +p=40,41 v=92,-62 +p=14,51 v=-34,-41 +p=17,86 v=30,27 +p=77,15 v=-11,-80 +p=26,18 v=-77,73 +p=26,42 v=26,-25 +p=10,97 v=27,80 +p=24,37 v=-40,-65 +p=75,40 v=-81,-43 +p=6,19 v=57,38 +p=16,82 v=-74,-85 +p=87,81 v=-32,15 +p=36,91 v=53,-60 +p=25,32 v=6,-71 +p=11,69 v=-41,65 +p=31,81 v=-22,33 +p=7,51 v=-88,-93 +p=75,18 v=84,-30 +p=59,65 v=-33,-22 +p=53,19 v=87,-14 +p=53,98 v=-30,55 +p=69,88 v=-27,-12 +p=34,93 v=-37,52 +p=16,17 v=11,65 +p=65,53 v=-33,-28 +p=81,45 v=-66,-5 +p=97,92 v=18,-58 +p=88,18 v=72,1 +p=72,62 v=-34,64 +p=79,70 v=29,26 +p=64,66 v=7,75 +p=48,65 v=-89,-68 +p=47,18 v=-7,-64 +p=50,89 v=-73,-64 +p=13,91 v=33,29 +p=63,6 v=-45,42 +p=84,22 v=84,-71 +p=68,100 v=53,5 +p=89,66 v=-55,59 +p=66,19 v=-17,95 +p=49,16 v=61,-60 +p=16,15 v=58,70 +p=38,12 v=-37,47 +p=98,44 v=81,-75 +p=34,72 v=-3,28 +p=36,54 v=16,31 +p=48,63 v=55,6 +p=14,68 v=33,90 +p=18,67 v=-1,-53 +p=10,35 v=58,59 +p=13,67 v=57,-38 +p=48,69 v=83,90 +p=88,17 v=-75,26 +p=69,72 v=-98,54 +p=87,12 v=-48,16 +p=99,2 v=14,64 +p=71,97 v=47,39 +p=69,64 v=14,-3 +p=36,82 v=38,-93 +p=24,77 v=21,-10 +p=10,21 v=-34,-30 +p=34,44 v=-98,47 +p=38,9 v=-39,-74 +p=76,21 v=44,60 +p=66,75 v=-33,-66 +p=26,31 v=9,-40 diff --git a/day14/part1.zig b/day14/part1.zig new file mode 100644 index 0000000..52eeb3c --- /dev/null +++ b/day14/part1.zig @@ -0,0 +1,70 @@ +const std = @import("std"); +const print = std.debug.print; +const input = @embedFile("input"); +const Int = i16; +const MAP_SIZE: [2]Int = .{ 101, 103 }; + +pub fn main() !void { + var tl_quadrant: usize = 0; + var tr_quadrant: usize = 0; + var bl_quadrant: usize = 0; + var br_quadrant: usize = 0; + + const mapW = MAP_SIZE[0]; + const mapH = MAP_SIZE[1]; + + var iter = std.mem.splitAny(u8, input, "\n"); + while (iter.next()) |line| { + if (std.mem.eql(u8, line, "")) continue; + var iter_space = std.mem.splitAny(u8, line, " "); + + const part1 = iter_space.next().?; + var iter_comma = std.mem.splitAny(u8, part1, ","); + const x = try std.fmt.parseInt(Int, iter_comma.next().?[2..], 10); + const y = try std.fmt.parseInt(Int, iter_comma.next().?, 10); + + const part2 = iter_space.next().?; + iter_comma = std.mem.splitAny(u8, part2, ","); + const vX = try std.fmt.parseInt(Int, iter_comma.next().?[2..], 10); + const vY = try std.fmt.parseInt(Int, iter_comma.next().?, 10); + + const end_pos = posFinal(x, y, vX, vY, mapW, mapH, 100); + switch (detectQuadrant(end_pos[0], end_pos[1], mapW, mapH)) { + .TopLeft => tl_quadrant += 1, + .TopRight => tr_quadrant += 1, + .BottomLeft => bl_quadrant += 1, + .BottomRight => br_quadrant += 1, + .None => {}, + } + } + + print("Total: {d}\n", .{tl_quadrant * tr_quadrant * bl_quadrant * br_quadrant}); +} + +fn posFinal(x0: Int, y0: Int, vX: Int, vY: Int, mapW: Int, mapH: Int, dt: Int) [2]Int { + var t: Int = 0; + var x: Int = x0; + var y: Int = y0; + while (t < dt) : (t += 1) { + x = x + vX; + y = y + vY; + + // Dected boundary + if (x >= mapW) x = x - mapW; //Move back to 0 + xt1 - mapW + if (x < 0) x = mapW + x; + if (y >= mapH) y = y - mapH; + if (y < 0) y = mapH + y; + } + return [2]Int{ x, y }; +} + +fn detectQuadrant(x: Int, y: Int, mapW: Int, mapH: Int) enum { TopLeft, TopRight, BottomLeft, BottomRight, None } { + if (x < @divFloor(mapW, 2)) { + if (y < @divFloor(mapH, 2)) return .TopLeft; + if (y > @divFloor(mapH, 2)) return .BottomLeft; + } else if (x > @divFloor(mapW, 2)) { + if (y < @divFloor(mapH, 2)) return .TopRight; + if (y > @divFloor(mapH, 2)) return .BottomRight; + } + return .None; +} diff --git a/day14/part2.zig b/day14/part2.zig new file mode 100644 index 0000000..ec14d02 --- /dev/null +++ b/day14/part2.zig @@ -0,0 +1,135 @@ +const std = @import("std"); +const print = std.debug.print; +const input = @embedFile("input"); +const Int = i16; +const MAP_SIZE: [2]Int = .{ 101, 103 }; + +// I am pretty sure that I can detect the tree by using the distance of each drone from each drone +// Something like that, some kind of noise +// If they picture a tree, it mean they are close to each other right ? So it is less 'noisy' or less enthropy + +const Drone = struct { + x: Int, + y: Int, + vX: Int, + vY: Int, + + fn next(self: *Drone) void { + const mapW = MAP_SIZE[0]; + const mapH = MAP_SIZE[1]; + self.x += self.vX; + self.y += self.vY; + + // Dected boundary + if (self.x >= mapW) self.x -= mapW; //Move back to 0 + xt1 - mapW + if (self.x < 0) self.x += mapW; + if (self.y >= mapH) self.y -= mapH; + if (self.y < 0) self.y += mapH; + } + + fn detectQuadrant(self: Drone, mapW: Int, mapH: Int) enum { TopLeft, TopRight, BottomLeft, BottomRight, None } { + if (self.x < @divFloor(mapW, 2)) { + if (self.y < @divFloor(mapH, 2)) return .TopLeft; + if (self.y > @divFloor(mapH, 2)) return .BottomLeft; + } else if (self.x > @divFloor(mapW, 2)) { + if (self.y < @divFloor(mapH, 2)) return .TopRight; + if (self.y > @divFloor(mapH, 2)) return .BottomRight; + } + return .None; + } +}; + +pub fn main() !void { + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); + const allocator = arena.allocator(); + + const drones = try parseDrone(allocator); + + var list = std.ArrayList(u8).init(allocator); + const writer = list.writer(); + + for (0..10000) |i| { + list.clearRetainingCapacity(); + for (drones) |*drone| drone.next(); + if (!detectIfDroneClose(drones, 40, 2)) continue; + + clearScreen(); + try printDrone(writer, drones); + print("{s}\nTime: {d}s", .{ list.items, i }); + try waitForInput(); + } +} + +fn parseDrone(allocator: std.mem.Allocator) ![]Drone { + var list = std.ArrayList(Drone).init(allocator); + + var iter = std.mem.splitAny(u8, input, "\n"); + while (iter.next()) |line| { + if (std.mem.eql(u8, line, "")) continue; + var iter_space = std.mem.splitAny(u8, line, " "); + + const part1 = iter_space.next().?; + var iter_comma = std.mem.splitAny(u8, part1, ","); + const x = try std.fmt.parseInt(Int, iter_comma.next().?[2..], 10); + const y = try std.fmt.parseInt(Int, iter_comma.next().?, 10); + + const part2 = iter_space.next().?; + iter_comma = std.mem.splitAny(u8, part2, ","); + const vX = try std.fmt.parseInt(Int, iter_comma.next().?[2..], 10); + const vY = try std.fmt.parseInt(Int, iter_comma.next().?, 10); + + try list.append(Drone{ .x = x, .y = y, .vX = vX, .vY = vY }); + } + + return try list.toOwnedSlice(); +} + +fn printDrone(writer: anytype, drones: []const Drone) !void { + var buf: [MAP_SIZE[0]][MAP_SIZE[1]]u8 = [_][MAP_SIZE[1]]u8{[_]u8{0} ** MAP_SIZE[1]} ** MAP_SIZE[0]; + for (drones) |drone| { + const x = @as(usize, @intCast(drone.x)); + const y = @as(usize, @intCast(drone.y)); + buf[x][y] += 1; + } + + for (buf) |line| { + for (line) |v| { + if (v == 0) { + try writer.writeByte(' '); + } else { + try writer.writeByte('0'); + } + } + try writer.writeByte('\n'); + } +} + +// Detect if at least 10 drones have 10 other drones close it it +fn detectIfDroneClose(drones: []Drone, to_find: usize, distance_max: f64) bool { + var founded1: usize = 0; + for (drones) |drone1| { + var founded2: usize = 0; + for (drones) |drone2| { + if (distance(drone1, drone2) < distance_max) founded2 += 1; + } + if (founded2 > to_find) founded1 += 1; + } + return founded1 > to_find; +} + +pub fn distance(drone1: Drone, drone2: Drone) f64 { + const dx = @as(f64, @floatFromInt(drone2.x - drone1.x)); + const dy = @as(f64, @floatFromInt(drone1.y - drone1.y)); + return std.math.sqrt(dx * dx + dy * dy); +} + +fn clearScreen() void { + print("\x1B[2J\x1B[H", .{}); +} + +fn waitForInput() !void { + var buf: [5]u8 = undefined; + const stdin = std.io.getStdIn().reader(); + _ = try stdin.readUntilDelimiter(&buf, '\n'); +}