day 1 puzzle 2
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								progress.png
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								progress.png
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 86 KiB | 
| @@ -1,2 +1,2 @@ | |||||||
| 1: | 1: | ||||||
|   stars: 1 |   stars: 2 | ||||||
| @@ -0,0 +1,36 @@ | |||||||
|  | #import "/src/utils.typ": * | ||||||
|  |  | ||||||
|  | #let solve(input) = { | ||||||
|  |   let lines = input.split("\n") | ||||||
|  |   let (l1, l2) = ((), ()) | ||||||
|  |   let reg = regex("^(\d+)\s+(\d+)$") | ||||||
|  |   for line in lines { | ||||||
|  |     let digits = line.match(reg) | ||||||
|  |     l1.push(digits.captures.first()) | ||||||
|  |     l2.push(digits.captures.last()) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   let nums = (:) | ||||||
|  |  | ||||||
|  |   for n in l1 { | ||||||
|  |     if n not in nums.keys() { | ||||||
|  |       nums.insert(n, (0, 0)) | ||||||
|  |     } | ||||||
|  |     nums.at(n).first() += 1 | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   for n in l2 { | ||||||
|  |     if n in nums.keys() { | ||||||
|  |       nums.at(n).last() += 1 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   let total = nums.pairs().map(((num, (a, b))) => int(num) * a * b).sum() | ||||||
|  |   return total | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #show-puzzle( | ||||||
|  |   1, | ||||||
|  |   solve, | ||||||
|  |   example: 31 | ||||||
|  | ) | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/main.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -15,25 +15,36 @@ | |||||||
|  |  | ||||||
| #let check-example(day, func, target-result, suffix: none) = { | #let check-example(day, func, target-result, suffix: none) = { | ||||||
|   let result = (func)(read(get-example-path(day, suffix: suffix))) |   let result = (func)(read(get-example-path(day, suffix: suffix))) | ||||||
|   /*assert( |  | ||||||
|     result == target-result, |  | ||||||
|     message: "Expected '" + repr(target-result) + "' got '" + repr(result) + "'" |  | ||||||
|   )*/ |  | ||||||
|   let passes = (result == target-result) |   let passes = (result == target-result) | ||||||
|   let name = if suffix == none [Example] else [Example '#suffix'] |   let name = if suffix == none [Example] else [Example '#suffix'] | ||||||
|   box( |   let badge = box( | ||||||
|     inset: (x: 1.2em, y: 0.6em), |     inset: (x: 1.2em, y: 0.6em), | ||||||
|     radius: 1.2em, |     radius: 1.2em, | ||||||
|  |     baseline: 35%, | ||||||
|     fill: if passes {green.lighten(20%)} else {red.lighten(20%)}, |     fill: if passes {green.lighten(20%)} else {red.lighten(20%)}, | ||||||
|     if passes [#name passes] else [#name fails] |     if passes [#name passes] else [#name fails] | ||||||
|   ) |   ) | ||||||
|   h(0.6em) |   if not passes { | ||||||
|  |     badge = box( | ||||||
|  |       baseline: 35%, | ||||||
|  |       grid( | ||||||
|  |         columns: 2, | ||||||
|  |         align: horizon, | ||||||
|  |       )[ | ||||||
|  |         #badge | ||||||
|  |         Expected '#repr(target-result)' got '#repr(result)' | ||||||
|  |       ] | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   [#badge #h(0.6em)] | ||||||
| } | } | ||||||
|  |  | ||||||
| #let show-result(result) = { | #let show-result(result) = { | ||||||
|   box( |   box( | ||||||
|     inset: (x: 1.2em, y: 0.6em), |     inset: (x: 1.2em, y: 0.6em), | ||||||
|     radius: 1.2em, |     radius: 1.2em, | ||||||
|  |     baseline: 35%, | ||||||
|     fill: blue.lighten(20%), |     fill: blue.lighten(20%), | ||||||
|     text(fill: white)[Result: #result] |     text(fill: white)[Result: #result] | ||||||
|   ) |   ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user