my solutions to advent of code
aoc
advent-of-code
1use std::{fs, ops::ControlFlow};
2
3fn main() {
4 let input = fs::read_to_string("../input.txt").expect("invalid input");
5 let input = input.trim();
6
7 let part1 = input.chars().fold(0, |floor, v| {
8 (match v {
9 '(' => 1,
10 ')' => -1,
11 _ => 0,
12 }) + floor
13 });
14
15 println!("{}", part1);
16
17 let part2 = input.chars().try_fold((0, 1), |(floor, step), v| {
18 let floor = (match v {
19 '(' => 1,
20 ')' => -1,
21 _ => 0,
22 }) + floor;
23 match floor {
24 -1 => ControlFlow::Break(step),
25 _ => ControlFlow::Continue((floor, step + 1)),
26 }
27 });
28 let part2 = match part2 {
29 ControlFlow::Break(part2) => part2,
30 ControlFlow::Continue(_) => panic!("bad input. never reached basement"),
31 };
32
33 println!("{}", part2);
34}