mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Add incorrect implementation of day 24 part 2.
This commit is contained in:
@@ -112,7 +112,7 @@ impl Day24 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn simulate(&mut self) {
|
fn simulate(&mut self) -> bool {
|
||||||
let mut order: Vec<usize> = (0..self.units.len()).collect();
|
let mut order: Vec<usize> = (0..self.units.len()).collect();
|
||||||
order.sort_unstable_by_key(|&x| &self.units[x]);
|
order.sort_unstable_by_key(|&x| &self.units[x]);
|
||||||
order.reverse();
|
order.reverse();
|
||||||
@@ -120,6 +120,7 @@ impl Day24 {
|
|||||||
// select targets
|
// select targets
|
||||||
let mut targets: Vec<Option<usize>> = vec![None; self.units.len()];
|
let mut targets: Vec<Option<usize>> = vec![None; self.units.len()];
|
||||||
let mut is_targeted = vec![false; self.units.len()];
|
let mut is_targeted = vec![false; self.units.len()];
|
||||||
|
let mut changes = false;
|
||||||
|
|
||||||
for &i in &order {
|
for &i in &order {
|
||||||
let unit = &self.units[i];
|
let unit = &self.units[i];
|
||||||
@@ -153,10 +154,14 @@ impl Day24 {
|
|||||||
let defender = &mut self.units[id];
|
let defender = &mut self.units[id];
|
||||||
|
|
||||||
let losses = damage / defender.hp;
|
let losses = damage / defender.hp;
|
||||||
|
if losses > 0 {
|
||||||
defender.count = defender.count.saturating_sub(losses);
|
defender.count = defender.count.saturating_sub(losses);
|
||||||
|
changes = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
changes
|
||||||
|
}
|
||||||
|
|
||||||
fn both_alive(&self) -> bool {
|
fn both_alive(&self) -> bool {
|
||||||
let mut seen = None;
|
let mut seen = None;
|
||||||
@@ -174,21 +179,52 @@ impl Day24 {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn full_simulation(&mut self) {
|
||||||
|
let mut changes = true;
|
||||||
|
while self.both_alive() && changes {
|
||||||
|
changes = self.simulate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn faction_won(&self, faction: char) -> bool {
|
||||||
|
if self.both_alive() {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
self.units.iter().filter(|x| x.is_alive())
|
||||||
|
.all(|x| x.faction == faction)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Solution for Day24 {
|
impl Solution for Day24 {
|
||||||
fn part1(&mut self, input: &mut Read) -> String {
|
fn part1(&mut self, input: &mut Read) -> String {
|
||||||
self.read_input(input);
|
self.read_input(input);
|
||||||
while self.both_alive() {
|
self.full_simulation();
|
||||||
self.simulate();
|
|
||||||
}
|
|
||||||
|
|
||||||
let result: u32 = self.units.iter().map(|x| x.count).sum();
|
let result: u32 = self.units.iter().map(|x| x.count).sum();
|
||||||
result.to_string()
|
result.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(&mut self, _input: &mut Read) -> String {
|
fn part2(&mut self, input: &mut Read) -> String {
|
||||||
unimplemented!()
|
self.read_input(input);
|
||||||
|
let original_count = self.units.iter().map(|x| x.count).collect_vec();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
for (unit, count) in self.units.iter_mut().zip(original_count.iter()) {
|
||||||
|
unit.count = *count;
|
||||||
|
if unit.faction == 'D' {
|
||||||
|
unit.power += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{:?}", self.units);
|
||||||
|
|
||||||
|
self.full_simulation();
|
||||||
|
if self.faction_won('D') {
|
||||||
|
let result: u32 = self.units.iter().map(|x| x.count).sum();
|
||||||
|
return result.to_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,4 +240,10 @@ mod tests {
|
|||||||
let mut instance = Day24::new();
|
let mut instance = Day24::new();
|
||||||
assert_eq!("5216", instance.part1(&mut SAMPLE_INPUT))
|
assert_eq!("5216", instance.part1(&mut SAMPLE_INPUT))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample_part2() {
|
||||||
|
let mut instance = Day24::new();
|
||||||
|
assert_eq!("51", instance.part2(&mut SAMPLE_INPUT))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user