diff --git a/src/bin/03.rs b/src/bin/03.rs index 4dca334..2e84058 100644 --- a/src/bin/03.rs +++ b/src/bin/03.rs @@ -4,7 +4,7 @@ use itertools::Itertools; pub fn part_one(input: &str) -> Option { let mut visited = HashSet::with_capacity(input.len()); - visited.insert((0,0)); + visited.insert((0, 0)); let mut x = 0; let mut y = 0; for direction in input.trim().chars() { @@ -13,15 +13,15 @@ pub fn part_one(input: &str) -> Option { '<' => x -= 1, '^' => y += 1, 'v' => y -= 1, - _ => panic!("oops") + _ => panic!("oops"), }; visited.insert((x, y)); - }; + } Some(visited.len() as u32) } pub fn part_two(input: &str) -> Option { let mut visited = HashSet::with_capacity(input.len()); - visited.insert((0,0)); + visited.insert((0, 0)); let (mut x1, mut y1, mut x2, mut y2) = (0, 0, 0, 0); for (santa, robot) in input.trim().chars().tuple_windows().step_by(2) { match santa { @@ -29,7 +29,7 @@ pub fn part_two(input: &str) -> Option { '<' => x1 -= 1, '^' => y1 += 1, 'v' => y1 -= 1, - _ => panic!("oops") + _ => panic!("oops"), }; visited.insert((x1, y1)); match robot { @@ -37,10 +37,10 @@ pub fn part_two(input: &str) -> Option { '<' => x2 -= 1, '^' => y2 += 1, 'v' => y2 -= 1, - _ => panic!("oops") + _ => panic!("oops"), }; visited.insert((x2, y2)); - }; + } Some(visited.len() as u32) } fn main() { diff --git a/src/bin/04.rs b/src/bin/04.rs index fe7f775..27796a2 100644 --- a/src/bin/04.rs +++ b/src/bin/04.rs @@ -29,7 +29,9 @@ pub fn part_two(input: &str) -> Option { let mut output = [0; 16]; hasher.result(&mut output); - if output.starts_with(&[0,0,0]) { return Some(x as u32)} + if output.starts_with(&[0, 0, 0]) { + return Some(x as u32); + } hasher.reset(); } None diff --git a/src/bin/06.rs b/src/bin/06.rs index f3c7bc1..36897c1 100644 --- a/src/bin/06.rs +++ b/src/bin/06.rs @@ -63,19 +63,19 @@ impl From<&str> for Command { } pub fn part_one(input: &str) -> Option { - let mut a = [[0; 1000]; 1000]; + let mut a = vec![[0; 1000]; 1000]; for line in input.trim().split('\n') { let Command { instruction, from, to, } = Command::from(line); - for x in from.x..=to.x { - for y in from.y..=to.y { + for x in a.iter_mut().take(to.x + 1).skip(from.x) { + for y in x.iter_mut().take(to.y + 1).skip(from.y) { match instruction { - On => a[x][y] = 1, - Off => a[x][y] = 0, - Toggle => a[x][y] = 1 - a[x][y], + On => *y = 1, + Off => *y = 0, + Toggle => *y = 1 - *y, } } } @@ -84,20 +84,20 @@ pub fn part_one(input: &str) -> Option { } pub fn part_two(input: &str) -> Option { - let mut a = [[0; 1000]; 1000]; + let mut a = vec![[0; 1000]; 1000]; for line in input.trim().split('\n') { let Command { instruction, from, to, } = Command::from(line); - for x in from.x..=to.x { - for y in from.y..=to.y { + for x in a.iter_mut().take(to.x + 1).skip(from.x) { + for y in x.iter_mut().take(to.y + 1).skip(from.y) { match instruction { - On => a[x][y] = 1, - Off if a[x][y] > 0 => a[x][y] -= 1, - Off => (), - Toggle => a[x][y] += 2, + On => *y += 1, + Toggle => *y += 2, + Off if y > &mut 0 => *y -= 1, + _ => (), } } }