day 8
							parent
							
								
									3b88057214
								
							
						
					
					
						commit
						474ad0a248
					
				| @ -0,0 +1,7 @@ | ||||
| # This file is automatically @generated by Cargo. | ||||
| # It is not intended for manual editing. | ||||
| version = 3 | ||||
| 
 | ||||
| [[package]] | ||||
| name = "day08" | ||||
| version = "0.1.0" | ||||
| @ -0,0 +1,8 @@ | ||||
| [package] | ||||
| name = "day08" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| 
 | ||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||
| 
 | ||||
| [dependencies] | ||||
| @ -0,0 +1,83 @@ | ||||
| fn main() { | ||||
|     let f = std::fs::read_to_string("/dev/stdin").unwrap(); | ||||
|     let rows = f | ||||
|         .lines() | ||||
|         .map(|c| { | ||||
|             c.chars() | ||||
|                 .map(|c| c.to_digit(10).unwrap() as usize) | ||||
|                 .collect::<Vec<usize>>() | ||||
|         }) | ||||
|         .collect::<Vec<Vec<usize>>>(); | ||||
| 
 | ||||
|     let mut cols: Vec<Vec<usize>> = Vec::new(); | ||||
|     for i in 0..rows.len() { | ||||
|         let mut col = Vec::new(); | ||||
|         for j in 0..rows.len() { | ||||
|             col.push(*rows.get(j).unwrap().get(i).unwrap()); | ||||
|         } | ||||
|         cols.push(col); | ||||
|     } | ||||
| 
 | ||||
|     let mut total_visible = 0; | ||||
|     let mut scenic_score = 0; | ||||
| 
 | ||||
|     for (row_num, row) in rows.iter().enumerate() { | ||||
|         if row_num == 0 { | ||||
|             total_visible += (row.len() - 1) * 4; // perimeter
 | ||||
|             continue; | ||||
|         } | ||||
|         if row_num == rows.len() - 1 { | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         for (col_num, col) in row.get(0..row.len() - 1).unwrap().iter().enumerate() { | ||||
|             if col_num == 0 { | ||||
|                 continue; | ||||
|             } | ||||
|             let before_row = row.get(0..col_num).unwrap(); | ||||
|             let after_row = row.get(col_num + 1..).unwrap(); | ||||
|             let this_col = cols.get(col_num).unwrap(); | ||||
|             let before_col = this_col.get(0..row_num).unwrap(); | ||||
|             let after_col = this_col.get(row_num + 1..).unwrap(); | ||||
| 
 | ||||
|             let visible_before = get_viewing_distance(*col, before_row, true); | ||||
|             let visible_after = get_viewing_distance(*col, after_row, false); | ||||
|             let visible_above = get_viewing_distance(*col, before_col, true); | ||||
|             let visible_below = get_viewing_distance(*col, after_col, false); | ||||
|             let score = visible_before * visible_after * visible_above * visible_below; | ||||
|             if score > scenic_score { | ||||
|                 scenic_score = score; | ||||
|             } | ||||
| 
 | ||||
|             if before_row.iter().filter(|t| t >= &col).count() == 0 | ||||
|                 || after_row.iter().filter(|t| t >= &col).count() == 0 | ||||
|                 || before_col.iter().filter(|t| t >= &col).count() == 0 | ||||
|                 || after_col.iter().filter(|t| t >= &col).count() == 0 | ||||
|             { | ||||
|                 total_visible += 1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     println!("{}, {}", total_visible, scenic_score); | ||||
| } | ||||
| 
 | ||||
| fn get_viewing_distance(height: usize, view: &[usize], reverse_order: bool) -> usize { | ||||
|     let mut visible = 0; | ||||
|     if reverse_order { | ||||
|         for tree in view.iter().rev() { | ||||
|             visible += 1; | ||||
|             if tree >= &height { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|         for tree in view { | ||||
|             visible += 1; | ||||
|             if tree >= &height { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     visible | ||||
| } | ||||
| @ -0,0 +1,5 @@ | ||||
| 30373 | ||||
| 25512 | ||||
| 65332 | ||||
| 33549 | ||||
| 35390 | ||||
					Loading…
					
					
				
		Reference in New Issue