Решение на Разлика в сумите от Емилиан Станков

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

Към профила на Емилиан Станков

Резултати

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

Код

package main
import "strings"
func ExtractColumn(logContents string, column uint8) string {
var rows []string = strings.Split(logContents, "\n")
var result string
if len(rows) == 0 {
return ""
} else {
for i := 0; i < len(rows); i++ {
if rows[i] == "" {
continue
} else {
var splittedRow []string = strings.SplitN(rows[i], " ", 4)
if len(splittedRow) < 4 {
continue
} else {
if column == 0 {
result += splittedRow[0] + " " + splittedRow[1] + "\n"
} else {
result += splittedRow[column+1] + "\n"
}
}
}
}
}
return result
}

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

PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s
PASS
ok  	_/tmp/d20151103-24541-wiz9a6	0.003s

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

Емилиан обнови решението на 25.10.2015 23:24 (преди над 2 години)

+package main
+
+import "strings"
+
+func ExtractColumn(logContents string, column uint8) string {
+ if len(logContents) > 28 {
+ var columns [3]string
+ var rows []string = strings.Split(logContents, "\n")
+ if len(rows) > 0 {
+ for i := 0; i < len(rows); i++ {
+ if rows[i] != "" {
+ var splittedRow []string = strings.SplitN(rows[i], " ", 4)
+ columns[0] += splittedRow[0] + " " + splittedRow[1] + "\n"
+ columns[1] += splittedRow[2] + "\n"
+ columns[2] += splittedRow[3] + "\n"
+ }
+ }
+ }
+ return columns[column]
+ } else {
+ return ""
+ }
+}

Изглежда добре, но:

  1. В Go е прието (а и в повечето езици) първо да се разглеждат "изключителните"/"грешните" случаи и след това да се продължава с не такивата - тоест по правилно е да се провери дали дължината не е твърде малка и после, не във else да се продължи. Else-а няма да трябва защото ще return-неш в if-а, което правиш и в момента :).
  2. не съм убеден в тази проверка за дължината
  3. виж точка 1 за if-а с len(rows) > 0
  4. може би същото за if-а с rows[i] != ""
  5. на принцип не ми харесва че конструираш и трите възможни резултата при положение че знаеш кой ще трябва, но не е грешно, просто не е ефективно

Емилиан обнови решението на 26.10.2015 22:41 (преди над 2 години)

package main
import "strings"
func ExtractColumn(logContents string, column uint8) string {
- if len(logContents) > 28 {
- var columns [3]string
- var rows []string = strings.Split(logContents, "\n")
- if len(rows) > 0 {
- for i := 0; i < len(rows); i++ {
- if rows[i] != "" {
- var splittedRow []string = strings.SplitN(rows[i], " ", 4)
+ var columns [3]string
+ var rows []string = strings.Split(logContents, "\n")
+ if len(rows) == 0 {
+ return ""
+ } else {
+ for i := 0; i < len(rows); i++ {
+ if rows[i] == "" {
+ continue
+ } else {
+ var splittedRow []string = strings.SplitN(rows[i], " ", 4)
+ if len(splittedRow) < 4 {
+ continue
+ } else {
columns[0] += splittedRow[0] + " " + splittedRow[1] + "\n"
columns[1] += splittedRow[2] + "\n"
columns[2] += splittedRow[3] + "\n"
}
}
}
- return columns[column]
- } else {
- return ""
}
+ return columns[column]
}

Емилиан обнови решението на 26.10.2015 22:45 (преди над 2 години)

package main
import "strings"
func ExtractColumn(logContents string, column uint8) string {
- var columns [3]string
var rows []string = strings.Split(logContents, "\n")
+ var result string
if len(rows) == 0 {
return ""
} else {
for i := 0; i < len(rows); i++ {
if rows[i] == "" {
continue
} else {
var splittedRow []string = strings.SplitN(rows[i], " ", 4)
if len(splittedRow) < 4 {
continue
} else {
- columns[0] += splittedRow[0] + " " + splittedRow[1] + "\n"
- columns[1] += splittedRow[2] + "\n"
- columns[2] += splittedRow[3] + "\n"
+ if column == 0 {
+ result += splittedRow[0] + " " + splittedRow[1] + "\n"
+ } else {
+ result += splittedRow[column+1] + "\n"
+ }
}
}
}
}
- return columns[column]
+ return result
}