#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 }