Day 5
This commit is contained in:
		
							parent
							
								
									1da99c63be
								
							
						
					
					
						commit
						0ffbddb7db
					
				
					 4 changed files with 91 additions and 14 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| use aoc_runner_derive::{aoc, aoc_generator}; | ||||
| 
 | ||||
| 
 | ||||
| #[aoc_generator(day1)] | ||||
| pub fn input_generator(input: &str) -> Vec<usize> { | ||||
|     input | ||||
|  |  | |||
							
								
								
									
										16
									
								
								src/day2.rs
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/day2.rs
									
										
									
									
									
								
							|  | @ -54,22 +54,10 @@ pub fn input_generator(input: &str) -> Vec<Rule> { | |||
| 
 | ||||
| #[aoc(day2, part1)] | ||||
| pub fn solve_part1(input: &Vec<Rule>) -> usize { | ||||
|     let mut total = 0; | ||||
|     for rule in input { | ||||
|         if rule.is_valid_part1() { | ||||
|             total += 1; | ||||
|         } | ||||
|     } | ||||
|     total | ||||
|     return input.iter().filter(|v| v.is_valid_part1()).count() | ||||
| } | ||||
| 
 | ||||
| #[aoc(day2, part2)] | ||||
| pub fn solve_part2(input: &Vec<Rule>) -> usize { | ||||
|     let mut total = 0; | ||||
|     for rule in input { | ||||
|         if rule.is_valid_part2() { | ||||
|             total += 1; | ||||
|         } | ||||
|     } | ||||
|     total | ||||
|     return input.iter().filter(|v| v.is_valid_part2()).count() | ||||
| } | ||||
|  |  | |||
							
								
								
									
										87
									
								
								src/day5.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/day5.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | |||
| use aoc_runner_derive::{aoc, aoc_generator}; | ||||
| 
 | ||||
| #[derive(Debug,Eq,PartialEq)] | ||||
| pub enum Direction { | ||||
|     Front, | ||||
|     Back, | ||||
|     Left, | ||||
|     Right | ||||
| } | ||||
| 
 | ||||
| #[aoc_generator(day5)] | ||||
| pub fn input_generator(input: &str) -> Vec<Vec<Direction>> { | ||||
|     input.lines().map(|line| { | ||||
|         line.chars().map(|c| { | ||||
|             match c { | ||||
|                 'L' => Direction::Left, | ||||
|                 'R' => Direction::Right, | ||||
|                 'F' => Direction::Front, | ||||
|                 'B' => Direction::Back, | ||||
|                 other => panic!("Invalid direction: {}",other) | ||||
|             } | ||||
|         }).collect() | ||||
|     }).collect() | ||||
| } | ||||
| 
 | ||||
| pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize,usize) { | ||||
|     let mut col_range: (usize, usize) = (0,8); | ||||
|     let mut row_range: (usize, usize) = (0,128); | ||||
|     for inst in seat { | ||||
|         let delta_col = (col_range.1-col_range.0)/2; | ||||
|         let delta_row = (row_range.1-row_range.0)/2; | ||||
|         match inst { | ||||
|             Direction::Back => { | ||||
|                 row_range.0+=delta_row; | ||||
|             }, | ||||
|             Direction::Front => { | ||||
|                 row_range.1-=delta_row; | ||||
|             }, | ||||
|             Direction::Left => { | ||||
|                 col_range.1-=delta_col; | ||||
|             }, | ||||
|             Direction::Right => { | ||||
|                 col_range.0+=delta_col; | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
|     if row_range.1-row_range.0 != 1 { | ||||
|         panic!("Invalid!"); | ||||
|     } | ||||
|     if col_range.1-col_range.0 != 1 { | ||||
|         panic!("Invalid!"); | ||||
|     } | ||||
|     return (col_range.0,row_range.0); | ||||
| } | ||||
| 
 | ||||
| #[aoc(day5, part1)] | ||||
| pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize { | ||||
|     let mut max_seat_id: usize = 0; | ||||
|     for seat in input { | ||||
|         let pos = seat_to_pos(seat); | ||||
|         let seat_id = pos.0+pos.1*8; | ||||
|         max_seat_id=std::cmp::max(max_seat_id,seat_id); | ||||
|     } | ||||
|     return max_seat_id; | ||||
| } | ||||
| 
 | ||||
| #[aoc(day5, part2)] | ||||
| pub fn solve_part2(input: &Vec<Vec<Direction>>) -> usize { | ||||
|     let mut seats = [[false;8];128]; | ||||
|     for seat in input { | ||||
|         let pos = seat_to_pos(seat); | ||||
|         seats[pos.1][pos.0]=true; | ||||
|     } | ||||
|     for id in 0..(8*128) { | ||||
|         let mut id=id; | ||||
|         let mut v=(false,false,false); | ||||
|         v.0=seats[id/8][id%8]; | ||||
|         id+=1; | ||||
|         v.1=seats[id/8][id%8]; | ||||
|         id+=1; | ||||
|         v.2=seats[id/8][id%8]; | ||||
|         if v==(true,false,true) { | ||||
|             return id-1; | ||||
|         } | ||||
|     } | ||||
|     panic!("Something went wrong!"); | ||||
| } | ||||
|  | @ -3,4 +3,5 @@ pub mod day1; | |||
| pub mod day2; | ||||
| pub mod day3; | ||||
| pub mod day4; | ||||
| pub mod day5; | ||||
| aoc_lib! { year = 2020 } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue