Решение на Poor Man's Currying от Михаил Копчев

Обратно към всички решения

Към профила на Михаил Копчев

Резултати

  • 8 точки от тестове
  • 1 бонус точка
  • 9 точки общо
  • 5 успешни тест(а)
  • 1 неуспешни тест(а)

Код

package main
func Repeater(s, sep string) func(int) string {
return func(times int) string {
result := ""
if times <= 0 {
return result
}
for index := 0; index < times-1; index++ {
result += s + sep
}
result += s
return result
}
}
func Generator(gen func(int) int, initial int) func() int {
return func() int {
defer func() { initial = gen(initial) }()
return initial
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
n := len(args)
array := make([]int, n)
for i, v := range args {
array[i] = mapper(v)
}
for _, v := range array {
initial = reducer(initial, v)
}
return initial
}
}

Лог от изпълнението

PASS
ok  	_/tmp/d20181024-53-3umteg	0.002s
PASS
ok  	_/tmp/d20181024-53-3umteg	0.002s
PASS
ok  	_/tmp/d20181024-53-3umteg	0.002s
PASS
ok  	_/tmp/d20181024-53-3umteg	0.002s
PASS
ok  	_/tmp/d20181024-53-3umteg	0.003s
--- FAIL: TestMapReducerMultipleCalls (0.00s)
    solution_test.go:318: Expected 45 but got 81 after 2nd call
FAIL
exit status 1
FAIL	_/tmp/d20181024-53-3umteg	0.002s

История (2 версии и 2 коментара)

Михаил обнови решението на 23.10.2018 08:48 (преди 10 месеца)

+package main
+
+func Repeater(s, sep string) func(int) string {
+ return func(times int) string {
+ if times <= 0 {
+ return ""
+ }
+ result := ""
+ for index := 0; index < times-1; index++ {
+ result += s + sep
+ }
+ result += s
+ return result
+ }
+}
+
+func Generator(gen func(int) int, initial int) func() int {
+
+ return func() int {
+ defer func() { initial = gen(initial) }()
+ return initial
+ }
+}
+
+func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
+ return func(args ...int) int {
+ for i, v := range args {
+ args[i] = mapper(v)
+ }
+ for _, v := range args {
+ initial = reducer(initial, v)
+ }
+ return initial
+ }
+}

Михаил обнови решението на 23.10.2018 22:55 (преди 10 месеца)

package main
func Repeater(s, sep string) func(int) string {
return func(times int) string {
+ result := ""
if times <= 0 {
- return ""
+ return result
}
- result := ""
for index := 0; index < times-1; index++ {
result += s + sep
}
result += s
return result
}
}
func Generator(gen func(int) int, initial int) func() int {
return func() int {
defer func() { initial = gen(initial) }()
return initial
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
+ n := len(args)
+ array := make([]int, n)
for i, v := range args {
- args[i] = mapper(v)
+ array[i] = mapper(v)
}
- for _, v := range args {
+
+ for _, v := range array {
initial = reducer(initial, v)
}
return initial
}
}