function nearestSurvivingPosition( served: (string | null)[], surviving: Set, from: number, direction: "below" | "above", ): number | undefined { if (direction === "below") { for (let q = from - 1; q >= 0; q--) { const hash = served[q]; if (hash !== null && surviving.has(hash)) return q; } return undefined; } for (let q = from + 1; q < served.length; q++) { const hash = served[q]; if (hash !== null && surviving.has(hash)) return q; } return undefined; } export function currentPositionOfDrifted( served: (string | null)[], currentPositions: Map, surviving: Set, servedIndex: number, delta: number, ): number { const below = nearestSurvivingPosition(served, surviving, servedIndex, "below"); if (below !== undefined) return currentPositions.get(served[below]!)! + 1; const above = nearestSurvivingPosition(served, surviving, servedIndex, "above"); if (above !== undefined) return currentPositions.get(served[above]!)! - 1; return servedIndex + delta; }