Решение на Poor Man's Currying от Пламен Стоев

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

Към профила на Пламен Стоев

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 6 успешни тест(а)
  • 0 неуспешни тест(а)

Код

package main
import "strings"
func Repeater(s, sep string) func(int) string {
return func(count int) string {
if count <= 0 {
return ""
}
var builder strings.Builder
builder.WriteString(s)
for ; count > 1; count -= 1 {
builder.WriteString(sep)
builder.WriteString(s)
}
return builder.String()
}
}
func Generator(gen func(int) int, initial int) func() int {
accumulator := initial
return func() int {
result := accumulator
accumulator = gen(accumulator)
return result
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
accumulator := initial
for _, arg := range args {
accumulator = reducer(accumulator, mapper(arg))
}
return accumulator
}
}

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

PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s
PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s
PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s
PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s
PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s
PASS
ok  	_/tmp/d20181024-53-1k4pz4v	0.002s

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

Пламен обнови решението на 22.10.2018 06:52 (преди 10 месеца)

+package main
+
+import "strings"
+
+func Repeater(s, sep string) func(int) string {
+ return func(count int) string {
+ if count <= 0 {
+ return ""
+ }
+
+ var builder strings.Builder
+ builder.WriteString(s)
+
+ for c := 0; c < count-1; c = c + 1 {
+ builder.WriteString(sep)
+ builder.WriteString(s)
+ }
+
+ return builder.String()
+ }
+}
+
+func Generator(gen func(int) int, initial int) func() int {
+ accumulator := initial
+
+ return func() int {
+ result := accumulator
+ accumulator = gen(accumulator)
+ return result
+ }
+}
+
+func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
+ return func(args ...int) int {
+ accumulator := initial
+
+ for _, arg := range args {
+ accumulator = reducer(accumulator, mapper(arg))
+ }
+
+ return accumulator
+ }
+}
+
+func main() {}

Пламен обнови решението на 22.10.2018 06:55 (преди 10 месеца)

package main
import "strings"
func Repeater(s, sep string) func(int) string {
return func(count int) string {
if count <= 0 {
return ""
}
var builder strings.Builder
builder.WriteString(s)
- for c := 0; c < count-1; c = c + 1 {
+ for c := 1; c < count; c += 1 {

Ooops. i би стояло къде-къде по-добре. Аз обаче ще вложа допълнително усилие и вместо да преименувам просто ще махна допълнителната променлива и ще си ползвам count като... брояч. :) Благодаря за коментара!

builder.WriteString(sep)
builder.WriteString(s)
}
return builder.String()
}
}
func Generator(gen func(int) int, initial int) func() int {
accumulator := initial
return func() int {
result := accumulator
accumulator = gen(accumulator)
return result
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
accumulator := initial
for _, arg := range args {
accumulator = reducer(accumulator, mapper(arg))
}
return accumulator
}
}
func main() {}

Пламен обнови решението на 22.10.2018 11:50 (преди 10 месеца)

package main
import "strings"
func Repeater(s, sep string) func(int) string {
return func(count int) string {
if count <= 0 {
return ""
}
var builder strings.Builder
builder.WriteString(s)
- for c := 1; c < count; c += 1 {
+ for ; count > 1; count -= 1 {
builder.WriteString(sep)
builder.WriteString(s)
}
return builder.String()
}
}
func Generator(gen func(int) int, initial int) func() int {
accumulator := initial
return func() int {
result := accumulator
accumulator = gen(accumulator)
return result
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
accumulator := initial
for _, arg := range args {
accumulator = reducer(accumulator, mapper(arg))
}
return accumulator
}
}
func main() {}

Няма нужда да предаваш main функция -- моля да я изтриеш цялата.

Лесен начин да си тестваш решението е да я сложиш в друг go файл, след което да ползваш go run . за да стартираш програмата си.

Не знаех че пречи, ще я махна веднага. package си остава main, за да може да си минат тестовете, предполагам?

Иначе за тестване най-лесно ми беше да си взема примерните тестове от repo-то и да дописвам към тях.

Пламен обнови решението на 22.10.2018 13:27 (преди 10 месеца)

package main
import "strings"
func Repeater(s, sep string) func(int) string {
return func(count int) string {
if count <= 0 {
return ""
}
var builder strings.Builder
builder.WriteString(s)
for ; count > 1; count -= 1 {
builder.WriteString(sep)
builder.WriteString(s)
}
return builder.String()
}
}
func Generator(gen func(int) int, initial int) func() int {
accumulator := initial
return func() int {
result := accumulator
accumulator = gen(accumulator)
return result
}
}
func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
return func(args ...int) int {
accumulator := initial
for _, arg := range args {
accumulator = reducer(accumulator, mapper(arg))
}
return accumulator
}
}
-
-func main() {}