#let schedule-fcfs(places) = { return places } #let schedule-sstf(places) = { let places = places let cur = places.remove(0) let result = (cur,) while places.len() != 0 { let best-d = none let best-i = none for (i, val) in places.enumerate() { let d = calc.abs(cur - val) if best-i == none or d < best-d { best-d = d best-i = i } } cur = places.remove(best-i) result.push(cur) } return result } #let schedule-scan(places, initial-dir, min, max) = { assert(initial-dir in (left, right)) let first = places.first() let places = places.sorted() let i = places.position(v => v == first) let left-side = places.slice(0, i) let right-side = places.slice(i+1) let result = if initial-dir == left { (first,) + left-side.rev() + (min,) + right-side } else { (first,) + right-side + (max,) + left-side.rev() } return result } #let schedule-cscan(places, min, max) = { let first = places.first() let places = places.sorted() let i = places.position(v => v == first) let left-side = places.slice(0, i) let right-side = places.slice(i+1) return (first,) + right-side + (max, min) + left-side } #let schedule-clook(places) = { let first = places.first() let places = places.sorted() let i = places.position(v => v == first) let left-side = places.slice(0, i) let right-side = places.slice(i+1) return (first,) + right-side + left-side }