Решение на Log Parsing от Иван Главчев

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

Към профила на Иван Главчев

Резултати

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

Код

package main
func Filter(data []string, predicate func(string) bool) []string {
result := make([]string, 0)
for _, i := range data {
if predicate(i) {
result = append(result, i)
}
}
return result
}
func Map(data []string, mapper func(string) string) []string {
result := make([]string, 0, 0)
for _, i := range data {
result = append(result, mapper(i))
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
if len(data) == 0 {
return ""
}
result := data[0]
for i := 1; i < len(data); i++ {
result = combinator(result, data[i])
}
return result
}
func Any(data []string, predicate func(string) bool) bool {
for _, i := range data {
if predicate(i) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
return !Any(data, func(s string) bool {
return !predicate(s)
})
}

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

PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.012s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s
PASS
ok  	_/tmp/d20141023-10368-159pcwl	0.011s

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

Иван обнови решението на 15.10.2014 13:37 (преди над 3 години)

+package main
+
+func Filter(data []string, predicate func(string) bool) []string {
+ result := make([]string, 5, 10)
+ for _, i := range data {
+ if predicate(i) {
+ result = append(result, i)
+ }
+ }
+ return result
+}
+
+func Map(data []string, mapper func(string) string) []string {
+ result := make([]string, 5, 10)
+ for _, i := range data {
+ result = append(result, mapper(i))
+ }
+ return result
+}
+
+func Reduce(data []string, combinator func(string, string) string) string {
+ result := data[0]
+ for i := 1; i < len(data); i++ {
+ result = combinator(result, data[i])
+ }
+ return result
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ result := false
+ for _, i := range data {
+ if predicate(i) {
+ result = true
+ break
+ }
+ }
+ return result
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ return !Any(data, func(s string) bool {
+ return !predicate(s)
+ })
+}

Какво ще има в s след долните два реда?

s := make([]string, 5, 10)
s = append(s, "foo")

Как ще се държи твоят Reduce, ако му се подаде празна колекция?

Имплементацията на Any изглежда коректна, но аз твърдя, че не искаш да си пазиш result. Опитай се да минеш без тази променлива :)

Иван обнови решението на 16.10.2014 17:00 (преди над 3 години)

package main
-func Filter(data []string, predicate func(string) bool) []string {
- result := make([]string, 5, 10)
- for _, i := range data {
- if predicate(i) {
- result = append(result, i)
- }
- }
- return result
-}
-
func Map(data []string, mapper func(string) string) []string {
- result := make([]string, 5, 10)
+ result := make([]string, 0, 0)
for _, i := range data {
result = append(result, mapper(i))
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
+ if len(data) == 0 {
+ return ""
+ }
+
result := data[0]
for i := 1; i < len(data); i++ {
result = combinator(result, data[i])
}
return result
}
func Any(data []string, predicate func(string) bool) bool {
- result := false
for _, i := range data {
if predicate(i) {
- result = true
- break
+ return true
}
}
- return result
+ return false
}
func All(data []string, predicate func(string) bool) bool {
return !Any(data, func(s string) bool {
return !predicate(s)
})
}

Мерси за насоките, оправих недомислиците :) Сега гледам че съм оставил като правя масивите да подавам на make capacity 0, което при мене върви, въпреки че може и без да подавам нищо, предполагам че няма нужда да го качвам наново цялото заради това?

Иван обнови решението на 17.10.2014 12:42 (преди над 3 години)

package main
+func Filter(data []string, predicate func(string) bool) []string {
+ result := make([]string, 0)
+ for _, i := range data {
+ if predicate(i) {
+ result = append(result, i)
+ }
+ }
+ return result
+}
+
func Map(data []string, mapper func(string) string) []string {
result := make([]string, 0, 0)
for _, i := range data {
result = append(result, mapper(i))
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
if len(data) == 0 {
return ""
}
result := data[0]
for i := 1; i < len(data); i++ {
result = combinator(result, data[i])
}
return result
}
func Any(data []string, predicate func(string) bool) bool {
for _, i := range data {
if predicate(i) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
return !Any(data, func(s string) bool {
return !predicate(s)
})
}