1 | expenses = {
"2023-01": {
"01": {
"food": [ 22.11, 43, 11.72, 2.2, 36.29, 2.5, 19 ],
"fuel": [ 210.22 ]
},
"02": {
"food": [ 11.30, 43, 21.30, 36.25, ],
"fuel": [ 212.12 ]
},
"03": {
"food": [ 21.15, 11, 23.55, 19.95, ],
"fuel": [ 212.12 ]
},
"09": {
"food": [ 11.9 ],
"fuel": [ 190.22 ]
}
},
"2023-03": {
"07": {
"food": [ 20, 11.9, 30.20, 11.9 ]
},
"04": {
"food": [ 10.20, 11.50, 2.5 ],
"fuel": []
},
},
"2023-04": {}
};
function solution1(expenses){
let result = null;
let totalExpenses = [];
Object.entries(expenses).forEach(([month, days]) => {
Object.entries(days).sort().filter(([day, expenseTypes]) => day <= 7).some(([day, expenseTypes]) =>{
const date = new Date("".concat(month, "-", day));
if (date.getDay() + 1 <= day && date.getDay() !== 0)
return true;
Object.values(expenseTypes).forEach(expenses => {
expenses = expenses.filter(expense => typeof expense === 'number')
totalExpenses = totalExpenses.concat(expenses);
});
return false;
})
})
totalExpenses = totalExpenses.sort((a,b) => a - b);
const middleIndex = Math.floor((totalExpenses.length - 1) / 2);
const median = totalExpenses.length % 2 === 1 ? totalExpenses[middleIndex] : (totalExpenses[middleIndex] + totalExpenses[middleIndex + 1]) / 2
if (median >= 0)
result = median
return result
}
console.log(solution1(expenses));
| ready |
2 | expenses = {
"2023-01": {
"01": {
"food": [ 22.11, 43, 11.72, 2.2, 36.29, 2.5, 19 ],
"fuel": [ 210.22 ]
},
"02": {
"food": [ 11.30, 43, 21.30, 36.25, ],
"fuel": [ 212.12 ]
},
"03": {
"food": [ 21.15, 11, 23.55, 19.95, ],
"fuel": [ 212.12 ]
},
"09": {
"food": [ 11.9 ],
"fuel": [ 190.22 ]
}
},
"2023-03": {
"07": {
"food": [ 20, 11.9, 30.20, 11.9 ]
},
"04": {
"food": [ 10.20, 11.50, 2.5 ],
"fuel": []
},
},
"2023-04": {}
};
function quickSort(arr) {
if (arr.length < 2) {
return arr;
}
const pivot = arr[Math.floor(Math.random() * arr.length)];
let left = [];
let right = [];
let equal = [];
for (let val of arr) {
if (val < pivot) {
left.push(val);
} else if (val > pivot) {
right.push(val);
} else {
equal.push(val);
}
}
return [
...quickSort(left),
...equal,
...quickSort(right)
];
}
function solution2(expenses){
let result = null;
let firstWeekExpenses = [];
for( var month in expenses )
{
for (var day in expenses[month])
{
if (day > 7)
continue
date = new Date("".concat(month, "-", day))
if (date.getDay() + 1 > day || date.getDay() === 0)
firstWeekExpenses = firstWeekExpenses.concat(Object.values(expenses[month][day]))
}
}
firstWeekExpenses = quickSort(firstWeekExpenses.flat());
console.log(firstWeekExpenses);
const middleIndex = Math.floor((firstWeekExpenses.length - 1) / 2);
const median = firstWeekExpenses.length % 2 === 1 ? firstWeekExpenses[middleIndex] : (firstWeekExpenses[middleIndex] + firstWeekExpenses[middleIndex + 1]) / 2
if (median >= 0)
result = median
return result
}
console.log(solution2(expenses));
| ready |