prowm/resolver.ts
2025-02-06 02:21:37 +01:00

39 lines
1016 B
TypeScript

import { Board, Column, Task } from "./rasterizer.ts";
export class Resolver {
private taskPaths = new Map<number, number[]>();
public constructor(
private board: Board,
) {
this.resolveBoard();
}
public taskPath(task: Task): number[] {
return this.taskPaths.get(task.id)!;
}
public taskIdPath(id: number): number[] {
return this.taskPaths.get(id)!;
}
private resolveBoard() {
for (const [idx, column] of this.board.columns.entries()) {
this.resolveColumn(column, idx);
}
}
private resolveColumn(column: Column, columnIdx: number) {
for (const [taskIdx, task] of column.tasks.entries()) {
this.resolveTask(task, [columnIdx, taskIdx]);
}
}
private resolveTask(task: Task, path: number[]) {
this.taskPaths.set(task.id, path);
for (const [idx, subTask] of task.subTasks.entries()) {
this.resolveTask(subTask, [...path, idx]);
}
}
}