-
Notifications
You must be signed in to change notification settings - Fork 1
/
day3.go
61 lines (54 loc) · 1.26 KB
/
day3.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"fmt"
"os"
"regexp"
"utils"
)
func main() {
lines := utils.ReadFileToLines(os.Args[1])
var claims []map[string]int
pattern := "#(?P<id>\\d+) @ (?P<x>\\d+),(?P<y>\\d+): (?P<xsize>\\d+)x(?P<ysize>\\d+)"
re := regexp.MustCompile(pattern)
for _, line := range lines {
match := re.FindStringSubmatch(line)
var claim = make(map[string]int)
for i, name := range re.SubexpNames() {
if i > 0 && i <= len(match) {
claim[name] = utils.Atoi(match[i])
}
}
claims = append(claims, claim)
}
const inches = 1000
fabric := [inches][inches]uint{}
for _, claim := range claims {
for x := claim["x"]; x < claim["x"]+claim["xsize"]; x++ {
for y := claim["y"]; y < claim["y"]+claim["ysize"]; y++ {
fabric[x][y]++
}
}
}
var sumOfMultiple int
for _, x := range fabric {
for _, y := range x {
if y >= 2 {
sumOfMultiple++
}
}
}
fmt.Printf("Number of square inches within multiple claims: %d\n", sumOfMultiple)
for _, claim := range claims {
var found = true
for x := claim["x"]; x < claim["x"]+claim["xsize"]; x++ {
for y := claim["y"]; y < claim["y"]+claim["ysize"]; y++ {
if fabric[x][y] >= 2 {
found = false
}
}
}
if found {
fmt.Printf("Claim that doesn't overlap: %v\n", claim)
}
}
}