diff --git a/src/tasks/day01.rs b/src/tasks/day01.rs index ec7e19e..f70747c 100644 --- a/src/tasks/day01.rs +++ b/src/tasks/day01.rs @@ -13,21 +13,18 @@ pub fn task1() { pub fn task2() { let contents = utils::read_file("input/day01.txt"); - let mut seen: HashSet = HashSet::new(); - seen.insert(0); - let start_state = (std::cell::RefCell::new(seen), std::cell::RefCell::new(0)); + let seen: HashSet = vec![0].into_iter().collect(); + let start_state = (seen, 0); let final_state = contents .lines() .map(|line| line.parse::().unwrap()) .cycle() - .scan(&start_state, |(hash_set, current_freq), freq_change| { - *current_freq.borrow_mut() += freq_change; - if hash_set.borrow_mut().contains(¤t_freq.borrow()) { - Some((current_freq.borrow(), true)) + .scan(start_state, |state, freq_change| { + state.1 += freq_change; + if state.0.insert(state.1) { + Some((state.1, false)) } else { - let value: i32 = *current_freq.borrow_mut(); - hash_set.borrow_mut().insert(value); - Some((current_freq.borrow(), false)) + Some((state.1, true)) } }).find(|state| state.1);