summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-09-23 22:22:07 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-09-23 22:22:07 +0200
commit2551d7af4e75d863233c529a901375ef940ae98d (patch)
treec94040edfde2123fd7ec53194a9acf30730e2c17
parentf2e7ca36de4fe799a002250d5a35e44f69532c39 (diff)
wip
-rw-r--r--go/book-store/book_store.go48
1 files changed, 48 insertions, 0 deletions
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)
+}