Задача «Джим и заказы» на HackerRank заключается в определении порядка обработки заказов клиентов на основе их номеров заказов и времени подготовки. Каждый заказ обозначается номером заказа и временем приготовления. Цель — найти порядок, в котором должны обслуживаться клиенты, учитывая как номер заказа, так и время подготовки.
Вот пример решения на JavaScript с использованием различных методов:
- Сортировка массива объектов:
function jimOrders(orders) {
// Add the order number and preparation time as properties to each order
orders = orders.map((order, index) => ({ orderNumber: index + 1, preparationTime: order[0] + order[1] }));
// Sort the orders based on the preparation time in ascending order
orders.sort((a, b) => a.preparationTime - b.preparationTime);
// Extract the order numbers in the sorted order
const result = orders.map(order => order.orderNumber);
return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]
- Использование методов массива, таких как
map
,sort
иreduce
:
function jimOrders(orders) {
const result = orders
.map((order, index) => ({ orderNumber: index + 1, preparationTime: order[0] + order[1] }))
.sort((a, b) => a.preparationTime - b.preparationTime)
.reduce((acc, order) => {
acc.push(order.orderNumber);
return acc;
}, []);
return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]
- Использование метода
Array.from
:
function jimOrders(orders) {
const result = Array.from({ length: orders.length }, (_, index) => index + 1)
.sort((a, b) => orders[a - 1][0] + orders[a - 1][1] - orders[b - 1][0] - orders[b - 1][1]);
return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]