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

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

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

Резултати

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

Код

package main
import "regexp"
const (
date = `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})`
ip = `(\d+\.\d+\.\d+\.\d+)`
text = `(.*)`
)
func ExtractColumn(logContents string, column uint8) string {
re := regexp.MustCompile(date + " " + ip + " " + text)
parsed := re.FindAllStringSubmatch(logContents, -1)
var result string
for _, p := range parsed {
result += p[column+1] + "\n"
}
return result
}

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

PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.009s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.004s
PASS
ok  	_/tmp/d20151103-24541-1f1dopl	0.003s

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

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

+package main
+
+import (
+ "fmt"
+ "regexp"
+)
+
+func ExtractColumn(logContents string, column uint8) string {
+ var (
+ date = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"
+ ip = "\\d+\\.\\d+\\.\\d+\\.\\d+"
+ text = ".*"
+ re = regexp.MustCompile(fmt.Sprintf("(%s) (%s) (%s)", date, ip, text))
+ )
+
+ var result string
+ parsed := re.FindAllStringSubmatch(logContents, -1)
+ for _, p := range parsed {
+ result += p[column+1] + "\n"
+ }
+
+ return result
+}

Изглежда добре, имам няколко стилистични забележки:

  1. нещата във var блока не се променят м/у извикванията на функцията така че навярно трябва да са дефинирани извън. Може да са const преди това че са стрингове и не се променят.
  2. Принципно няма нищо лошо в ползването на fmt.Sprintf просто в случай може да ползваш стандартно конкатениране на стрингове.

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

package main
-import (
- "fmt"
- "regexp"
+import "regexp"
+
+const (
+ date = `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})`
+ ip = `(\d+\.\d+\.\d+\.\d+)`
+ text = `(.*)`
)
func ExtractColumn(logContents string, column uint8) string {
- var (
- date = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"
- ip = "\\d+\\.\\d+\\.\\d+\\.\\d+"
- text = ".*"
- re = regexp.MustCompile(fmt.Sprintf("(%s) (%s) (%s)", date, ip, text))
- )
-
- var result string
+ re := regexp.MustCompile(date + " " + ip + " " + text)
parsed := re.FindAllStringSubmatch(logContents, -1)
+ var result string
for _, p := range parsed {
result += p[column+1] + "\n"
}
return result
}

Екатерина обнови решението на 26.10.2015 20:25 (преди над 2 години)

package main
import "regexp"
const (
- date = `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})`
- ip = `(\d+\.\d+\.\d+\.\d+)`
- text = `(.*)`
+ date = `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})`
+ ip = `(\d+\.\d+\.\d+\.\d+)`
+ text = `(.*)`
)
func ExtractColumn(logContents string, column uint8) string {
- re := regexp.MustCompile(date + " " + ip + " " + text)
+ re := regexp.MustCompile(date + " " + ip + " " + text)
parsed := re.FindAllStringSubmatch(logContents, -1)
var result string
for _, p := range parsed {
result += p[column+1] + "\n"
}
return result
-}
+}