2022 day 19 rust

This commit is contained in:
Maciej Jur 2022-12-20 00:23:58 +01:00
parent a53571a204
commit 96f95e13d8

View file

@ -62,13 +62,26 @@ fn explore(blueprint: &Blueprint, start: State) -> i32 {
continue continue
} }
// ore // geode
if state.inv_ore >= blueprint.ore && state.bot_ore <= max_req_ore { if state.inv_ore >= blueprint.geode.0 && state.inv_obs >= blueprint.geode.1 {
pending.push(State { pending.push(State {
time_left: state.time_left - 1, time_left: state.time_left - 1,
bot_ore: state.bot_ore + 1, bot_geo: state.bot_geo + 1,
inv_ore: state.inv_ore + state.bot_ore - blueprint.ore, inv_ore: state.inv_ore + state.bot_ore - blueprint.geode.0,
inv_cla: state.inv_cla + state.bot_cla, inv_cla: state.inv_cla + state.bot_cla,
inv_obs: state.inv_obs + state.bot_obs - blueprint.geode.1,
inv_geo: state.inv_geo + state.bot_geo,
..state
});
continue
}
// obsidian
if state.inv_ore >= blueprint.obsidian.0 && state.inv_cla >= blueprint.obsidian.1 && state.bot_obs <= max_req_obs {
pending.push(State {
time_left: state.time_left - 1,
bot_obs: state.bot_obs + 1,
inv_ore: state.inv_ore + state.bot_ore - blueprint.obsidian.0,
inv_cla: state.inv_cla + state.bot_cla - blueprint.obsidian.1,
inv_obs: state.inv_obs + state.bot_obs, inv_obs: state.inv_obs + state.bot_obs,
inv_geo: state.inv_geo + state.bot_geo, inv_geo: state.inv_geo + state.bot_geo,
..state ..state
@ -86,43 +99,28 @@ fn explore(blueprint: &Blueprint, start: State) -> i32 {
..state ..state
}) })
} }
// obsidian // ore
if state.inv_ore >= blueprint.obsidian.0 && state.inv_cla >= blueprint.obsidian.1 && state.bot_obs <= max_req_obs { if state.inv_ore >= blueprint.ore && state.bot_ore <= max_req_ore {
let haha = State { pending.push(State {
time_left: state.time_left - 1, time_left: state.time_left - 1,
bot_obs: state.bot_obs + 1, bot_ore: state.bot_ore + 1,
inv_ore: state.inv_ore + state.bot_ore - blueprint.obsidian.0, inv_ore: state.inv_ore + state.bot_ore - blueprint.ore,
inv_cla: state.inv_cla + state.bot_cla - blueprint.obsidian.1, inv_cla: state.inv_cla + state.bot_cla,
inv_obs: state.inv_obs + state.bot_obs, inv_obs: state.inv_obs + state.bot_obs,
inv_geo: state.inv_geo + state.bot_geo, inv_geo: state.inv_geo + state.bot_geo,
..state ..state
};
pending.push(haha);
}
// geode
if state.inv_ore >= blueprint.geode.0 && state.inv_obs >= blueprint.geode.1 {
pending.push(State {
time_left: state.time_left - 1,
bot_geo: state.bot_geo + 1,
inv_ore: state.inv_ore + state.bot_ore - blueprint.geode.0,
inv_cla: state.inv_cla + state.bot_cla,
inv_obs: state.inv_obs + state.bot_obs - blueprint.geode.1,
inv_geo: state.inv_geo + state.bot_geo,
..state
}); });
continue
} }
// none // none
if state.inv_ore <= max_req_ore && state.inv_cla <= max_req_cla * 3 / 2 && state.inv_obs <= max_req_obs { if state.inv_ore <= max_req_ore && state.inv_cla <= max_req_cla * 3 / 2 && state.inv_obs <= max_req_obs {
let haha = State { pending.push(State {
time_left: state.time_left - 1, time_left: state.time_left - 1,
inv_ore: state.inv_ore + state.bot_ore, inv_ore: state.inv_ore + state.bot_ore,
inv_cla: state.inv_cla + state.bot_cla, inv_cla: state.inv_cla + state.bot_cla,
inv_obs: state.inv_obs + state.bot_obs, inv_obs: state.inv_obs + state.bot_obs,
inv_geo: state.inv_geo + state.bot_geo, inv_geo: state.inv_geo + state.bot_geo,
..state ..state
}; });
pending.push(haha);
} }
} }
max_geodes max_geodes