Решение на Poor Man's Currying от Милуш Карадимов

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

Към профила на Милуш Карадимов

Резултати

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

Код

package main
import (
"strings"
)
func Repeater(s, sep string) func(int) string {
return func(i int) string {
var strBuilder strings.Builder
for index := 0; index < i; index++ {
strBuilder.WriteString(s)
if index+1 < i {
strBuilder.WriteString(sep)
}
}
return strBuilder.String()
}
}
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 index := 0; index < len(args); index++ {
args[index] = mapper(args[index])
}
var resultReducer int = initial
for _, v := range args {
resultReducer = reducer(initial, v)
initial = resultReducer
}
return resultReducer
}
}

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

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

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

Милуш обнови решението на 21.10.2018 14:37 (преди 10 месеца)

+package main
+
+import (
+ "strings"
+)
+
+func Repeater(s, sep string) func(int) string {
+ return func(i int) string {
+ var strBuilder strings.Builder
+
+ for index := 0; index < i; index++ {
+ strBuilder.WriteString(s)
+ if index+1 < i {
+ strBuilder.WriteString(sep)
+ }
+
+ }
+ return strBuilder.String()
+ }
+}
+
+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 index := 0; index < len(args); index++ {
+ args[index] = mapper(args[index])
+ }
+
+ var resultReducer int
+ for _, v := range args {
+ resultReducer = reducer(initial, v)
+ initial = resultReducer
+ }
+
+ return resultReducer
+ }
+}

Милуш обнови решението на 23.10.2018 12:40 (преди 10 месеца)

package main
import (
"strings"
)
func Repeater(s, sep string) func(int) string {
return func(i int) string {
var strBuilder strings.Builder
for index := 0; index < i; index++ {
strBuilder.WriteString(s)
if index+1 < i {
strBuilder.WriteString(sep)
}
}
return strBuilder.String()
}
}
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 index := 0; index < len(args); index++ {
args[index] = mapper(args[index])
}
- var resultReducer int
+ var resultReducer int = initial
for _, v := range args {
resultReducer = reducer(initial, v)
initial = resultReducer
}
return resultReducer
}
-}
+}

Привет, благодаря за съвета, хванах един проблем и промених кода. А да попитам, при подаден аргумент "nil" за функция нужно ли е да го обработя също?

Примерно такъв сценарий: powerSum := MapReducer( nil, nil, 5, )