const obj = JSON.parse(await Deno.readTextFile("s.json")) as { prev: string, name: string }[]; const nextTable = new Map(); for (const { prev, name } of obj) { nextTable.set(prev, name); } function main(start: string) { let ptr1 = start; let ptr2 = nextTable.get(start)!; const path = [] as string[]; while (ptr1 != ptr2) { path.push(ptr1); ptr1 = nextTable.get(ptr1)!; ptr2 = nextTable.get(ptr2)!; ptr2 = nextTable.get(ptr2)!; } path.push(ptr1); const ringNode = [ptr1]; ptr1 = nextTable.get(ptr1)!; while (ptr1 != ptr2) { ringNode.push(ptr1); ptr1 = nextTable.get(ptr1)!; } console.log(ringNode.length, ringNode); path.forEach((x, i) => { if (ringNode.includes(x)) { console.log(`%c${i - 1} %c${x}`, x.endsWith("Z") ? "color: red" : "color: white","color: green"); } else { console.log(x); } }); } ["AAA","PSA", "GHA", "FXA", "LBA", "HVA"].forEach(x => { main(x); }) //63,568,204,859 // 5,247,000,000