Ad
Code
Diff
  • from typing import List
    from preloaded import TreasuryJob, Transfer, Settlement
    
    class TreasuryService:
        def calculate(self, transfers: List[Transfer]) -> TreasuryJob:
            job = TreasuryJob()
            job.settlements = [] 
            return job
    • ##
    • from typing import List
    • from preloaded import TreasuryJob, Transfer, Settlement
    • class TreasuryService:
    • def calculate(self, transfers: List[Transfer]) -> TreasuryJob:
    • job = TreasuryJob()
    • job.settlements = []
    • return job
Code
Diff
  • import { TreasuryJob, Transfer, Settlement } from './preloaded'
    
    export class TreasuryService {
      public calculate(transfers: Transfer[]): TreasuryJob {
        const job = new TreasuryJob();
        job.setSettlements([]);
        return job;
      }
    }
    • ##
    • import { TreasuryJob, Transfer, Settlement } from './preloaded'
    • export class TreasuryService {
    • public calculate(transfers: Transfer[]): TreasuryJob {
    • const job = new TreasuryJob();
    • job.setSettlements([]);
    • return job;
    • }
    • }
Code
Diff
  • using System.Collections.Generic;
    using System.Linq;
    
    public class TreasuryService
    {
        public TreasuryJob Calculate(List<Transfer> transfers) 
        {
            return new TreasuryJob(new List<Settlement>());
        }
    }
    • ##
    • using System.Collections.Generic;
    • using System.Linq;
    • public class TreasuryService
    • {
    • public TreasuryJob Calculate(List<Transfer> transfers)
    • {
    • return new TreasuryJob(new List<Settlement>());
    • }
    • }
Code
Diff
  • class TreasuryService {
        fun calculate(transfers: List<Transfer>): TreasuryJob {
            val job = TreasuryJob()
            job.setSettlements(mutableListOf())
            return job
        }
    }
    • ##
    • class TreasuryService {
    • fun calculate(transfers: List<Transfer>): TreasuryJob {
    • val job = TreasuryJob()
    • job.setSettlements(mutableListOf())
    • return job
    • }
    • }
Code
Diff
  • import java.util.ArrayList;
    import java.util.List;
    
    public class TreasuryService {
        public TreasuryJob calculate(List<Transfer> transfers) {
            TreasuryJob job = new TreasuryJob();
            job.setSettlements(new ArrayList<>());
            return job;
        }
    }
    • ##
    • import java.util.ArrayList;
    • import java.util.List;
    • public class TreasuryService {
    • public TreasuryJob calculate(List<Transfer> transfers) {
    • TreasuryJob job = new TreasuryJob();
    • job.setSettlements(new ArrayList<>());
    • return job;
    • }
    • }

Story:

Imagine you and your friends are constantly sending each other money during the day. For example: Alice pays Bob for lunch, Bob pays Charlie for coffee, and so on. At the end of the day, instead of remembering every single transfer, you just want to know the final balance. We call this the settlement problem.

Task:

Write a function calculate(transfers) that takes a list of transfers between people and produces a simplified list of settlements.

  • A Transfer means one person gave money to another.
  • A Settlement means the final simplified result of all transfers between two people.

The function should combine multiple transfers in the same direction, and net out opposite transfers (so we don't list both A → B and B → A, only the final difference).

Input:

A list of Transfer objects.

  • Each transfer has:
    • from (string) – the sender's name
    • to (string) – the receiver's name
    • amount (number) – how much money was sent

Output:

A TreasuryJob object containing a list of Settlement objects.

  • Each settlement has:
    • from (string) – who finally owes
    • to (string) – who should receive
    • amount (number) – the net amount

Rules:

  • Combine transfers in the same direction.
    • e.g. Alice → Bob: 10 and Alice → Bob: 5 → Alice → Bob: 15
  • Net opposite transfers.
    • e.g. Alice → Bob: 10 and Bob → Alice: 7 → Alice → Bob: 3

      or equivalently:

    • e.g. Alice → Bob: 10 and Bob → Alice: 7 → Bob → Alice: -3

  • Keeping 0 amounts is allowed.
    • e.g. Alice → Bob: 5 and Bob → Alice: 5 → Alice → Bob: 0
##
Code
Diff
  • from typing import List
    from preloaded import TreasuryJob, Transfer, Settlement
    
    class TreasuryService:
        def calculate(self, transfers: List[Transfer]) -> TreasuryJob:
            job = TreasuryJob()
            job.settlements = [] 
            return job
    • ##
    • from typing import List
    • from preloaded import TreasuryJob, Transfer, Settlement
    • class TreasuryService:
    • def calculate(self, transfers: List[Transfer]) -> TreasuryJob:
    • job = TreasuryJob()
    • job.settlements = []
    • return job
Code
Diff
  • import { TreasuryJob, Transfer, Settlement } from './preloaded'
    
    export class TreasuryService {
      public calculate(transfers: Transfer[]): TreasuryJob {
        const job = new TreasuryJob();
        job.setSettlements([]);
        return job;
      }
    }
    • ##
    • import { TreasuryJob, Transfer, Settlement } from './preloaded'
    • export class TreasuryService {
    • public calculate(transfers: Transfer[]): TreasuryJob {
    • const job = new TreasuryJob();
    • job.setSettlements([]);
    • return job;
    • }
    • }
Code
Diff
  • using System.Collections.Generic;
    using System.Linq;
    
    public class TreasuryService
    {
        public TreasuryJob Calculate(List<Transfer> transfers) 
        {
            return new TreasuryJob(new List<Settlement>());
        }
    }
    • ##
    • using System.Collections.Generic;
    • using System.Linq;
    • public class TreasuryService
    • {
    • public TreasuryJob Calculate(List<Transfer> transfers)
    • {
    • return new TreasuryJob(new List<Settlement>());
    • }
    • }
Code
Diff
  • class TreasuryService {
        fun calculate(transfers: List<Transfer>): TreasuryJob {
            val job = TreasuryJob()
            job.setSettlements(mutableListOf())
            return job
        }
    }
    • ##
    • class TreasuryService {
    • fun calculate(transfers: List<Transfer>): TreasuryJob {
    • val job = TreasuryJob()
    • job.setSettlements(mutableListOf())
    • return job
    • }
    • }
Code
Diff
  • import java.util.ArrayList;
    import java.util.List;
    
    public class TreasuryService {
        public TreasuryJob calculate(List<Transfer> transfers) {
            TreasuryJob job = new TreasuryJob();
            job.setSettlements(new ArrayList<>());
            return job;
        }
    }
    • ##
    • import java.util.ArrayList;
    • import java.util.List;
    • public class TreasuryService {
    • public TreasuryJob calculate(List<Transfer> transfers) {
    • TreasuryJob job = new TreasuryJob();
    • job.setSettlements(new ArrayList<>());
    • return job;
    • }
    • }