fmt
This commit is contained in:
parent
9790369331
commit
a0b969332b
1 changed files with 23 additions and 29 deletions
|
@ -1,6 +1,5 @@
|
|||
use std::{collections::HashMap, fs};
|
||||
|
||||
|
||||
pub fn solve() {
|
||||
let path = "res/08/input";
|
||||
|
||||
|
@ -10,10 +9,11 @@ pub fn solve() {
|
|||
let (instr_raw, map_raw) = contents.split_once("\n\n").unwrap();
|
||||
|
||||
let instr: Vec<char> = instr_raw.chars().collect();
|
||||
let map: HashMap<String, (String,String)> = map_raw
|
||||
let map: HashMap<String, (String, String)> = map_raw
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let (src, dst1, dst2) = scan_fmt!(line, "{} = ({}, {})", String, String, String).unwrap();
|
||||
let (src, dst1, dst2) =
|
||||
scan_fmt!(line, "{} = ({}, {})", String, String, String).unwrap();
|
||||
|
||||
(src, (dst1, dst2))
|
||||
})
|
||||
|
@ -21,46 +21,40 @@ pub fn solve() {
|
|||
|
||||
let mut curr = String::from("AAA");
|
||||
let mut i = 0;
|
||||
while curr != String::from("ZZZ") {
|
||||
dbg!(curr.as_str());
|
||||
curr = match instr[i % instr.len()] {
|
||||
while curr != String::from("ZZZ") {
|
||||
curr = match instr[i % instr.len()] {
|
||||
'L' => map.get(curr.as_str()).unwrap().0.clone(),
|
||||
'R' => map.get(curr.as_str()).unwrap().1.clone(),
|
||||
_ => panic!()
|
||||
_ => panic!(),
|
||||
};
|
||||
i+=1;
|
||||
|
||||
i += 1;
|
||||
}
|
||||
|
||||
println!("Result 1: {}", i);
|
||||
|
||||
|
||||
let mut curr: Vec<String> = map.keys()
|
||||
let mut curr: Vec<String> = map
|
||||
.keys()
|
||||
.filter(|s| s.ends_with("A"))
|
||||
.map(|s| s.clone())
|
||||
.collect();
|
||||
let mut i = 0;
|
||||
let mut steps: Vec<usize> = vec![0; curr.len()];
|
||||
while steps.iter().any(|s| *s == 0) {
|
||||
(0..curr.len())
|
||||
.for_each(|j| {
|
||||
if curr[j].ends_with("Z") && steps[j] == 0 {
|
||||
steps[j] = i;
|
||||
} else if steps[j] == 0 {
|
||||
curr[j] = match instr[i % instr.len()] {
|
||||
'L' => map.get(curr[j].as_str()).unwrap().0.clone(),
|
||||
'R' => map.get(curr[j].as_str()).unwrap().1.clone(),
|
||||
_ => panic!()
|
||||
}
|
||||
(0..curr.len()).for_each(|j| {
|
||||
if curr[j].ends_with("Z") && steps[j] == 0 {
|
||||
steps[j] = i;
|
||||
} else if steps[j] == 0 {
|
||||
curr[j] = match instr[i % instr.len()] {
|
||||
'L' => map.get(curr[j].as_str()).unwrap().0.clone(),
|
||||
'R' => map.get(curr[j].as_str()).unwrap().1.clone(),
|
||||
_ => panic!(),
|
||||
}
|
||||
});
|
||||
i+=1;
|
||||
}
|
||||
});
|
||||
i += 1;
|
||||
}
|
||||
|
||||
let result = steps.iter()
|
||||
.fold(1, |x,y| {
|
||||
num::integer::lcm(x,*y)
|
||||
});
|
||||
let result = steps.iter().fold(1, |x, y| num::integer::lcm(x, *y));
|
||||
|
||||
println!("Result 2: {}", result);
|
||||
|
||||
}
|
Loading…
Reference in a new issue