62 lines
1.4 KiB
Typst
62 lines
1.4 KiB
Typst
#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
|
|
} |