fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
println!("Running {} - part 2", get_day());
- Ok(0)
+ let puzzle = Puzzle::new(input);
+
+ let res = puzzle.lines.iter()
+ .filter(|l| !puzzle.is_ordered(l))
+ .map(|l| {
+ let mut pages = l.clone();
+ while !puzzle.is_ordered(&pages) {
+ for i in 1..pages.len() {
+ let v = pages[i];
+ for j in 0..i {
+ if puzzle.order.get(&v).is_some() && puzzle.order.get(&v).unwrap().contains(&pages[j]) {
+ let tmp = pages[j];
+ pages[j] = pages[i];
+ pages[i] = tmp;
+ }
+ }
+ }
+ }
+ pages[pages.len()/2]
+ })
+ .sum();
+
+ Ok(res)
}
pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
#[test]
fn test_part2() {
- assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
+ assert_eq!(123, run_part2(TEXT_INPUT).unwrap());
}
}