[rs] Clean up 2022_16 part 1
This commit is contained in:
parent
379ad232a4
commit
0c1fffb037
1 changed files with 16 additions and 17 deletions
|
|
@ -77,7 +77,6 @@ impl OpenSet {
|
|||
|
||||
#[derive(Debug)]
|
||||
struct Dp1 {
|
||||
valves: usize,
|
||||
powers: usize,
|
||||
elems: Vec<u32>,
|
||||
}
|
||||
|
|
@ -87,11 +86,7 @@ impl Dp1 {
|
|||
let valves = valves.len();
|
||||
let powers = powerset.len();
|
||||
let elems = vec![0; valves * powers];
|
||||
Self {
|
||||
valves,
|
||||
powers,
|
||||
elems,
|
||||
}
|
||||
Self { powers, elems }
|
||||
}
|
||||
|
||||
fn get(&self, valve_id: usize, open: OpenSet) -> u32 {
|
||||
|
|
@ -107,20 +102,14 @@ impl Dp1 {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn solve(input: String) {
|
||||
let valves = input.lines().map(parse_valve).collect::<Vec<_>>();
|
||||
|
||||
let (names, valves) = prepare_valves(valves);
|
||||
let powerset = OpenSet::powerset(&valves);
|
||||
eprintln!("Powerset has size {}", powerset.len());
|
||||
|
||||
fn solve_part_1(names: &HashMap<&str, usize>, valves: &[Valve], powerset: &[OpenSet]) -> u32 {
|
||||
// DP state consists of:
|
||||
// - The current minute
|
||||
// - The current valve
|
||||
// - The current set of open/closed valves
|
||||
|
||||
let mut prev = Dp1::new(&valves, &powerset);
|
||||
let mut curr = Dp1::new(&valves, &powerset);
|
||||
let mut prev = Dp1::new(valves, powerset);
|
||||
let mut curr = Dp1::new(valves, powerset);
|
||||
|
||||
// Given valve v in minute t with set s, you can either...
|
||||
// - Go to another neighbouring valve v', points: points[v', t-1, s]
|
||||
|
|
@ -133,7 +122,7 @@ pub fn solve(input: String) {
|
|||
curr.clear();
|
||||
|
||||
for (valve_id, valve) in valves.iter().enumerate() {
|
||||
for open in &powerset {
|
||||
for open in powerset {
|
||||
let mut score = valve
|
||||
.next
|
||||
.iter()
|
||||
|
|
@ -152,6 +141,16 @@ pub fn solve(input: String) {
|
|||
}
|
||||
}
|
||||
|
||||
let part1 = curr.get(names["AA"], OpenSet::ALL_CLOSED);
|
||||
curr.get(names["AA"], OpenSet::ALL_CLOSED)
|
||||
}
|
||||
|
||||
pub fn solve(input: String) {
|
||||
let valves = input.lines().map(parse_valve).collect::<Vec<_>>();
|
||||
|
||||
let (names, valves) = prepare_valves(valves);
|
||||
let powerset = OpenSet::powerset(&valves);
|
||||
eprintln!("Powerset has size {}", powerset.len());
|
||||
|
||||
let part1 = solve_part_1(&names, &valves, &powerset);
|
||||
println!("Part 1: {part1}");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue