@@ -11,75 +11,58 @@ import (
11
11
"strings"
12
12
)
13
13
14
- func calculateDistances (input * os.File ) (int , error ) {
14
+ type NumberPairs struct {
15
+ a []int
16
+ b []int
17
+ }
18
+
19
+ func readAndSortNumbers (input * os.File ) NumberPairs {
15
20
scanner := bufio .NewScanner (input )
16
- sum := 0
17
- a := make ([]int , 0 )
18
- b := make ([]int , 0 )
21
+ pairs := NumberPairs {
22
+ a : make ([]int , 0 ),
23
+ b : make ([]int , 0 ),
24
+ }
25
+
19
26
for scanner .Scan () {
20
- line := scanner .Text ()
21
- first := strings .Split (line , " " )[0 ]
22
- firstN , err := strconv .Atoi (first )
27
+ numbers := strings .Split (scanner .Text (), " " )
28
+ firstN , err := strconv .Atoi (numbers [0 ])
23
29
if err != nil {
24
30
log .Fatal (err )
25
31
}
26
- second := strings .Split (line , " " )[1 ]
27
- secondN , err := strconv .Atoi (second )
32
+ secondN , err := strconv .Atoi (numbers [1 ])
28
33
if err != nil {
29
34
log .Fatal (err )
30
35
}
31
- a = append (a , firstN )
32
- b = append (b , secondN )
36
+ pairs . a = append (pairs . a , firstN )
37
+ pairs . b = append (pairs . b , secondN )
33
38
}
34
- sort .Slice (a , func (i , j int ) bool {
35
- return a [i ] < a [j ]
36
- })
37
- sort .Slice (b , func (i , j int ) bool {
38
- return b [i ] < b [j ]
39
- })
40
- for i := 0 ; i < len (a ); i ++ {
41
- diff := math .Abs (float64 (a [i ] - b [i ]))
39
+
40
+ sort .Ints (pairs .a )
41
+ sort .Ints (pairs .b )
42
+ return pairs
43
+ }
44
+
45
+ func calculateDistances (pairs NumberPairs ) int {
46
+ sum := 0
47
+ for i := 0 ; i < len (pairs .a ); i ++ {
48
+ diff := math .Abs (float64 (pairs .a [i ] - pairs .b [i ]))
42
49
sum += int (diff )
43
50
}
44
- return sum , nil
51
+ return sum
45
52
}
46
53
47
- func similarityScore (input * os.File ) (int , error ) {
48
- scanner := bufio .NewScanner (input )
54
+ func similarityScore (pairs NumberPairs ) int {
49
55
sum := 0
50
- a := make ([]int , 0 )
51
- b := make ([]int , 0 )
52
- for scanner .Scan () {
53
- line := scanner .Text ()
54
- first := strings .Split (line , " " )[0 ]
55
- firstN , err := strconv .Atoi (first )
56
- if err != nil {
57
- log .Fatal (err )
58
- }
59
- second := strings .Split (line , " " )[1 ]
60
- secondN , err := strconv .Atoi (second )
61
- if err != nil {
62
- log .Fatal (err )
63
- }
64
- a = append (a , firstN )
65
- b = append (b , secondN )
66
- }
67
- sort .Slice (a , func (i , j int ) bool {
68
- return a [i ] < a [j ]
69
- })
70
- sort .Slice (b , func (i , j int ) bool {
71
- return b [i ] < b [j ]
72
- })
73
- for _ , left := range a {
56
+ for _ , left := range pairs .a {
74
57
count := 0
75
- for _ , right := range b {
58
+ for _ , right := range pairs . b {
76
59
if left == right {
77
60
count ++
78
61
}
79
62
}
80
63
sum += left * count
81
64
}
82
- return sum , nil
65
+ return sum
83
66
}
84
67
85
68
func main () {
@@ -88,15 +71,9 @@ func main() {
88
71
log .Fatal (err )
89
72
}
90
73
defer input .Close ()
91
- distances , err := calculateDistances (input )
92
- if err != nil {
93
- log .Fatal (err )
94
- }
95
- input .Seek (0 , 0 )
96
- similarityScore , err := similarityScore (input )
97
- if err != nil {
98
- log .Fatal (err )
99
- }
74
+ pairs := readAndSortNumbers (input )
75
+ distances := calculateDistances (pairs )
76
+ similarity := similarityScore (pairs )
100
77
fmt .Println (distances )
101
- fmt .Println (similarityScore )
78
+ fmt .Println (similarity )
102
79
}
0 commit comments