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

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

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

Резултати

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

Код

package main
import (
"strings"
)
func ExtractColumn(logContents string, column uint8) (result string) {
var lines []string = strings.Split(logContents, "\n")
var columnContent []string
for _, line := range lines {
var lineElements []string = strings.SplitN(line, " ", 4)
if column >= 0 && int(column+1) < len(lineElements) {
if column == 0 {
columnContent = append(columnContent, strings.Join(lineElements[:2], " "))
} else {
columnContent = append(columnContent, lineElements[column+1])
}
}
}
if len(columnContent) > 0 {
result = strings.Join(columnContent, "\n") + "\n"
}
return result
}

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

PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.004s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.004s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s
PASS
ok  	_/tmp/d20151103-24541-k9vkqn	0.003s

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

Катя обнови решението на 25.10.2015 22:48 (преди над 2 години)

+package main
+
+import (
+ "strings"
+)
+
+func ExtractColumn(logContents string, column uint8) string {
+ var result string = ""
+ var lines []string = strings.Split(strings.TrimRight(logContents, "\n"), "\n")
+ for _, line := range lines {
+ line = strings.Replace(line, " ", "~", 1)
+ var lineElements []string = strings.SplitN(line, " ", 3)
+ lineElements[0] = strings.Replace(lineElements[0], "~", " ", 1)
+ if column >= 0 && int(column) < len(lineElements) {
+ result += lineElements[column] + "\n"
+ }
+ }
+ return result
+}

това със ~ е много оригинално, не съм сигурен че е много go-шко :smile:

забележки:

  1. написали сме че няма да ви даваме не верни номера на колони
  2. въпреки че всичките тези Replace-ове навярно ще го направят не значително, принципно можеш да намалиш конкатенацията на стрингове и съответно правенето на нови такива.
  3. може да махнеш още един ред с именован резултат
  4. strings.Split не се държи така както ти очакваш в някои крайни случаи :)

Катя обнови решението на 02.11.2015 00:09 (преди над 2 години)

package main
import (
"strings"
)
-func ExtractColumn(logContents string, column uint8) string {
- var result string = ""
- var lines []string = strings.Split(strings.TrimRight(logContents, "\n"), "\n")
+func ExtractColumn(logContents string, column uint8) (result string) {
+ var lines []string = strings.Split(logContents, "\n")
+
+ var columnContent []string
for _, line := range lines {
- line = strings.Replace(line, " ", "~", 1)
- var lineElements []string = strings.SplitN(line, " ", 3)
- lineElements[0] = strings.Replace(lineElements[0], "~", " ", 1)
- if column >= 0 && int(column) < len(lineElements) {
- result += lineElements[column] + "\n"
+ var lineElements []string = strings.SplitN(line, " ", 4)
+ if column >= 0 && int(column+1) < len(lineElements) {
+ if column == 0 {
+ columnContent = append(columnContent, strings.Join(lineElements[:2], " "))
+ } else {
+ columnContent = append(columnContent, lineElements[column+1])
+ }
}
}
+
+ if len(columnContent) > 0 {
+ result = strings.Join(columnContent, "\n") + "\n"
+ }
+
return result
}