Решение на Log Parsing от Станислав Гатев

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

Към профила на Станислав Гатев

Резултати

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

Код

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

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

PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.027s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s
PASS
ok  	_/tmp/d20141023-10368-wfd4ml	0.011s

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

Станислав обнови решението на 19.10.2014 12:24 (преди над 3 години)

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

Станислав обнови решението на 20.10.2014 12:12 (преди над 3 години)

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

Добре е, но(защото обичам да се заяждам :P)

  • data[:15] е същото катоdata[0:15] и data[15:] е същото като data[15:len(data)]
  • принципно ако ти се занимава може да се постараеш във Filter да копираш по-малко масива отдолу и да връщаш slice който е точно толкова голям колкото трябва.

Станислав обнови решението на 20.10.2014 20:49 (преди над 3 години)

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