From 2551d7af4e75d863233c529a901375ef940ae98d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 23 Sep 2018 22:22:07 +0200 Subject: wip --- go/book-store/book_store.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 go/book-store/book_store.go diff --git a/go/book-store/book_store.go b/go/book-store/book_store.go new file mode 100644 index 0000000..faadeb5 --- /dev/null +++ b/go/book-store/book_store.go @@ -0,0 +1,48 @@ +package bookstore + +var ( + discounts = []int{0, 0, 5, 10, 20, 25} // percent + bookPrice = 800 // cents +) + +func countMax(books []int) (int, map[int]int) { + m := make(map[int]int) + for _, v := range books { + m[v]++ + } + var max int + for _, v := range m { + if v > max { + max = v + } + } + return max, m +} + +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 +} + +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 Cost(books []int) int { + n, m := countMax(books) + baskets := make([][]int, n) + distributeFullCountBooks(baskets, m, n) + return calcPrice(baskets) +} -- cgit v1.2.3