summaryrefslogtreecommitdiff
path: root/2025/05
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2026-03-18 21:48:13 +0000
committermhsn <mail@mhsn.net>2026-03-18 21:48:13 +0000
commit86bac31392a76da84817eec020d2b84d099b3cc1 (patch)
treee2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2025/05
parent62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff)
downloadpuzzles-master.tar.gz
puzzles-master.zip
add other challenges supportHEADmaster
Diffstat (limited to '2025/05')
-rwxr-xr-x2025/05/python.py39
-rw-r--r--2025/05/rust/Cargo.lock7
-rw-r--r--2025/05/rust/Cargo.toml6
-rw-r--r--2025/05/rust/src/main.rs55
4 files changed, 0 insertions, 107 deletions
diff --git a/2025/05/python.py b/2025/05/python.py
deleted file mode 100755
index 9977623..0000000
--- a/2025/05/python.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python3
-
-from itertools import takewhile
-from fileinput import input
-
-
-inp = map(str.strip, input())
-rs = [tuple(map(int, r.split("-"))) for r in takewhile(bool, inp)]
-ids = list(map(int, inp))
-
-
-def add(a: int, b: int, c: int, d: int) -> tuple[int, int] | None:
- if c < a:
- return add(c, d, a, b)
- if b < c:
- return None
- return (a, max(b, d))
-
-
-done = False
-while not done:
- ms = []
- for r in rs:
- for idx, m in enumerate(ms):
- if new := add(*r, *m):
- ms[idx] = new
- break
-
- else:
- ms.append(r)
- done = len(rs) == len(ms)
- rs = ms
-
-
-silver = sum(1 for i in ids if any(lo <= i <= hi for lo, hi in rs))
-gold = sum(b - a + 1 for a, b in rs)
-
-print("silver:", silver)
-print("gold:", gold)
diff --git a/2025/05/rust/Cargo.lock b/2025/05/rust/Cargo.lock
deleted file mode 100644
index 0d1bf4e..0000000
--- a/2025/05/rust/Cargo.lock
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 4
-
-[[package]]
-name = "aoc_2025-05"
-version = "0.1.0"
diff --git a/2025/05/rust/Cargo.toml b/2025/05/rust/Cargo.toml
deleted file mode 100644
index e85826e..0000000
--- a/2025/05/rust/Cargo.toml
+++ /dev/null
@@ -1,6 +0,0 @@
-[package]
-name = "aoc_2025-05"
-version = "0.1.0"
-edition = "2024"
-
-[dependencies]
diff --git a/2025/05/rust/src/main.rs b/2025/05/rust/src/main.rs
deleted file mode 100644
index cd78338..0000000
--- a/2025/05/rust/src/main.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-use std::io;
-
-fn main() {
- let mut input = io::stdin().lines().flatten().map(|line| line);
- let ranges = input.by_ref().take_while(|s| !s.is_empty()).map(|s| {
- let (lo, hi) = s.split_once('-').unwrap();
- (
- lo.to_owned().parse().unwrap(),
- hi.to_owned().parse().unwrap(),
- )
- });
-
- let mut merged: Vec<(u64, u64)> = vec![];
- for (mut lo, mut hi) in ranges {
- let ldx = merged.partition_point(|&(_, max)| max < lo);
- let mut rdx = merged.partition_point(|&(_, max)| max < hi);
-
- let left = merged.get(ldx);
- let right = merged.get(rdx);
-
- // ldx = merged.len() -> left is none -> insert at end
- let Some(&(llo, lhi)) = left else {
- merged.push((lo, hi));
- continue;
- };
-
- if (llo..=lhi).contains(&lo) {
- lo = lo.min(llo); // include range start point
- }
-
- // rdx = merged.len() -> right is none -> merge with all
- let Some(&(rlo, rhi)) = right else {
- merged.drain(ldx..);
- merged.push((lo, hi));
- continue;
- };
-
- if (rlo..=rhi).contains(&hi) {
- hi = hi.max(rhi);
- rdx += 1;
- }
-
- merged.drain(ldx..rdx);
- merged.insert(ldx, (lo, hi));
- }
-
- let silver = input
- .map(|n| n.parse::<u64>().unwrap())
- .filter(|id| merged.iter().any(|&(lo, hi)| (lo..=hi).contains(id)))
- .count();
- let gold: u64 = merged.iter().map(|(lo, hi)| hi - lo + 1).sum();
-
- println!("silver: {silver}");
- println!("gold: {gold}");
-}