Решение на Log Parsing от Диян Димитров

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

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

Резултати

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

Код

package main
func Map(data []string, mapper func(string) string) []string {
result := data
for i, value := range result {
result[i] = mapper(value)
}
return result
}
func Filter(data []string, predicate func(string) bool) []string {
var result []string
for _, value := range data {
if predicate(value) {
result = append(result, value)
}
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
if len(data) == 0 {
return ""
}
if len(data) == 1 {
return data[0]
} else {
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-1uivcm3	0.021s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.018s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.029s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.011s
PASS
ok  	_/tmp/d20141023-10368-1uivcm3	0.028s

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

Диян обнови решението на 17.10.2014 13:54 (преди над 3 години)

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

Хубаво си се сетил че nil slice-а e append-able, но:

  • Сигурен ли си че append-а във Map-а е най ... ъх красивото решение?

  • не смяташ ли че ако ти дам входни данни с размер 1000 от които ти ще филтрираш нищо - ще покопира малко твърде много?

  • Reduce-а ти дали работи вслучая на len(data) == 1 ?

  • това == false ми странно ;)

Диян обнови решението на 20.10.2014 11:10 (преди над 3 години)

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

Диян обнови решението на 20.10.2014 23:41 (преди над 3 години)

package main
func Map(data []string, mapper func(string) string) []string {
- for i, value := range data {
- data[i] = mapper(value)
+ result := data
+ for i, value := range result {
+ result[i] = mapper(value)
}
- return data
+ return result
}
func Filter(data []string, predicate func(string) bool) []string {
var result []string
for _, value := range data {
if predicate(value) {
result = append(result, value)
}
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
- result := ""
- for _, value := range data {
- result = combinator(result, value)
+ if len(data) == 0 {
+ return ""
}
- return result
+ if len(data) == 1 {
+ return data[0]
+ } else {
+ 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
}