what

Benchmark created on


Test runner

Ready to run.

Testing in
TestOps/sec
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)
    ];
  }

//rozwiązanie drugie jest szybsze i czystsze
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

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.