# 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. ## Implementation Define a single Go func, Cost, which calculates the cost for a given list of books based on the defined discounts. Use the following signature for func Cost: ``` func Cost(books []int) int ``` Cost will return the total cost (after discounts) in cents. For example, for a single book, the cost is 800 cents, which equals $8.00. Only integer calculations are necessary for this exercise. ## Running the tests To run the tests run the command `go test` from within the exercise directory. If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem` flags: go test -v --bench . --benchmem Keep in mind that each reviewer will run benchmarks on a different machine, with different specs, so the results from these benchmark tests may vary. ## Further information For more detailed information about the Go track, including how to get help if you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/resources). ## Source Inspired by the harry potter kata from Cyber-Dojo. [http://cyber-dojo.org](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.