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