add day 8 through 10
This commit is contained in:
Generated
+7
@@ -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"
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "day10"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user