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 |
@ -23,4 +23,6 @@
|
||||
12:
|
||||
stars: 2
|
||||
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() {
|
||||
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 {
|
||||
check-example(day, func, example)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user