Day 16 parsh
This commit is contained in:
parent
eb441b0704
commit
bba1059869
102
2022/rust/src/day16.rs
Normal file
102
2022/rust/src/day16.rs
Normal file
|
@ -0,0 +1,102 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
mod common;
|
||||
|
||||
type Addr = [u8; 2];
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Valve {
|
||||
flow_rate: usize,
|
||||
tunnels_to: Vec<Addr>,
|
||||
}
|
||||
|
||||
type Map = HashMap<Addr, Valve>;
|
||||
|
||||
type Input = Map;
|
||||
type Answer = usize;
|
||||
|
||||
fn processed_input(input: &str) -> Input {
|
||||
let mut result = HashMap::<Addr, Valve>::new();
|
||||
for l in input.lines() {
|
||||
println!("{}", l);
|
||||
let mut bytes = l[6..=7].bytes();
|
||||
let addr = [bytes.next().unwrap(), bytes.next().unwrap()];
|
||||
let flow_rate = l
|
||||
.split('=')
|
||||
.skip(1)
|
||||
.next()
|
||||
.unwrap()
|
||||
.split(';')
|
||||
.next()
|
||||
.unwrap()
|
||||
.parse::<usize>()
|
||||
.unwrap();
|
||||
let tunnels_to = l
|
||||
.split("valve")
|
||||
.skip(1)
|
||||
.next()
|
||||
.unwrap()
|
||||
.trim_start_matches(&['s', ' '])
|
||||
.split(", ")
|
||||
.map(|s| {
|
||||
let mut b = s.bytes();
|
||||
[b.next().unwrap(), b.next().unwrap()]
|
||||
})
|
||||
.collect();
|
||||
result.insert(
|
||||
addr,
|
||||
Valve {
|
||||
flow_rate,
|
||||
tunnels_to,
|
||||
},
|
||||
);
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
const MINUTES: usize = 30;
|
||||
|
||||
fn part1(input: &Input) -> Answer {
|
||||
println!("{:?}", input);
|
||||
100
|
||||
}
|
||||
|
||||
fn part2(input: &Input) -> Answer {
|
||||
0
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input_text = common::day_input(16);
|
||||
eprintln!("{}\n\nAbove is your input file.\n\n", input_text);
|
||||
let input = processed_input(&input_text);
|
||||
common::show_answers(&part1(&input), &part2(&input))
|
||||
// common::show_both_answers(&both_parts(&input))
|
||||
}
|
||||
|
||||
// fn both_parts(input: &Input) -> (Answer, Answer) {
|
||||
// (0, 0)
|
||||
// }
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const TEST_INPUT: &str = "Valve AA has flow rate=0; tunnels lead to valves DD, II, BB
|
||||
Valve BB has flow rate=13; tunnels lead to valves CC, AA
|
||||
Valve CC has flow rate=2; tunnels lead to valves DD, BB
|
||||
Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE
|
||||
Valve EE has flow rate=3; tunnels lead to valves FF, DD
|
||||
Valve FF has flow rate=0; tunnels lead to valves EE, GG
|
||||
Valve GG has flow rate=0; tunnels lead to valves FF, HH
|
||||
Valve HH has flow rate=22; tunnel leads to valve GG
|
||||
Valve II has flow rate=0; tunnels lead to valves AA, JJ
|
||||
Valve JJ has flow rate=21; tunnel leads to valve II";
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
let input = processed_input(TEST_INPUT);
|
||||
assert_eq!(part1(&input), 0);
|
||||
assert_eq!(part2(&input), 0);
|
||||
// assert_eq!(both_parts(&input), (0, 0));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue