Решение на Log Parsing от Александър Ваканин

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

Към профила на Александър Ваканин

Резултати

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

Код

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

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

PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.015s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s
PASS
ok  	_/tmp/d20141023-10368-1cu1bzi	0.011s

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

Александър обнови решението на 19.10.2014 23:39 (преди над 3 години)

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

Александър обнови решението на 20.10.2014 15:08 (преди над 3 години)

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

Всичко е наред освен Reduce-а, който и преди това не е бил по-условието.

пробвай със нещо стил

combinator := func(s1 string, s2 string) string {
    return "a" + s1 + "b" + s2 + "c"
}

при data := []string{"baba", "dqdo", "neshto"} трябва да върне

aаbababdqdocbneshtoc твоето ще върне aaabbabacbdqdocbneshtoc.

при len(data) == 1 връщай просто елемента.

п.п. Това навярно ще ми е последния коментар :(

Александър обнови решението на 21.10.2014 12:29 (преди над 3 години)

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