feat(day_8): part A done

This commit is contained in:
2025-12-10 08:18:06 +01:00
parent 464206c04c
commit c667a2f72a

View File

@@ -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
) {