-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path05.go
42 lines (40 loc) · 1.01 KB
/
05.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main
import "bufio"
import "fmt"
import "slices"
import "os"
import "strings"
import "regexp"
import "strconv"
func main() {
type key struct {left, right int}
var less = make(map[key]int)
var compare = func (left, right int) int {
if _, found := less[key{left, right}]; found { return -1 }
if _, found := less[key{right, left}]; found { return 1 }
return 0
}
var re = regexp.MustCompile("\\d+")
var scanner = bufio.NewScanner(os.Stdin)
var sums [2]int
for scanner.Scan() {
var line = scanner.Text()
var numbers []int
for _, ss := range re.FindAllString(line, -1) {
n, _ := strconv.ParseInt(ss, 10, 32)
numbers = append(numbers, int(n))
}
if strings.Contains(line, "|") {
less[key{numbers[0], numbers[1]}] = -1
} else {
if len(numbers) == 0 { continue } // skip empty line
if slices.IsSortedFunc(numbers, compare) {
sums[0] += numbers[len(numbers) / 2]
} else {
slices.SortFunc(numbers, compare)
sums[1] += numbers[len(numbers) / 2]
}
}
}
fmt.Println(sums)
}