day 14 puzzle 1
This commit is contained in:
		
							
								
								
									
										61
									
								
								src/day14/puzzle1.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								src/day14/puzzle1.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| #import "/src/utils.typ": * | ||||
|  | ||||
| #let regexp = regex("^p=(.*?),(.*?) v=(.*?),(.*?)$") | ||||
|  | ||||
| #let simulate(v0, dv, max: 1, steps: 1) = { | ||||
|   return calc.rem-euclid(v0 + dv * steps, max) | ||||
| } | ||||
|  | ||||
| #let solve(w: 0, h: 0, steps: 100, input) = { | ||||
|   assert(w != 0, message: "Width must be != 0") | ||||
|   assert(h != 0, message: "Height must be != 0") | ||||
|  | ||||
|   let bots = input.split("\n").map(b => { | ||||
|     let m = b.match(regexp) | ||||
|     return ( | ||||
|       pos: ( | ||||
|         x: int(m.captures.at(0)), | ||||
|         y: int(m.captures.at(1)), | ||||
|       ), | ||||
|       vel: ( | ||||
|         x: int(m.captures.at(2)), | ||||
|         y: int(m.captures.at(3)) | ||||
|       ) | ||||
|     ) | ||||
|   }) | ||||
|  | ||||
|   let quadrants = ( | ||||
|     tl: 0, | ||||
|     tr: 0, | ||||
|     bl: 0, | ||||
|     br: 0 | ||||
|   ) | ||||
|   let half-w = calc.div-euclid(w, 2) | ||||
|   let half-h = calc.div-euclid(h, 2) | ||||
|  | ||||
|   let sim-x = simulate.with(max: w, steps: steps) | ||||
|   let sim-y = simulate.with(max: h, steps: steps) | ||||
|   for bot in bots { | ||||
|     let x2 = sim-x(bot.pos.x, bot.vel.x) | ||||
|     let y2 = sim-y(bot.pos.y, bot.vel.y) | ||||
|  | ||||
|     if x2 == half-w or y2 == half-h { | ||||
|       continue | ||||
|     } | ||||
|     let quadrant = ( | ||||
|       (if y2 < half-h {"t"} else {"b"}) + | ||||
|       (if x2 < half-w {"l"} else {"r"}) | ||||
|     ) | ||||
|     quadrants.at(quadrant) += 1 | ||||
|   } | ||||
|  | ||||
|   return quadrants.values().product() | ||||
| } | ||||
|  | ||||
| #show-puzzle( | ||||
|   14, 1, | ||||
|   solve.with(w: 101, h: 103), | ||||
|   example: ( | ||||
|     (result: 12, args: (w: 11, h: 7)), | ||||
|   ) | ||||
| ) | ||||
							
								
								
									
										0
									
								
								src/day14/puzzle2.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/day14/puzzle2.typ
									
									
									
									
									
										Normal file
									
								
							
		Reference in New Issue
	
	Block a user