A bill-splitting application to track shared expenses in a group, developed with Node and React.
We implemented a greedy algorithm to minimise the number of transactions required to settle the debts between all members of a group when the user toggles 'Smart Split'. The algorithm runs in O(n log n), where n is the number of users – this means that it scales well with the number of users.
A simple example of this algorithm is shown below. In this example, Alice owes Bob £10 and Bob owes Charlie £10 for a total of two transactions. The algorithm will suggest that Alice pays Charlie £10 directly, meaning only one transaction is required to settle the debts.
This may seem like a trivial problem to solve, but it becomes more complex as the number of users increases. The following diagram shows a more complex example when there are six users with six transactions between them. This is reduced to only four transactions by the algorithm.
- Create a file in the
server
directory with the name:.env
- Open the file in a text editor (such as Notepad or TextEdit).
- Add the following line to the file, replacing
<uri>
with the URI of your MongoDB database:
MONGODB_URI="<uri>"
- Save the file.
- Open a terminal window.
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd server
- Install dependencies:
npm install
- Run the server:
node app
- Open a new terminal window (separate to the previous one).
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd client
- Install dependencies:
npm install
- Run the client:
npm start
- Browse to the URL provided in the terminal window.
- Open a terminal window.
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd server
- Install dependencies:
npm install
- Run the unit tests:
npm test
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
For more information, please see the Contributing Guide.