generated from janezicmatej/aoc-template
	solution: day 13
This commit is contained in:
		
							
								
								
									
										15
									
								
								data/examples/13.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								data/examples/13.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | #.##..##. | ||||||
|  | ..#.##.#. | ||||||
|  | ##......# | ||||||
|  | ##......# | ||||||
|  | ..#.##.#. | ||||||
|  | ..##..##. | ||||||
|  | #.#.##.#. | ||||||
|  |  | ||||||
|  | #...##..# | ||||||
|  | #....#..# | ||||||
|  | ..##..### | ||||||
|  | #####.##. | ||||||
|  | #####.##. | ||||||
|  | ..##..### | ||||||
|  | #....#..# | ||||||
							
								
								
									
										66
									
								
								src/bin/13.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/bin/13.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | fn mirror_h(shape: &Vec<Vec<char>>, smudges: usize) -> Option<usize> { | ||||||
|  |     (1..shape.len()) | ||||||
|  |         .filter(|&i| { | ||||||
|  |             shape | ||||||
|  |                 .iter() | ||||||
|  |                 .skip(i) | ||||||
|  |                 .zip(shape.iter().take(i).rev()) | ||||||
|  |                 .map(|(x, y)| { | ||||||
|  |                     x.iter() | ||||||
|  |                         .zip(y.iter()) | ||||||
|  |                         .map(|(xx, yy)| (xx != yy) as usize) | ||||||
|  |                         .sum::<usize>() | ||||||
|  |                 }) | ||||||
|  |                 .sum::<usize>() | ||||||
|  |                 == smudges | ||||||
|  |         }) | ||||||
|  |         .max() | ||||||
|  | } | ||||||
|  | fn mirror_v(shape: &Vec<Vec<char>>, smudges: usize) -> Option<usize> { | ||||||
|  |     let shape = (0..shape[0].len()) | ||||||
|  |         .map(|col| (0..shape.len()).map(|row| shape[row][col]).collect()) | ||||||
|  |         .collect(); | ||||||
|  |  | ||||||
|  |     mirror_h(&shape, smudges) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn solve(input: &str, smudges: usize) -> usize { | ||||||
|  |     input | ||||||
|  |         .split("\n\n") | ||||||
|  |         .map(|x| x.lines().map(|line| line.chars().collect()).collect()) | ||||||
|  |         .map(|shape| { | ||||||
|  |             let v = mirror_v(&shape, smudges).unwrap_or_default(); | ||||||
|  |             let h = mirror_h(&shape, smudges).unwrap_or_default(); | ||||||
|  |             v + h * 100 | ||||||
|  |         }) | ||||||
|  |         .sum() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pub fn part_one(input: &str) -> Option<usize> { | ||||||
|  |     Some(solve(input, 0)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pub fn part_two(input: &str) -> Option<usize> { | ||||||
|  |     Some(solve(input, 1)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | aoc::solution!(13); | ||||||
|  |  | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests { | ||||||
|  |     use super::*; | ||||||
|  |     #[test] | ||||||
|  |     fn test_part_one() { | ||||||
|  |         assert_eq!( | ||||||
|  |             part_one(&aoc::template::read_file("examples", 13)), | ||||||
|  |             Some(405) | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |     #[test] | ||||||
|  |     fn test_part_two() { | ||||||
|  |         assert_eq!( | ||||||
|  |             part_two(&aoc::template::read_file("examples", 13)), | ||||||
|  |             Some(400) | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user