From 8064cfdd3a4432d44cd9334206d96a25ac83ec0c Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sat, 5 Jul 2025 00:23:38 +0200 Subject: Revert wrong optimization --- 2022/19/common.rs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to '2022/19/common.rs') diff --git a/2022/19/common.rs b/2022/19/common.rs index cc11460..319363e 100644 --- a/2022/19/common.rs +++ b/2022/19/common.rs @@ -122,17 +122,11 @@ pub fn most_geodes( bp: &Blueprint, s: Status, m: i32, - mem: &mut HashMap<(Status, i32), i32>, - lower_bound: i32 + mem: &mut HashMap<(Status, i32), i32> ) -> i32 { if m == 0 { return s.resources.geo; } if m == 1 { return s.resources.geo + s.bots.geo; } - // Estimate how much we can get at most, assuming one geode bot - // can be built each turn from now on - let upper_bound = s.resources.geo + s.bots.geo + (m-1)*(m-2)/2; - if upper_bound <= lower_bound { return 0; } - if let Some(r) = mem.get(&(s, m)) { return *r; } let mut new_status = s; @@ -143,7 +137,7 @@ pub fn most_geodes( if m > 1 && s.resources >= bp.geo_bot_cost { new_status.resources -= &bp.geo_bot_cost; new_status.bots.geo += 1; - result = most_geodes(bp, new_status, m-1, mem, result); + result = most_geodes(bp, new_status, m-1, mem); // If a geode bot can be built, it is always the best thing to do mem.insert((s, m), result); @@ -153,7 +147,7 @@ pub fn most_geodes( if m > 2 && s.resources >= bp.obs_bot_cost { new_status.resources -= &bp.obs_bot_cost; new_status.bots.obs += 1; - result = max(result, most_geodes(bp, new_status, m-1, mem, result)); + result = max(result, most_geodes(bp, new_status, m-1, mem)); new_status.bots.obs -= 1; new_status.resources += &bp.obs_bot_cost; } @@ -161,7 +155,7 @@ pub fn most_geodes( if m > 3 && s.resources >= bp.cla_bot_cost { new_status.resources -= &bp.cla_bot_cost; new_status.bots.cla += 1; - result = max(result, most_geodes(bp, new_status, m-1, mem, result)); + result = max(result, most_geodes(bp, new_status, m-1, mem)); new_status.bots.cla -= 1; new_status.resources += &bp.cla_bot_cost; } @@ -169,12 +163,12 @@ pub fn most_geodes( if m > 4 && s.resources >= bp.ore_bot_cost { new_status.resources -= &bp.ore_bot_cost; new_status.bots.ore += 1; - result = max(result, most_geodes(bp, new_status, m-1, mem, result)); + result = max(result, most_geodes(bp, new_status, m-1, mem)); new_status.bots.ore -= 1; new_status.resources += &bp.ore_bot_cost; } - result = max(result, most_geodes(bp, new_status, m-1, mem, result)); + result = max(result, most_geodes(bp, new_status, m-1, mem)); mem.insert((s, m), result); result -- cgit v1.3