Day 7
This commit is contained in:
parent
c1e46e9f0d
commit
3c84d7232f
5 changed files with 84 additions and 5 deletions
|
|
@ -50,7 +50,7 @@ fn detect_loop(grid: &[Vec<u8>], start_pos: (i64, i64), start_dir: usize) -> (bo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw_walked_grid(grid: &[Vec<u8>], steps: &HashSet<(i64, i64, usize)>) {
|
pub fn _draw_walked_grid(grid: &[Vec<u8>], steps: &HashSet<(i64, i64, usize)>) {
|
||||||
let steps = steps.iter().map(|tup| ((tup.0, tup.1), tup.2)).collect::<HashMap<_, _>>();
|
let steps = steps.iter().map(|tup| ((tup.0, tup.1), tup.2)).collect::<HashMap<_, _>>();
|
||||||
|
|
||||||
for (ypos, line) in grid.iter().enumerate() {
|
for (ypos, line) in grid.iter().enumerate() {
|
||||||
|
|
@ -92,7 +92,7 @@ pub fn solve(input: &str) {
|
||||||
if new_position != start {
|
if new_position != start {
|
||||||
let mut test_grid = grid.clone();
|
let mut test_grid = grid.clone();
|
||||||
test_grid[new_position.1 as usize][new_position.0 as usize] = b'@';
|
test_grid[new_position.1 as usize][new_position.0 as usize] = b'@';
|
||||||
let (looped, steps) = detect_loop(&test_grid, start, start_dir);
|
let (looped, _) = detect_loop(&test_grid, start, start_dir);
|
||||||
if looped {
|
if looped {
|
||||||
looping_blockades.insert(new_position);
|
looping_blockades.insert(new_position);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,38 @@
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Equation {
|
||||||
|
result: u64,
|
||||||
|
values: Vec<u64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn recurse_equation(equation: &Equation, value: u64, index: usize) -> bool {
|
||||||
|
if index == equation.values.len() {
|
||||||
|
return value == equation.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if recurse_equation(equation, value + equation.values[index], index + 1) ||
|
||||||
|
recurse_equation(equation, value * equation.values[index], index + 1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
pub fn solve(input: &str) {
|
pub fn solve(input: &str) {
|
||||||
|
let equations =
|
||||||
|
input.lines()
|
||||||
|
.map(|line| {
|
||||||
|
let (result, values) = line.split_once(": ").unwrap();
|
||||||
|
Equation { result: result.parse().unwrap(),
|
||||||
|
values: values.split_whitespace().map(|value| value.parse::<u64>().unwrap()).collect(), }
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut sum_of_equations = 0;
|
||||||
|
for equation in equations.iter() {
|
||||||
|
if recurse_equation(equation, 0, 0) {
|
||||||
|
sum_of_equations += equation.result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Sum of equations: {}", sum_of_equations);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,39 @@
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Equation {
|
||||||
|
result: u64,
|
||||||
|
values: Vec<u64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn merge_numbers(lhs: u64, rhs: u64) -> u64 {
|
||||||
|
format!("{}{}", lhs, rhs).parse().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn recurse_equation(equation: &Equation, value: u64, index: usize) -> bool {
|
||||||
|
if index == equation.values.len() {
|
||||||
|
return value == equation.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
recurse_equation(equation, value + equation.values[index], index + 1) ||
|
||||||
|
recurse_equation(equation, value * equation.values[index], index + 1) ||
|
||||||
|
recurse_equation(equation, merge_numbers(value, equation.values[index]), index + 1)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn solve(input: &str) {
|
pub fn solve(input: &str) {
|
||||||
|
let equations =
|
||||||
}
|
input.lines()
|
||||||
|
.map(|line| {
|
||||||
|
let (result, values) = line.split_once(": ").unwrap();
|
||||||
|
Equation { result: result.parse().unwrap(),
|
||||||
|
values: values.split_whitespace().map(|value| value.parse::<u64>().unwrap()).collect(), }
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut sum_of_equations = 0;
|
||||||
|
for equation in equations.iter() {
|
||||||
|
if recurse_equation(equation, 0, 0) {
|
||||||
|
sum_of_equations += equation.result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Sum of equations: {}", sum_of_equations);
|
||||||
|
}
|
||||||
|
|
|
||||||
9
advent_of_code_2024/src/day7/test.txt
Normal file
9
advent_of_code_2024/src/day7/test.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
190: 10 19
|
||||||
|
3267: 81 40 27
|
||||||
|
83: 17 5
|
||||||
|
156: 15 6
|
||||||
|
7290: 6 8 6 15
|
||||||
|
161011: 16 10 13
|
||||||
|
192: 17 8 14
|
||||||
|
21037: 9 7 18 13
|
||||||
|
292: 11 6 16 20
|
||||||
|
|
@ -18,4 +18,5 @@ pub fn main() {
|
||||||
solve_day!(4);
|
solve_day!(4);
|
||||||
solve_day!(5);
|
solve_day!(5);
|
||||||
solve_day!(6);
|
solve_day!(6);
|
||||||
|
solve_day!(7);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue