feat(day_8): part A done
This commit is contained in:
@@ -45,7 +45,10 @@ function generate_n_shortest_distances(
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
next_distance < shortest_distance.distance &&
|
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.distance = next_distance;
|
||||||
shortest_distance.pair_index = [box_index, next_i];
|
shortest_distance.pair_index = [box_index, next_i];
|
||||||
@@ -67,32 +70,28 @@ function generate_n_shortest_pairings(
|
|||||||
max_pairings: number,
|
max_pairings: number,
|
||||||
): number[][] {
|
): number[][] {
|
||||||
const distance_list = generate_n_shortest_distances(box_list, max_pairings);
|
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) => {
|
distance_list.forEach((distance) => {
|
||||||
const a = circuits.find((c) => c.includes(distance.a));
|
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.forEach((x) => a.push(x));
|
||||||
b = [];
|
circuits[to_empty_index] = [];
|
||||||
} else if (a) {
|
|
||||||
a.push(distance.b);
|
|
||||||
} else if (b) {
|
|
||||||
b.push(distance.a);
|
|
||||||
} else {
|
|
||||||
circuits.push([distance.a, distance.b]);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return circuits;
|
return circuits;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _generate_n_shortest_pairings_old(
|
function _generate_n_shortest_pairings(
|
||||||
box_list: Coordinate[],
|
box_list: Coordinate[],
|
||||||
max_pairings: number,
|
max_pairings: number,
|
||||||
): number[][] {
|
): number[][] {
|
||||||
const circuits: number[][] = [];
|
const circuits: number[][] = [];
|
||||||
|
const pairings: number[][] = [];
|
||||||
|
|
||||||
// Pair generation
|
// Pair generation
|
||||||
for (let i = 0; i < max_pairings; i++) {
|
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);
|
const next_distance = calc_distance(box, next_box);
|
||||||
if (
|
if (
|
||||||
next_distance < shortest_distance.distance &&
|
next_distance < shortest_distance.distance &&
|
||||||
!circuits.some((pairing) =>
|
!pairings.some((pairing) =>
|
||||||
pairing.includes(box_index) && pairing.includes(next_i)
|
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
|
// Check shortest pairings and then push
|
||||||
const a_circiut = circuits.find((c) =>
|
const a_circiut = circuits.find((c) =>
|
||||||
c.includes(shortest_distance.pair_index[0])
|
c.includes(shortest_distance.pair_index[0])
|
||||||
@@ -125,14 +126,6 @@ function _generate_n_shortest_pairings_old(
|
|||||||
c.includes(shortest_distance.pair_index[1])
|
c.includes(shortest_distance.pair_index[1])
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log(">> ", {
|
|
||||||
circuits,
|
|
||||||
a_circiut,
|
|
||||||
b_circiut,
|
|
||||||
new: shortest_distance.pair_index,
|
|
||||||
distance: shortest_distance.distance,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
a_circiut && b_circiut
|
a_circiut && b_circiut
|
||||||
) {
|
) {
|
||||||
|
|||||||
Reference in New Issue
Block a user