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) }