Решение на Log Parsing от Георги Фарашев

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

Към профила на Георги Фарашев

Резултати

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

Код

package main
func Map(data []string, mapper func(string) string) []string {
dataSize := len(data)
if dataSize == 0 {
return []string{}
}
var returnValue = make([]string, dataSize)
for i := 0; i < dataSize; i++ {
returnValue[i] = mapper(data[i])
}
return returnValue
}
func Filter(data []string, predicate func(string) bool) []string {
dataSize := len(data)
if dataSize == 0 {
return []string{}
}
var returnValue = make([]string, dataSize)
copy(returnValue, data)
for i := 0; i < dataSize; i++ {
if !predicate(returnValue[i]) {
returnValue = append(returnValue[:i], returnValue[i+1:]...)
dataSize--
i--
}
}
return returnValue
}
func Reduce(data []string, combinator func(string, string) string) string {
dataSize := len(data)
if dataSize == 0 {
return ""
}
returnValue := data[0]
for i := 1; i < dataSize; i++ {
returnValue = combinator(returnValue, data[i])
}
return returnValue
}
func Any(data []string, predicate func(string) bool) bool {
dataSize := len(data)
if dataSize == 0 {
return false
}
for i := 0; i < dataSize; i++ {
if predicate(data[i]) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
dataSize := len(data)
if dataSize == 0 {
return true
}
for i := 0; i < dataSize; i++ {
if !predicate(data[i]) {
return false
}
}
return true
}
func main() {
}

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

PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.011s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.011s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.011s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.012s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.012s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.015s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.013s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.015s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.015s
PASS
ok  	_/tmp/d20141023-10368-11x6d0r	0.011s

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

Георги обнови решението на 21.10.2014 02:02 (преди над 3 години)

+package main
+
+func Map(data []string, mapper func(string) string) []string {
+ if data == nil {
+ return []string{}
+ }
+ dataSize := len(data)
+ var returnValue = make([]string, dataSize)
+ for i := 0; i < dataSize; i++ {
+ returnValue[i] = mapper(data[i])
+ }
+ return returnValue
+}
+
+func Filter(data []string, predicate func(string) bool) []string {
+ if data == nil {
+ return []string{}
+ }
+ dataSize := len(data)
+ var returnValue = make([]string, dataSize)
+ copy(returnValue, data)
+ for i := 0; i < dataSize; i++ {
+ if !predicate(returnValue[i]) {
+ returnValue = append(returnValue[:i], returnValue[i+1:]...)
+ dataSize--
+ i--
+ }
+ }
+ return returnValue
+}
+
+func Reduce(data []string, combinator func(string, string) string) string {
+ dataSize := len(data)
+ if data == nil || dataSize == 0 {
+ return ""
+ }
+ returnValue := data[0]
+ for i := 1; i < dataSize; i++ {
+ returnValue = combinator(returnValue, data[i])
+ }
+ return returnValue
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ dataSize := len(data)
+ if data == nil || dataSize == 0 {
+ return false
+ }
+ for i := 0; i < dataSize; i++ {
+ if predicate(data[i]) {
+ return true
+ }
+ }
+ return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ dataSize := len(data)
+ if data == nil || dataSize == 0 {
+ return false
+ }
+ for i := 0; i < dataSize; i++ {
+ if !predicate(data[i]) {
+ return false
+ }
+ }
+ return true
+}
+
+func main() {
+}

Георги обнови решението на 21.10.2014 11:38 (преди над 3 години)

package main
func Map(data []string, mapper func(string) string) []string {
if data == nil {
return []string{}
}
dataSize := len(data)
var returnValue = make([]string, dataSize)
for i := 0; i < dataSize; i++ {
returnValue[i] = mapper(data[i])
}
return returnValue
}
func Filter(data []string, predicate func(string) bool) []string {
if data == nil {
return []string{}
}
dataSize := len(data)
var returnValue = make([]string, dataSize)
copy(returnValue, data)
for i := 0; i < dataSize; i++ {
if !predicate(returnValue[i]) {
returnValue = append(returnValue[:i], returnValue[i+1:]...)
dataSize--
i--
}
}
return returnValue
}
func Reduce(data []string, combinator func(string, string) string) string {
dataSize := len(data)
if data == nil || dataSize == 0 {
return ""
}
returnValue := data[0]
for i := 1; i < dataSize; i++ {
returnValue = combinator(returnValue, data[i])
}
return returnValue
}
func Any(data []string, predicate func(string) bool) bool {
dataSize := len(data)
if data == nil || dataSize == 0 {
return false
}
for i := 0; i < dataSize; i++ {
if predicate(data[i]) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
dataSize := len(data)
if data == nil || dataSize == 0 {
- return false
+ return true
}
for i := 0; i < dataSize; i++ {
if !predicate(data[i]) {
return false
}
}
return true
}
func main() {
}

Георги обнови решението на 21.10.2014 12:08 (преди над 3 години)

package main
func Map(data []string, mapper func(string) string) []string {
- if data == nil {
+ dataSize := len(data)
+ if dataSize == 0 {
return []string{}
}
- dataSize := len(data)
var returnValue = make([]string, dataSize)
for i := 0; i < dataSize; i++ {
returnValue[i] = mapper(data[i])
}
return returnValue
}
func Filter(data []string, predicate func(string) bool) []string {
- if data == nil {
+ dataSize := len(data)
+ if dataSize == 0 {
return []string{}
}
- dataSize := len(data)
var returnValue = make([]string, dataSize)
copy(returnValue, data)
for i := 0; i < dataSize; i++ {
if !predicate(returnValue[i]) {
returnValue = append(returnValue[:i], returnValue[i+1:]...)
dataSize--
i--
}
}
return returnValue
}
func Reduce(data []string, combinator func(string, string) string) string {
dataSize := len(data)
- if data == nil || dataSize == 0 {
+ if dataSize == 0 {
return ""
}
returnValue := data[0]
for i := 1; i < dataSize; i++ {
returnValue = combinator(returnValue, data[i])
}
return returnValue
}
func Any(data []string, predicate func(string) bool) bool {
dataSize := len(data)
- if data == nil || dataSize == 0 {
+ if dataSize == 0 {
return false
}
for i := 0; i < dataSize; i++ {
if predicate(data[i]) {
return true
}
}
return false
}
func All(data []string, predicate func(string) bool) bool {
dataSize := len(data)
- if data == nil || dataSize == 0 {
+ if dataSize == 0 {
return true
}
for i := 0; i < dataSize; i++ {
if !predicate(data[i]) {
return false
}
}
return true
}
func main() {
}

За Filter-а ти:

Ако тестовете минат, значи е решение. Прекалено сложно, обаче. Не мислиш ли, че би могъл да измислиш по - просто? Тук има доста излишна логика.

Също така, представи си, че входните данни (data) са с огромна дължина (над 1000000?), а предиката е такъв, че от тях да останат само 10-15 елемента. Мисля си, че тогава решението ти ще извърши твърде много операции. Ще копира цялата информация на второ място и после ще я размества многократно. Има начин да избегнеш това.