Решение на Log Parsing от Евгений Бояджиев

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

Към профила на Евгений Бояджиев

Резултати

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

Код

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

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

PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s
PASS
ok  	_/tmp/d20141023-10368-r93h3w	0.011s

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

Евгений обнови решението на 20.10.2014 10:37 (преди над 3 години)

+package main
+
+func main() {
+ return
+}
+
+func Map(data []string, mapper func(string) string) (result []string) {
+ data_length := len(data)
+ result = make([]string, data_length, data_length)
+
+ for index, element := range data {
+ result[index] = mapper(element)
+ }
+ return
+}
+
+func Filter(data []string, predicate func(string) bool) (result []string) {
+ result = make([]string, 0)
+
+ index := 0
+ for _, element := range data {
+ if predicate(element) {
+ result = append(result, element)
+ index++
+ }
+ }
+ return
+}
+
+func Reduce(data []string, combinator func(string, string) string) (result string) {
+ result = ""
+ for _, element := range data {
+ result = combinator(result, element)
+ }
+ return
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ if len(data) == 0 {
+ return false
+ }
+ for _, element := range data {
+ if !predicate(element) {
+ return false
+ }
+ }
+ return true
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ for _, element := range data {
+ if predicate(element) {
+ return true
+ }
+ }
+ return false
+}
  • make([]string, 20) е същото като make([]string, 20, 20)

  • Защо смяташ че All трябва да връща false ако няма подадени данни?

  • Прочети поседното изречение за Reduce в условието.

  • Във Filter този index май не го ползваш.

Евгений обнови решението на 20.10.2014 10:49 (преди над 3 години)

package main
func main() {
return
}
func Map(data []string, mapper func(string) string) (result []string) {
data_length := len(data)
result = make([]string, data_length, data_length)
for index, element := range data {
result[index] = mapper(element)
}
return
}
-func Filter(data []string, predicate func(string) bool) (result []string) {
- result = make([]string, 0)
+func Filter(data []string, predicate func(string) bool) []string {
+ accumulator := make([]string, 0)
index := 0
for _, element := range data {
if predicate(element) {
- result = append(result, element)
+ accumulator = append(accumulator, element)
index++
}
}
- return
+
+ result := make([]string, index, index)
+ copy(result, accumulator)
+ return result
}
func Reduce(data []string, combinator func(string, string) string) (result string) {
result = ""
for _, element := range data {
result = combinator(result, element)
}
return
}
func All(data []string, predicate func(string) bool) bool {
if len(data) == 0 {
return false
}
for _, element := range data {
if !predicate(element) {
return false
}
}
return true
}
func Any(data []string, predicate func(string) bool) bool {
for _, element := range data {
if predicate(element) {
return true
}
}
return false
-}
+}

"make([]string, 20) е същото като make([]string, 20, 20)" Това ще го оправя вечерта.

"Защо смяташ че All трябва да връща false ако няма подадени данни?" А какво трябва да върне? True ли? Ами Any? И тя ли true?

"Прочети поседното изречение за Reduce в условието." Даам, това го забравих. Въпрос: какво трябва да върне Reduce, ако няма елементи във масива?

"Във Filter този index май не го ползваш." Във втората версия го ползвам. index-а беше останал от още по-стара версия на кода. Явно не съм го рефакторнал както трябва преди да го публикувам първия път.

Може би условието трябва да бъде променено на:

  • All връща true ако няма елемент за който predicate да връща false.

  • Any връща true ако има елемент за който predicate връща true.

Reduce поради липса на други възможности трябва да върне "".

Евгений обнови решението на 21.10.2014 09:15 (преди над 3 години)

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