Решение на Log Parsing от Дойчин Атанасов

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

Към профила на Дойчин Атанасов

Резултати

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

Код

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

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

PASS
ok  	_/tmp/d20141023-10368-taykgh	0.022s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.012s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.018s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.021s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.011s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.011s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.011s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.012s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.011s
PASS
ok  	_/tmp/d20141023-10368-taykgh	0.012s

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

Дойчин обнови решението на 17.10.2014 21:01 (преди над 3 години)

+package main
+
+func Map(data []string, mapper func(string) string) []string {
+ result := make([]string, len(data), len(data))
+ for ind, val := range data {
+ result[ind] = mapper(val)
+ }
+ return result
+}
+
+func Filter(data []string, predicate func(string) bool) []string {
+ result := make([]string, 0, len(data))
+ for _, val := range data {
+ if !predicate(val) {
+ continue
+ }
+ result = append(result, val)
+ }
+ return result
+}
+
+func Reduce(data []string, combinator func(string, string) string) string {
+ result := ""
+ for _, val := range data {
+ result = combinator(result, val)
+ }
+ return result
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ for _, val := range data {
+ if predicate(val) {
+ return true
+ }
+ }
+ return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ for _, val := range data {
+ if !predicate(val) {
+ return false
+ }
+ }
+ return true
+}
  • Reduce-а ти не работи вслучай на len(data) > 0 :) - прочети условието.
  • добре де ако Filter му бъде подадено нещо в стил len(data) == 1000 и

    func(string) bool { return false; }

не смяташ ли че ще върнеш един слайс с един много голям масив отдолу за който не е сигурно че някога ще го използваш?

Бооже, май съм зле :D

  • Reduce: Но все още не мога да разбера къде греша. А не си спомням твоите тестове и не искам да го гледам преди да се сетя сам. Даже си написах тест специално за това преди да го предада:
func TestReduceEdges(t *testing.T) {
    input := []string{}
    output := ""

    result := Reduce(input, concat)

    if result != output {
        t.Errorf("expected [%s] got [%s]", output, result)
    }

    input = []string{"one"}
    output = "one"

    result = Reduce(input, concat)

    if result != output {
        t.Errorf("expected [%s] got [%s]", output, result)
    }
}
  • Filter: Смятам, но не ме интересуваше особено. Сега след като го каза ме човърка да го оправя.

О, боже :D

func TestReduceWithSomethingDifferentThanConcat(t *testing.T) {
    input := []string{"one", "two", "tree"}
    output := "one"
    result := Reduce(input, func(a string, b string) string {
        if len(a) > 0 {
            return a
        }
        return "bla?"
    })

    if result != output {
        t.Errorf("expected [%s] got [%s]", output, result)
    }
}

Не знам защо си представях, че единственото, което може да прави Reduce е да конкатенира хаха.

Дойчин обнови решението на 18.10.2014 21:31 (преди над 3 години)

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