summaryrefslogtreecommitdiff
path: root/go/book-store/book_store.go
blob: c5683247c41eebbfb7b1f0446329f486c628be5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package bookstore

const bookPrice = 800 // cents

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 {
		b.books[v]++
	}
	return b
}

// discount in percent
func (b basket) discount() int {
	discounts := []int{0, 0, 5, 10, 20, 25} // percent
	return discounts[len(b.books)]
}

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 {
	return newBasket(books).price()
}