added visualization + minor fixes

This commit is contained in:
2024-12-02 08:00:46 +01:00
parent f77a97fd80
commit b1a59d3cf5
4 changed files with 84 additions and 12 deletions

View File

@@ -1,4 +1,5 @@
#import "/src/utils.typ": *
#import "@preview/cetz:0.3.1": canvas, draw
#let solve(input) = {
let lines = input.split("\n")
@@ -29,8 +30,57 @@
return total
}
#let visualize(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 unique = l1.dedup()
let colors = (red,green)
canvas({
for (i, n) in l1.enumerate() {
let y = -0.9 * i
draw.circle(
(0, y),
radius: 0.35,
stroke: black,
name: "l" + str(i)
)
draw.content((0, y), n)
}
for (i, n) in l2.enumerate() {
let y = -0.9 * i
draw.circle(
(4, y),
radius: 0.35,
stroke: black,
name: "r" + str(i)
)
draw.content((4, y), n)
}
for (i, a) in l1.enumerate() {
for (j, b) in l2.enumerate() {
if a == b {
draw.line(
"l" + str(i),
"r" + str(j),
stroke: colors.at(unique.position(n => n == a)) + 1.5pt,
mark: (end: "straight")
)
}
}
}
})
}
#show-puzzle(
1,
1, 2,
solve,
example: 31
example: 31,
visualize: visualize
)