Kalkulator podziału kosztów grupowych
Aplikacja do dzielenia kosztów grupowych (np. wyjście, wycieczka): wpisz osoby, ile każda zapłaciła, a system obliczy kto komu ile jest winien, żeby wyrównać rachunki.
This content is not available in your language yet.
Kalkulator podziału kosztów grupowych
Aplikacja do dzielenia kosztów grupowych (np. wyjście, wycieczka): wpisz osoby, ile każda zapłaciła, a system obliczy kto komu ile jest winien, żeby wyrównać rachunki.
Algorytmy podziału kosztów są w aplikacjach takich jak Splitwise, Tricount czy Revolut. Nauka balansowania sald to klasyczny problem algorytmiczny z praktycznym zastosowaniem.
{ "group": { "people": ["Jan", "Anna", "Piotr"], "expenses": [ {"payer": "Jan", "description": "Pizza", "amount": 60.00}, {"payer": "Anna", "description": "Napoje", "amount": 30.00}, {"payer": "Piotr", "description": "Parking", "amount": 15.00} ] }}<?php// Obliczenie sald i transferówfunction calculateSettlement(array $people, array $expenses): array { $count = count($people); $total = array_sum(array_column($expenses, 'amount')); $share = $total / $count;
// Oblicz ile każdy zapłacił $paid = array_fill_keys($people, 0.0); foreach ($expenses as $expense) { $paid[$expense['payer']] += $expense['amount']; }
// Saldo = zapłacone - należne $balances = []; foreach ($people as $person) { $balances[$person] = round($paid[$person] - $share, 2); }
// Generuj transfery: od tych z saldem ujemnym do tych z dodatnim $debtors = array_filter($balances, fn($b) => $b < 0); $creditors = array_filter($balances, fn($b) => $b > 0); arsort($creditors); asort($debtors);
$transfers = []; // Uproszczona wersja: każdy dłużnik oddaje największemu wierzycielowi foreach ($debtors as $debtor => $debt) { foreach ($creditors as $creditor => $credit) { if ($debt >= 0) break; $amount = min(abs($debt), $credit); if ($amount > 0.01) { $transfers[] = [ 'from' => $debtor, 'to' => $creditor, 'amount' => round($amount, 2), ]; $debtors[$debtor] += $amount; $creditors[$creditor] -= $amount; } } } return $transfers;}Splitwise po polsku!
Zacznij od obliczenia sumy i udziału. Potem salda. Na końcu algorytm transferów. Każdy krok jest osobną funkcją.