lots of exercises in java... from https://github.com/exercism/java
Harikrushna Vanpariya 4759dd9be1 forth: update version file (1.4.0 -> 1.5.0) #1377 6 年之前
..
.meta forth: update version file (1.4.0 -> 1.5.0) #1377 change: update version file (1.1.0 -> 1.2.0) #1376 list-ops: update version file (2.0.0 -> 2.2.0) #1375 book-store: update version file (1.2.0 -> 1.3.0) #1373 circular-buffer: update version file (1.0.1 -> 1.1.0) #1371 ocr-numbers: update version file (1.0.0 -> 1.1.0) #1370 wordy: update version file (1.0.0 -> 1.1.0) #1362 minesweeper: update version file (1.0.0 -> 1.1.0) #1361 6 年之前
src book-store: update test suite to 1.2.0 6 年之前
README.md Adjust exercise README formatting; drop help link 7 年之前
build.gradle Format build.gradle files 7 年之前

README.md

Book Store

To try and encourage more sales of different books from a popular 5 book series, a bookshop has decided to offer discounts on multiple book purchases.

One copy of any of the five books costs $8.

If, however, you buy two different books, you get a 5% discount on those two books.

If you buy 3 different books, you get a 10% discount.

If you buy 4 different books, you get a 20% discount.

If you buy all 5, you get a 25% discount.

Note: that if you buy four books, of which 3 are different titles, you get a 10% discount on the 3 that form part of a set, but the fourth book still costs $8.

Your mission is to write a piece of code to calculate the price of any conceivable shopping basket (containing only books of the same series), giving as big a discount as possible.

For example, how much does this basket of books cost?

  • 2 copies of the first book
  • 2 copies of the second book
  • 2 copies of the third book
  • 1 copy of the fourth book
  • 1 copy of the fifth book

One way of grouping these 8 books is:

  • 1 group of 5 --> 25% discount (1st,2nd,3rd,4th,5th)
  • +1 group of 3 --> 10% discount (1st,2nd,3rd)

This would give a total of:

  • 5 books at a 25% discount
  • +3 books at a 10% discount

Resulting in:

  • 5 x (8 - 2.00) == 5 x 6.00 == $30.00
  • +3 x (8 - 0.80) == 3 x 7.20 == $21.60

For a total of $51.60

However, a different way to group these 8 books is:

  • 1 group of 4 books --> 20% discount (1st,2nd,3rd,4th)
  • +1 group of 4 books --> 20% discount (1st,2nd,3rd,5th)

This would give a total of:

  • 4 books at a 20% discount
  • +4 books at a 20% discount

Resulting in:

  • 4 x (8 - 1.60) == 4 x 6.40 == $25.60
  • +4 x (8 - 1.60) == 4 x 6.40 == $25.60

For a total of $51.20

And $51.20 is the price with the biggest discount.

Running the tests

You can run all the tests for an exercise by entering

$ gradle test

in your terminal.

Source

Inspired by the harry potter kata from Cyber-Dojo. http://cyber-dojo.org

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.