Skip to content

Instantly share code, notes, and snippets.

@codingricky
Last active June 25, 2019 17:09
Show Gist options
  • Save codingricky/2913880 to your computer and use it in GitHub Desktop.
Save codingricky/2913880 to your computer and use it in GitHub Desktop.
DiUS Shopping Coding Exercise

DiUS is starting a computer store. You have been engaged to build the checkout system. We will start with the following products in our catalogue

SKU Name Price
ipd Super iPad $549.99
mbp MacBook Pro $1399.99
atv Apple TV $109.50
vga VGA adapter $30.00

As we're launching our new computer store, we would like to have a few opening day specials.

  • we're going to have a 3 for 2 deal on Apple TVs. For example, if you buy 3 Apple TVs, you will pay the price of 2 only
  • the brand new Super iPad will have a bulk discounted applied, where the price will drop to $499.99 each, if someone buys more than 4
  • we will bundle in a free VGA adapter free of charge with every MacBook Pro sold

As our Sales manager is quite indecisive, we want the pricing rules to be as flexible as possible as they can change in the future with little notice.

Our checkout system can scan items in any order.

The interface to our checkout looks like this (shown in java):

  Checkout co = new Checkout(pricingRules);
  co.scan(item1);
  co.scan(item2);
  co.total();

Your task is to implement a checkout system that fulfils the requirements described above.

Example scenarios

SKUs Scanned: atv, atv, atv, vga Total expected: $249.00

SKUs Scanned: atv, ipd, ipd, atv, ipd, ipd, ipd Total expected: $2718.95

SKUs Scanned: mbp, vga, ipd Total expected: $1949.98

Notes on implementation:

  • use Java, Javascript, Ruby, Kotlin, Swift, or Groovy
  • try not to spend more than 2 hours maximum. (We don't want you to lose a weekend over this!)
  • don't build guis etc, we're more interested in your approach to solving the given task, not how shiny it looks
  • don't worry about making a command line interface to the application
  • don't use any frameworks (rails, spring etc), or any external jars/gems (unless it's for testing or build/dependency mgt)

When you've finished, send through the link to your github-repo. Happy coding

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment