feat(day_8): part A done
This commit is contained in:
@@ -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
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user