Split a bill without losing a kuruş
A table of friends splits the bill. The app has to hand out whole minor units that add back to exactly what was charged.
- Everyone pays the same, except that the remainder is handed out one unit at a time, starting from the first person.
- The shares must add back to the total exactly.
- Nobody at the table, or a negative total, gives an empty list.
split_bill(total: int, people: int) → list<int>
Where you start
def split_bill(total: int, people: int) -> list[int]:
Worked examples
| Call | Result |
|---|---|
split_bill(1000, 3) | [334, 333, 333] |
split_bill(1000, 4) | [250, 250, 250, 250] |
split_bill(10, 4) | [3, 3, 2, 2] |
split_bill(0, 3) | [0, 0, 0] |
Hint
Base share is total / people. The first (total % people) people pay one more.
Reference solution in Python
def split_bill(total: int, people: int) -> list[int]:
if people <= 0 or total < 0:
return []
base, extra = divmod(total, people)
return [base + 1 if i < extra else base for i in range(people)]