day 10 puzzle 1
This commit is contained in:
		
							
								
								
									
										68
									
								
								src/day10/puzzle1.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/day10/puzzle1.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| #import "/src/utils.typ": * | ||||
|  | ||||
| #let offsets = ( | ||||
|   (-1, 0), | ||||
|   (0, -1), | ||||
|   (1, 0), | ||||
|   (0, 1) | ||||
| ) | ||||
|  | ||||
| #let in-grid(w, h, x, y) = { | ||||
|   return 0 <= x and x < w and 0 <= y and y < h | ||||
| } | ||||
|  | ||||
| #let count-paths(grid, w, h, ox, oy) = { | ||||
|   let tails = () | ||||
|   let in-grid = in-grid.with(w, h) | ||||
|  | ||||
|   let to-visit = ((ox, oy),) | ||||
|   while to-visit.len() != 0 { | ||||
|     let (x, y) = to-visit.remove(0) | ||||
|     let v = grid.at(y).at(x) | ||||
|     for (dx, dy) in offsets { | ||||
|       let (x2, y2) = (x + dx, y + dy) | ||||
|       if not in-grid(x2, y2) { | ||||
|         continue | ||||
|       } | ||||
|       let v2 = grid.at(y2).at(x2) | ||||
|       if v2 == v + 1 { | ||||
|         let pos2 = (x2, y2) | ||||
|         if v2 == 9 { | ||||
|           if pos2 not in tails { | ||||
|             tails.push(pos2) | ||||
|           } | ||||
|         } else { | ||||
|           to-visit.push(pos2) | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return tails.len() | ||||
| } | ||||
|  | ||||
| #let solve(input) = { | ||||
|   let grid = input.split("\n").map(l => l.clusters().map(int)) | ||||
|  | ||||
|   let w = grid.first().len() | ||||
|   let h = grid.len() | ||||
|  | ||||
|   let count-paths = count-paths.with(grid, w, h) | ||||
|  | ||||
|   let total = 0 | ||||
|   for y in range(h) { | ||||
|     for x in range(w) { | ||||
|       if grid.at(y).at(x) == 0 { | ||||
|         total += count-paths(x, y) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return total | ||||
| } | ||||
|  | ||||
| #show-puzzle( | ||||
|   10, 1, | ||||
|   solve, | ||||
|   example: 36 | ||||
| ) | ||||
							
								
								
									
										11
									
								
								src/day10/puzzle2.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/day10/puzzle2.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| #import "/src/utils.typ": * | ||||
|  | ||||
| #let solve(input) = { | ||||
|  | ||||
| } | ||||
|  | ||||
| #show-puzzle( | ||||
|   10, 2, | ||||
|   solve, | ||||
|   example: 0 | ||||
| ) | ||||
							
								
								
									
										
											BIN
										
									
								
								src/main.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -189,5 +189,10 @@ | ||||
|  | ||||
| #let template(body) = { | ||||
|   set text(font: "Source Sans 3") | ||||
|   set page( | ||||
|     footer: context { | ||||
|       align(center, counter(page).display("1 / 1", both: true)) | ||||
|     } | ||||
|   ) | ||||
|   body | ||||
| } | ||||
		Reference in New Issue
	
	Block a user