diff --git a/src/exercises/day_8.ts b/src/exercises/day_8.ts index c8630ab..a66c25f 100644 --- a/src/exercises/day_8.ts +++ b/src/exercises/day_8.ts @@ -45,7 +45,10 @@ function generate_n_shortest_distances( if ( next_distance < shortest_distance.distance && - !distances.some((d) => d.a === box_index && d.b === next_i) + !distances.some((d) => + (d.a === box_index && d.b === next_i) || + (d.b === box_index && d.a === next_i) + ) ) { shortest_distance.distance = next_distance; shortest_distance.pair_index = [box_index, next_i]; @@ -67,32 +70,28 @@ function generate_n_shortest_pairings( max_pairings: number, ): number[][] { const distance_list = generate_n_shortest_distances(box_list, max_pairings); - const circuits: number[][] = []; + const circuits: number[][] = box_list.map((_, i) => [i]); distance_list.forEach((distance) => { const a = circuits.find((c) => c.includes(distance.a)); - let b = circuits.find((c) => c.includes(distance.b)); + const b = circuits.find((c) => c.includes(distance.b)); - if (a && b) { + if (a?.length && b?.length && a !== b) { + const to_empty_index = circuits.findIndex((c) => c.includes(distance.b)); b.forEach((x) => a.push(x)); - b = []; - } else if (a) { - a.push(distance.b); - } else if (b) { - b.push(distance.a); - } else { - circuits.push([distance.a, distance.b]); + circuits[to_empty_index] = []; } }); return circuits; } -function _generate_n_shortest_pairings_old( +function _generate_n_shortest_pairings( box_list: Coordinate[], max_pairings: number, ): number[][] { const circuits: number[][] = []; + const pairings: number[][] = []; // Pair generation for (let i = 0; i < max_pairings; i++) { @@ -108,7 +107,7 @@ function _generate_n_shortest_pairings_old( const next_distance = calc_distance(box, next_box); if ( next_distance < shortest_distance.distance && - !circuits.some((pairing) => + !pairings.some((pairing) => pairing.includes(box_index) && pairing.includes(next_i) ) ) { @@ -117,6 +116,8 @@ function _generate_n_shortest_pairings_old( } } }); + // Update paring list + pairings.push(shortest_distance.pair_index); // Check shortest pairings and then push const a_circiut = circuits.find((c) => c.includes(shortest_distance.pair_index[0]) @@ -125,14 +126,6 @@ function _generate_n_shortest_pairings_old( c.includes(shortest_distance.pair_index[1]) ); - console.log(">> ", { - circuits, - a_circiut, - b_circiut, - new: shortest_distance.pair_index, - distance: shortest_distance.distance, - }); - if ( a_circiut && b_circiut ) {