58 lines
1.1 KiB
Typst

#import "@preview/cetz:0.3.1": canvas, draw
#let draw-algo(places, min: 0, max: 199, width: 10) = canvas({
let m = min
let M = max
let s = M - m
let w = width / s
draw.line((0, 0), (width, 0))
let draw-tick(v) = {
draw.line((v*w, 0), (v*w, 0.2))
draw.content(
(v*w, 0.2),
str(v),
anchor: "south",
padding: 3pt
)
}
let drawn = (m, M)
draw-tick(m)
draw-tick(M)
let pos = ()
for (i, place) in places.enumerate() {
if place not in drawn {
draw-tick(place)
drawn.push(place)
}
let p = (place * w, -i * 0.5)
if pos.len() != 0 {
draw.line(pos.last(), p, mark: (end: "straight"))
}
pos.push(p)
}
let bottom-y = -(places.len() - 1) * 0.5
draw.line((m*w, 0), (m*w, bottom-y))
draw.line((M*w, 0), (M*w, bottom-y))
})
#let compute-total(places, wrap: false, min: 0, max: 199) = {
let total = 0
for i in range(places.len() - 1) {
let p0 = places.at(i)
let p1 = places.at(i + 1)
let d = calc.abs(p0 - p1)
if wrap {
if p1 < p0 {
d = (max - p0) + (p1 - min)
// d = 0
}
}
total += d
}
return total
}