From 31a1eaa9c0d694b9913a637dd4e5472c22152886 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 7 Jul 2019 12:02:20 +0200 Subject: wip --- go/book-store/book_store.go | 53 ++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/go/book-store/book_store.go b/go/book-store/book_store.go index faadeb5..c568324 100644 --- a/go/book-store/book_store.go +++ b/go/book-store/book_store.go @@ -1,48 +1,33 @@ package bookstore -var ( - discounts = []int{0, 0, 5, 10, 20, 25} // percent - bookPrice = 800 // cents -) +const bookPrice = 800 // cents -func countMax(books []int) (int, map[int]int) { - m := make(map[int]int) +type basket struct { + books map[int]int // type:count +} + +func newBasket(books []int) basket { + b := basket{books: make(map[int]int)} for _, v := range books { - m[v]++ + b.books[v]++ } - var max int - for _, v := range m { - if v > max { - max = v - } - } - return max, m + return b } -func calcPrice(baskets [][]int) int { - var sum int - for _, v := range baskets { - percent := discounts[len(v)] - price := bookPrice - bookPrice*percent/100 - sum += len(v) * price - } - return sum +// discount in percent +func (b basket) discount() int { + discounts := []int{0, 0, 5, 10, 20, 25} // percent + return discounts[len(b.books)] } -func distributeFullCountBooks(baskets [][]int, m map[int]int, n int) { - for k, v := range m { - if v == n { - for i := range baskets { - baskets[i] = append(baskets[i], k) - } - delete(m, k) - } +func (b basket) price() int { + var price int + for _, v := range b.books { + price += v * (bookPrice - bookPrice*b.discount()/100) } + return price } func Cost(books []int) int { - n, m := countMax(books) - baskets := make([][]int, n) - distributeFullCountBooks(baskets, m, n) - return calcPrice(baskets) + return newBasket(books).price() } -- cgit v1.2.3