feat: solve day 1

This commit is contained in:
Joshua Smallwood 2025-12-01 08:13:38 -06:00
parent 72dd89c2ee
commit b36e0b4b6e
2 changed files with 81 additions and 0 deletions

11
data/examples/01.txt Normal file
View file

@ -0,0 +1,11 @@
L68
L30
R48
L5
R60
L55
L1
L99
R14
L82

70
src/bin/01.rs Normal file
View file

@ -0,0 +1,70 @@
advent_of_code::solution!(1);
pub fn part_one(input: &str) -> Option<u64> {
let mut rot = 50;
let mut num = 0;
input.lines().for_each(|l| {
let mut mult = 1;
if l.contains("L") {
mult = -1;
}
let mut chars = l.chars();
chars.next();
let curr = chars.as_str().parse().unwrap_or(0);
rot += mult * curr;
while rot >= 100 {
rot -= 100;
}
while rot < 0 {
rot += 100;
}
if rot == 0 {
num += 1;
}
});
Some(num)
}
pub fn part_two(input: &str) -> Option<u64> {
let mut new_lines = vec![];
input.lines().for_each(|l| {
let mut chars = l.chars();
let start = chars.next();
let curr = chars.as_str().parse().unwrap_or(0);
if let Some(start_char) = start {
for _ in 0..curr {
new_lines.push(format!("{start_char}1"));
}
}
});
part_one(&new_lines.join("\n"))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_part_one() {
let result = part_one(&advent_of_code::template::read_file("examples", DAY));
assert_eq!(result, Some(3));
}
#[test]
fn test_part_two() {
let mut result = part_two(&advent_of_code::template::read_file("examples", DAY));
assert_eq!(result, Some(6));
result = part_two("L1000");
assert_eq!(result, Some(10));
result = part_two("L50");
assert_eq!(result, Some(1));
result = part_two("R50\nR50");
assert_eq!(result, Some(1));
result = part_two("R50\nL50");
assert_eq!(result, Some(1));
result = part_two("L50\nL50");
assert_eq!(result, Some(1));
}
}