Мартин обнови решението на 19.10.2018 18:02 (преди 10 месеца)
+// You can edit this code!
+// Click here and start typing.
+package main
+
+import "fmt"
+
+func Repeater(s, sep string) func(int) string {
+ return func(times int) string {
+ result := ""
+
+ for i := 0; i < times; i++ {
+ result += s
+ if i < times-1 {
+ result += sep
+ }
+ }
+ return result
+
+ }
+}
+
+func Generator(gen func(int) int, initial int) func() int {
+ return func() int {
+ result := initial
+ initial = gen(initial)
+ return result
+ }
+}
+
+func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
+
+ return func(nums ...int) int {
+
+ for i := 0; i < len(nums); i++ {
+ nums[i] = mapper(nums[i])
+ }
+
+ result := reducer(initial, nums[0])
+
+ for i := 1; i < len(nums); i++ {
+ result = reducer(result, nums[i])
+ }
+
+ return result
+ }
Тази функция ми се вижда излишно сложна. Помисли как можеш да имаш само едно споменаване на reducer
в нея.
+
+}
+
+func main() {
main
функцията не ти трябва в решението. Спокойно може да я сложиш в съседен файл на този, който предаваш.
+ //1
+ fmt.Println(Repeater("foo", ":")(3))
+
+ //2
+ counter := Generator(
+ func(v int) int { return v + 1 },
+ 0,
+ )
+
+ power := Generator(
+ func(v int) int { return v * v },
+ 2,
+ )
+
+ counter()
+ counter()
+ counter()
+ power()
+ power()
+ power()
+
+ fmt.Println(counter())
+ fmt.Println(power())
+
+ /////3
+
+ powerSum := MapReducer(
+ func(v int) int { return v * v },
+ func(a, v int) int { return a + v },
+ 0,
+ )
+
+ fmt.Println(powerSum(1, 2, 3, 4)) // 30
+}
Ок няма да предавам повече main()-a. За двойното споменаване на reducer мога да добавя initial като елемент в nums. Това ли имаш предивд ти ?
Нямах конкретен подход за поправка в предвид. Просто мисля ще е полезно да се направи по две причини. Кода ще стане по - коректен тъй като в момента не е верен и това двойно споменаване е свързано с причината. И ще стане по - ясен за четене.
Тази функция ми се вижда излишно сложна. Помисли как можеш да имаш само едно споменаване на
reducer
в нея.main
функцията не ти трябва в решението. Спокойно може да я сложиш в съседен файл на този, който предаваш.