Skip to content

Instantly share code, notes, and snippets.

@palcalde
Created November 14, 2017 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save palcalde/3eef0fe230d78190891d9d691f29b720 to your computer and use it in GitHub Desktop.
Save palcalde/3eef0fe230d78190891d9d691f29b720 to your computer and use it in GitHub Desktop.
# Cabify Mobile Challenge
Besides providing exceptional transportation services, Cabify also runs a physical store which sells (only) 3 products:
```
Code | Name | Price
-------------------------------------------------
VOUCHER | Cabify Voucher | 5.00€
TSHIRT | Cabify T-Shirt | 20.00€
MUG | Cabify Coffee Mug | 7.50€
```
Various departments have insisted on the following discounts:
* The marketing department believes in 2-for-1 promotions (buy two of the same product, get one free), and would like for there to be a 2-for-1 special on `VOUCHER` items.
* The CFO insists that the best way to increase sales is with discounts on bulk purchases (buying x or more of a product, the price of that product is reduced), and demands that if you buy 3 or more `TSHIRT` items, the price per unit should be 19.00€.
Cabify's checkout process allows for items to be scanned in any order, and should return the total amount to be paid.
Examples:
Items: VOUCHER, TSHIRT, MUG
Total: 32.50€
Items: VOUCHER, TSHIRT, VOUCHER
Total: 25.00€
Items: TSHIRT, TSHIRT, TSHIRT, VOUCHER, TSHIRT
Total: 81.00€
Items: VOUCHER, TSHIRT, VOUCHER, VOUCHER, MUG, TSHIRT, TSHIRT
Total: 74.50€
# To do
Implement a simple iOS app where a user can pick products from a list and checkout them to get the resulting price. You should get the list of products from [here](https://api.myjson.com/bins/4bwec). We don't need complex animations or layouts, but it should be functional and easy to use.
In Cabify we use RubyMotion to build our iOS app natively while writing Ruby code. We want you to feel comfortable during the exercise, so feel free to pick the best platform for you: Objective-C, Swift or RubyMotion.
**The code should:**
- Be written as production-ready code. You will write production code.
- Be easy to grow and easy to add new functionality.
- Have notes attached, explaning the solution and why certain things are included and others are left out.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment