add day 8 through 10

This commit is contained in:
timeshifter
2026-06-21 21:44:46 +02:00
parent 037c0d649c
commit 9adb5887bb
11 changed files with 647 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "day10"
version = "0.1.0"
+6
View File
@@ -0,0 +1,6 @@
[package]
name = "day10"
version = "0.1.0"
edition = "2024"
[dependencies]
+96
View File
@@ -0,0 +1,96 @@
use std::collections::HashMap;
fn main() {
let input = "3113322113";
part1(input);
}
fn part1(input: &str) {
let mut input: Vec<_> = input.to_string().chars().collect();
for _ in 0..34 {
input = recurse(input);
}
for c in input {
print!("{c}");
}
println!();
}
fn recurse(input: Vec<char>) -> Vec<char> {
if input.is_empty() {
return input;
}
let mut iter = input.iter();
let first_digit = *iter.next().unwrap();
let s = 0;
let mut e = 0;
for next_digit in iter {
if first_digit == *next_digit {
e += 1
} else {
break;
}
}
let mut result = look_and_say(&input[s..=e]);
result.append(&mut recurse(input[e + 1..].to_vec()));
result
}
fn look_and_say(s: &[char]) -> Vec<char> {
if s.is_empty() {
return vec![];
}
let binding = s.len().to_string();
let length_chars = binding.chars();
let mut result = vec![];
for c in length_chars {
result.push(c);
}
result.push(s[0]);
result
}
#[cfg(test)]
mod test {
use crate::{look_and_say, recurse};
#[test]
fn basic() {
let x = vec!['1'];
let result = look_and_say(&x);
assert_eq!(result, vec!['1', '1']);
let x = vec!['1', '1', '1'];
let result = look_and_say(&x);
assert_eq!(result, vec!['3', '1']);
let x = vec!['2'];
let result = look_and_say(&x);
assert_eq!(result, vec!['1', '2']);
}
#[test]
fn test_recurse() {
// let x = vec!['1'];
// let result = recurse(x);
// assert_eq!(result, vec!['1', '1']);
let result = vec!['1', '1', '1', '2', '2', '1'];
let result = recurse(result);
assert_eq!(result, vec!['3', '1', '2', '2', '1', '1']);
}
}
// https://adventofcode.com/2015/day/10