Решение на Разлика в сумите от Юлия Недялкова

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

Към профила на Юлия Недялкова

Резултати

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

Код

package main
import (
"fmt"
"strings"
)
func ExtractColumn(logContents string, column uint8) string {
logLines := extractLines(logContents)
return getColumn(logLines, column)
}
func extractLines(logContents string) []string {
return strings.Split(logContents, "\n")
}
func getColumn(logContents []string, column uint8) string {
columnElements := make([]string, 0, len(logContents))
for _, logLine := range logContents {
if logLine == "" {
continue
}
lineColumns := strings.SplitN(logLine, " ", 4)
columnElements = append(columnElements, getElement(lineColumns, column))
}
return strings.Join(columnElements, "")
}
func getElement(lineColumns []string, column uint8) string {
if column == 0 {
return fmt.Sprintf("%s %s\n", lineColumns[0], lineColumns[1])
}
return fmt.Sprintf("%s\n", lineColumns[column+1])
}

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

PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.007s
PASS
ok  	_/tmp/d20151103-24541-19ska2m	0.003s

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

Юлия обнови решението на 25.10.2015 16:34 (преди над 2 години)

+package main
+
+import "strings"
+
+func ExtractColumn(logContents string, column uint8) string {
+ logLines := extractLines(logContents)
+ return getColumn(logLines, column)
+}
+
+func extractLines(logContents string) []string {
+ return strings.Split(logContents, "\n")
+}
+
+func getColumn(logContents []string, column uint8) string {
+ columnElements := make([]string, 0, len(logContents))
+
+ for _, logLine := range logContents {
+ if strings.TrimSpace(logLine) == "" {
+ continue
+ }
+
+ lineColumns := strings.SplitN(logLine, " ", 4)
+ columnElements = append(columnElements, getElement(lineColumns, column))
+ }
+
+ return strings.Join(columnElements, "")
+}
+
+func getElement(lineColumns []string, column uint8) string {
+ if column == 0 {
+ return lineColumns[0] + " " + lineColumns[1] + "\n"
+ }
+ return lineColumns[column+1] + "\n"
+}

много ми харесва как:

  1. си разделила нещата на множество отделни функции които правят по едно нещо
  2. как си заделяш правилното количество елементи в columnElements предварително

Забележки:

  1. повтаряш се с това добавяне на но ред накрая
  2. може да намалиш конкатенацията на стрингове (новия ред :wink:)
  3. дали не може да се отървеш от strings.TrimSpace(logLine) == "" ?

Юлия обнови решението на 27.10.2015 07:46 (преди над 2 години)

package main
-import "strings"
+import (
+ "fmt"
+ "strings"
+)
func ExtractColumn(logContents string, column uint8) string {
- logLines := extractLines(logContents)
- return getColumn(logLines, column)
+ logLines := extractLines(logContents)
+ return getColumn(logLines, column)
}
func extractLines(logContents string) []string {
- return strings.Split(logContents, "\n")
+ return strings.Split(logContents, "\n")
}
func getColumn(logContents []string, column uint8) string {
- columnElements := make([]string, 0, len(logContents))
+ columnElements := make([]string, 0, len(logContents))
- for _, logLine := range logContents {
- if strings.TrimSpace(logLine) == "" {
- continue
- }
+ for _, logLine := range logContents {
+ if logLine == "" {
+ continue
+ }
- lineColumns := strings.SplitN(logLine, " ", 4)
- columnElements = append(columnElements, getElement(lineColumns, column))
- }
+ lineColumns := strings.SplitN(logLine, " ", 4)
+ columnElements = append(columnElements, getElement(lineColumns, column))
+ }
- return strings.Join(columnElements, "")
+ return strings.Join(columnElements, "")
}
func getElement(lineColumns []string, column uint8) string {
- if column == 0 {
- return lineColumns[0] + " " + lineColumns[1] + "\n"
- }
- return lineColumns[column+1] + "\n"
+ if column == 0 {
+ return fmt.Sprintf("%s %s\n", lineColumns[0], lineColumns[1])
+ }
+ return fmt.Sprintf("%s\n", lineColumns[column+1])
}