score; collect.sh
This commit is contained in:
112
cmd/score/score.go
Normal file
112
cmd/score/score.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
e "codeberg.org/pebbe/errors"
|
||||
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Item struct {
|
||||
text string
|
||||
score int
|
||||
isnew bool
|
||||
}
|
||||
|
||||
var (
|
||||
x = e.ExitErr
|
||||
reYearWeek = regexp.MustCompile(`(.*)([12][0-9][0-9][0-9]-[0-5][0-9])(.*)`)
|
||||
count = make(map[string]int)
|
||||
items = make([]Item, 0)
|
||||
)
|
||||
|
||||
func main() {
|
||||
filename := os.Args[1]
|
||||
prevname := getPrev(filename)
|
||||
|
||||
fp, err := os.Open(prevname)
|
||||
x(err)
|
||||
scanner := bufio.NewScanner(fp)
|
||||
for scanner.Scan() {
|
||||
aa := strings.SplitN(scanner.Text(), "\t", 2)
|
||||
n, err := strconv.Atoi(strings.TrimSpace(aa[0]))
|
||||
x(err)
|
||||
count[aa[1]] = n
|
||||
}
|
||||
x(scanner.Err())
|
||||
x(fp.Close())
|
||||
|
||||
fp, err = os.Open(filename)
|
||||
x(err)
|
||||
scanner = bufio.NewScanner(fp)
|
||||
for scanner.Scan() {
|
||||
aa := strings.SplitN(scanner.Text(), "\t", 2)
|
||||
n, err := strconv.Atoi(strings.TrimSpace(aa[0]))
|
||||
x(err)
|
||||
n1, ok := count[aa[1]]
|
||||
items = append(items, Item{
|
||||
text: aa[1],
|
||||
score: n - n1,
|
||||
isnew: !ok,
|
||||
})
|
||||
}
|
||||
x(scanner.Err())
|
||||
x(fp.Close())
|
||||
|
||||
sort.Slice(items, func(i, j int) bool {
|
||||
/*
|
||||
if items[i].isnew && !items[j].isnew {
|
||||
return true
|
||||
}
|
||||
if !items[i].isnew && items[j].isnew {
|
||||
return false
|
||||
}
|
||||
*/
|
||||
if items[i].score != items[j].score {
|
||||
return items[i].score > items[j].score
|
||||
}
|
||||
return items[i].text < items[j].text
|
||||
})
|
||||
|
||||
for _, item := range items {
|
||||
/*
|
||||
if item.score < 2 {
|
||||
break
|
||||
}
|
||||
*/
|
||||
p := "."
|
||||
if item.isnew {
|
||||
p = "N"
|
||||
}
|
||||
fmt.Printf("%s\t%4d\t%s\n", p, item.score, item.text)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func getPrev(filename string) string {
|
||||
mm := reYearWeek.FindStringSubmatch(filename)
|
||||
year, err := strconv.Atoi(mm[2][:4])
|
||||
x(err)
|
||||
week, err := strconv.Atoi(mm[2][5:])
|
||||
x(err)
|
||||
|
||||
week--
|
||||
if week == 0 {
|
||||
week = 53
|
||||
year--
|
||||
}
|
||||
newname := fmt.Sprintf("%s%d-%02d%s", mm[1], year, week, mm[3])
|
||||
if week == 53 {
|
||||
_, err := os.Stat(newname)
|
||||
if err == nil {
|
||||
return newname
|
||||
}
|
||||
newname = fmt.Sprintf("%s%d-%02d%s", mm[1], year, week-1, mm[3])
|
||||
}
|
||||
return newname
|
||||
}
|
||||
@@ -25,6 +25,8 @@ func main() {
|
||||
week, err := strconv.Atoi(aa[1])
|
||||
x(err)
|
||||
|
||||
weken, err := strconv.Atoi(os.Args[2])
|
||||
|
||||
if year < 1000 || year > 9999 {
|
||||
x(fmt.Errorf("ongeldig year: %d", year))
|
||||
}
|
||||
@@ -74,9 +76,9 @@ func main() {
|
||||
}
|
||||
t = t.AddDate(0, 0, 1-d)
|
||||
|
||||
// drie voorgaande weken
|
||||
t2 := t.AddDate(0, 0, -21)
|
||||
for i := range 4 {
|
||||
// voorgaande weken en deze week
|
||||
t2 := t.AddDate(0, 0, -7*(weken-1))
|
||||
for i := range weken {
|
||||
if i > 0 {
|
||||
fmt.Print(" -or")
|
||||
}
|
||||
@@ -85,9 +87,9 @@ func main() {
|
||||
t2 = t2.AddDate(0, 0, 7)
|
||||
}
|
||||
|
||||
// vanaf begin drie weken geleden t/m eind huidige week
|
||||
t = t.AddDate(0, 0, -21)
|
||||
for range 28 {
|
||||
// vanaf begin voorgaande weken t/m eind huidige week
|
||||
t = t.AddDate(0, 0, -7*(weken-1))
|
||||
for range 7 * weken {
|
||||
fmt.Printf(" -or -name %d-%02d-%02d.data.dz", t.Year(), t.Month(), t.Day())
|
||||
t = t.AddDate(0, 0, 1)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user