day 14 puzzle 1
This commit is contained in:
parent
ad4adc2372
commit
6ab8ef6d26
BIN
progress.png
BIN
progress.png
Binary file not shown.
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
@ -24,3 +24,5 @@
|
|||||||
stars: 2
|
stars: 2
|
||||||
13:
|
13:
|
||||||
stars: 2
|
stars: 2
|
||||||
|
14:
|
||||||
|
stars: 1
|
12
res/examples/day14.txt
Normal file
12
res/examples/day14.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
p=0,4 v=3,-3
|
||||||
|
p=6,3 v=-1,-3
|
||||||
|
p=10,3 v=-1,2
|
||||||
|
p=2,0 v=2,-1
|
||||||
|
p=0,0 v=1,3
|
||||||
|
p=3,0 v=-2,-2
|
||||||
|
p=7,6 v=-1,-3
|
||||||
|
p=3,0 v=-1,-2
|
||||||
|
p=9,3 v=2,3
|
||||||
|
p=7,3 v=-1,2
|
||||||
|
p=2,4 v=2,-3
|
||||||
|
p=9,5 v=-3,-3
|
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
BIN
src/main.pdf
BIN
src/main.pdf
Binary file not shown.
@ -81,6 +81,12 @@
|
|||||||
for (suffix, result) in example.pairs() {
|
for (suffix, result) in example.pairs() {
|
||||||
check-example(day, func, result, suffix: suffix)
|
check-example(day, func, result, suffix: suffix)
|
||||||
}
|
}
|
||||||
|
} else if type(example) == array {
|
||||||
|
for ex in example {
|
||||||
|
let suffix = ex.at("suffix", default: none)
|
||||||
|
let args = ex.at("args", default: (:))
|
||||||
|
check-example(day, func.with(..args), ex.result, suffix: suffix)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
check-example(day, func, example)
|
check-example(day, func, example)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user