From af38974a4cf9cab53cf35adcbdca7d16ac5c1801 Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sat, 14 Dec 2024 15:55:22 +0100 Subject: [PATCH] update 2024/day14 --- 2024/14/06876.jpg | Bin 12934 -> 16492 bytes 2024/14/main.py | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/2024/14/06876.jpg b/2024/14/06876.jpg index 0e05f1da2f7d2d0fc1fe4f1ef4b027b670b54fe8..93bcf17f83b594dd1b5457dc61c1cf92345cd154 100644 GIT binary patch literal 16492 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

ipjUKavji(r&9Uw~NM7Pa{TzDf$c8 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 D4cN>% diff --git a/2024/14/main.py b/2024/14/main.py index bb0d917..fba56d8 100644 --- a/2024/14/main.py +++ b/2024/14/main.py @@ -32,7 +32,7 @@ def get_robot_pos_after_time(area: dict, robot: tuple, seconds: int) -> tuple: return (finx, finy) -def get_quadrant(area: dict, position: tuple) -> int: +def get_quadrant_for_pos(area: dict, position: tuple) -> int: middle_x = area["width"] // 2 middle_y = area["height"] // 2 @@ -51,17 +51,17 @@ def get_quadrant(area: dict, position: tuple) -> int: return 4 -def assign_qadrants(area: dict, positions: dict) -> list: +def count_positions_in_quadrants(area: dict, positions: dict) -> list: quadrant_count = {} for pos, count in positions.items(): - quadrant = get_quadrant(area, pos) + quadrant = get_quadrant_for_pos(area, pos) if quadrant != 0: quadrant_count[quadrant] = quadrant_count.get(quadrant, 0) + count return quadrant_count -def draw_positions_in_area(area: dict, positions: dict, filename: str): +def draw_area(area: dict, positions: dict, filename: str): grid = [] for _ in range(area["height"]): row = [0] * area["width"] @@ -72,9 +72,9 @@ def draw_positions_in_area(area: dict, positions: dict, filename: str): grid[y][x] = 1 plt.figure() - plt.imshow(grid, cmap="gray", interpolation="nearest") + plt.imshow(grid, cmap="gray") plt.axis("off") - plt.savefig(f"{filename}.jpg", format="jpg", bbox_inches="tight", pad_inches=0) + plt.savefig(f"{filename}.jpg", bbox_inches="tight") plt.close() @@ -91,7 +91,7 @@ def main(): positions[pos] = positions.get(pos, 0) + 1 safety_factor = 1 - quadrant_count = assign_qadrants(area, positions) + quadrant_count = count_positions_in_quadrants(area, positions) for c in quadrant_count.values(): safety_factor *= c @@ -104,8 +104,8 @@ def main(): for robot in robots: pos = get_robot_pos_after_time(area, robot, i) positions[pos] = positions.get(pos, 0) + 1 - print(f"\rSaving image for position after {i} seconds", end="", flush=True) - draw_positions_in_area(area, positions, str("%05d" % i)) + print(f"\rSaving image for positions after {i} seconds", end="", flush=True) + draw_area(area, positions, str("%05d" % i)) if __name__ == "__main__":