diff options
| author | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
|---|---|---|
| committer | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
| commit | 86bac31392a76da84817eec020d2b84d099b3cc1 (patch) | |
| tree | e2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2024/02 | |
| parent | 62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff) | |
| download | puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.tar.gz puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.zip | |
Diffstat (limited to '2024/02')
| -rwxr-xr-x | 2024/02/python.py | 24 | ||||
| -rwxr-xr-x | 2024/02/raku.raku | 9 | ||||
| -rw-r--r-- | 2024/02/rust/Cargo.lock | 7 | ||||
| -rw-r--r-- | 2024/02/rust/Cargo.toml | 6 | ||||
| -rw-r--r-- | 2024/02/rust/src/main.rs | 33 |
5 files changed, 0 insertions, 79 deletions
diff --git a/2024/02/python.py b/2024/02/python.py deleted file mode 100755 index f2c807d..0000000 --- a/2024/02/python.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 - -from fileinput import input - -reports = [[int(level) for level in report.split()] for report in input()] - - -def incr(xs): - return all(x < y and y - x <= 3 for x, y in zip(xs, xs[1:])) - - -def safe(xs): - return incr(xs) or incr(xs[::-1]) - - -def drops(xs): - return (xs[:idx] + xs[idx + 1 :] for idx, _ in enumerate(xs)) - - -silver = sum(safe(rep) for rep in reports) -gold = sum(any(safe(mod) for mod in drops(rep)) for rep in reports) - -print("silver:", silver) -print("gold:", gold) diff --git a/2024/02/raku.raku b/2024/02/raku.raku deleted file mode 100755 index 9b930de..0000000 --- a/2024/02/raku.raku +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env raku - -my @rs = lines>>.words.map(&cache); - -sub incr ($r) { $r.rotor(2=>-1).map({ ([-] $_) (elem) (1..3)}).all }; -sub safe ($r) { so $r.&incr || $r.reverse.&incr }; - -say "silver: ", @rs.map(&safe).sum; -say "gold: ", @rs.map({ $_.combinations($_-1).map(&safe).any.so }).sum; diff --git a/2024/02/rust/Cargo.lock b/2024/02/rust/Cargo.lock deleted file mode 100644 index f3a3299..0000000 --- a/2024/02/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_2024-02" -version = "0.1.0" diff --git a/2024/02/rust/Cargo.toml b/2024/02/rust/Cargo.toml deleted file mode 100644 index 6030837..0000000 --- a/2024/02/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "aoc_2024-02" -version = "0.1.0" -edition = "2021" - -[dependencies] diff --git a/2024/02/rust/src/main.rs b/2024/02/rust/src/main.rs deleted file mode 100644 index 2007837..0000000 --- a/2024/02/rust/src/main.rs +++ /dev/null @@ -1,33 +0,0 @@ -#![feature(iter_map_windows)] - -use std::io; - -fn main() { - let input: Vec<Vec<i64>> = io::stdin() - .lines() - .map(|line| { - line.unwrap() - .split_whitespace() - .map(str::parse::<i64>) - .collect() - }) - .collect::<Result<Vec<_>, _>>() - .unwrap(); - - let silver: usize = input.iter().filter(|&xs| all_safe(xs)).count(); - let gold: usize = input.iter().filter(|&xs| drop_safe(xs)).count(); - println!("silver: {silver}"); - println!("gold: {gold}"); -} - -fn all_safe(xs: &Vec<i64>) -> bool { - let mut diffs = xs.iter().map_windows(|&[x, y]| y - x).peekable(); - let dir = diffs.peek().unwrap_or(&1).signum(); - diffs.all(|d| (1..=3).contains(&d.abs()) && d.signum() == dir) -} - -fn drop_safe(xs: &Vec<i64>) -> bool { - (0..xs.len()) - .map(|idx| xs.split_at(idx)) - .any(|(left, right)| all_safe(&[left, &right[1..]].concat())) -} |
