Решение на 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 Filter(data []string, predicate func(string) bool) []string {
newLen := 0
for _, value := range data {
if predicate(value) {
newLen++
}
}
result := make([]string, newLen)
indexInResult := 0
for _, value := range data {
if predicate(value) {
result[indexInResult] = value
indexInResult++
}
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
var result string
if len(data) >= 1 {
result = data[0]
} else {
return result
}
for index := 1; index < len(data); index++ {
result = combinator(result, data[index])
}
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-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s
PASS
ok  	_/tmp/d20141023-10368-1qur45w	0.011s

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

Александър обнови решението на 19.10.2014 10:38 (преди над 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 Filter(data []string, predicate func(string) bool) []string {
+ newLen := 0
+ for _, value := range data {
+ if predicate(value) {
+ newLen++
+ }
+ }
+ result := make([]string, newLen)
+ for index, value := range data {
+ if predicate(value) {
+ result[index] = value
+ }
+ }
+ return result
+}
+
+func Reduce(data []string, combinator func(string, string) string) string {
+ var result string
+ if len(data) >= 1 {
+ result = data[0]
+ } else {
+ return result
+ }
+
+ for index := 1; index < len(data); index++ {
+ result = combinator(result, data[index])
+ }
+ return result
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ dataLen := len(data)
+ for index := 0; index < dataLen; index++ {
+ if predicate(data[index]) {
+ return true
+ }
+ }
+ return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ dataLen := len(data)
+ for index := 0; index < dataLen; index++ {
+ if !predicate(data[index]) {
+ return false
+ }
+ }
+ return true
+}

Филтъра е така за да е с точната големина slice-а. Но определено не съм премислил ,че ако предиката е бавна функция ще е много гадно това решение. Не виждам причина да не работи :?

Относно range-а ,имах драма с празните масиви защото се опитваше да достъпи първия елемент и трябваше да слагам грозен иф. :)

Александър обнови решението на 20.10.2014 20:18 (преди над 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 Filter(data []string, predicate func(string) bool) []string {
newLen := 0
for _, value := range data {
if predicate(value) {
newLen++
}
}
result := make([]string, newLen)
- for index, value := range data {
+ indexInResult := 0
+ for _, value := range data {
if predicate(value) {
- result[index] = value
+ result[indexInResult] = value
+ indexInResult++
}
}
return result
}
func Reduce(data []string, combinator func(string, string) string) string {
var result string
if len(data) >= 1 {
result = data[0]
} else {
return result
}
for index := 1; index < len(data); index++ {
result = combinator(result, data[index])
}
return result
}
func Any(data []string, predicate func(string) bool) bool {
- dataLen := len(data)
- for index := 0; index < dataLen; index++ {
- if predicate(data[index]) {
+ for _, value := range data {
+ if predicate(value) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
- dataLen := len(data)
- for index := 0; index < dataLen; index++ {
- if !predicate(data[index]) {
+ for _, value := range data {
+ if !predicate(value) {
return false
}
}
return true
}