Решение на Log Parsing от Никола Димитров

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

Към профила на Никола Димитров

Резултати

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

Код

package main
func Map(data []string, mapper func(string) string) []string {
transformed := make([]string, len(data))
for i, value := range data {
transformed[i] = mapper(value)
}
return transformed
}
func Filter(data []string, predicate func(string) bool) []string {
filtered := make([]string, 0)
for _, value := range data {
if predicate(value) {
filtered = append(filtered, value)
}
}
return filtered
}
func Reduce(data []string, combinator func(string, string) string) string {
if len(data) < 1 {
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 _, value := range data {
if predicate(value) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
for _, value := range data {
if !predicate(value) {
return false
}
}
return true
}

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

PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.019s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.012s
PASS
ok  	_/tmp/d20141023-10368-6fijw8	0.011s

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

Никола обнови решението на 20.10.2014 01:03 (преди над 3 години)

+package main
+
+func Map(data []string, mapper func(string) string) []string {
+ transformed := make([]string, len(data))
+ for i, value := range data {
+ transformed[i] = mapper(value)
+ }
+ return transformed
+}
+
+func Filter(data []string, predicate func(string) bool) []string {
+ filtered := make([]string, 1)
+ for _, value := range data {
+ if predicate(value) {
+ filtered = append(filtered, value)
+ }
+ }
+ return filtered
+}
+
+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 {
+ for _, value := range data {
+ if predicate(value) {
+ return true
+ }
+ }
+ return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ for _, value := range data {
+ if !predicate(value) {
+ return false
+ }
+ }
+ return true
+}

Никола обнови решението на 20.10.2014 19:40 (преди над 3 години)

package main
func Map(data []string, mapper func(string) string) []string {
transformed := make([]string, len(data))
for i, value := range data {
transformed[i] = mapper(value)
}
return transformed
}
-
func Filter(data []string, predicate func(string) bool) []string {
- filtered := make([]string, 1)
+ filtered := make([]string, 0)
for _, value := range data {
if predicate(value) {
filtered = append(filtered, value)
}
}
return filtered
}
func Reduce(data []string, combinator func(string, string) string) string {
+ if len(data) < 1 {
+ 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 _, value := range data {
if predicate(value) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
for _, value := range data {
if !predicate(value) {
return false
}
}
return true
}

Добре е. Най ми харесва как пестиш един символ със len(data) < 1 :).

Ако искаш бонус точка във Filter направи така че go-то да не копира масива отдолу скрито и да връща slice за който масива отдолу да е с точната големина която му трябва.