Skip to content

Commit 9dabb83

Browse files
committed
feat(2020-16/angch): hack
1 parent 4041195 commit 9dabb83

3 files changed

Lines changed: 188 additions & 0 deletions

File tree

2020-16/angch/main.go

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"log"
7+
"os"
8+
"strconv"
9+
"strings"
10+
)
11+
12+
func do(fileName string) (ret1 int, ret2 int) {
13+
file, err := os.Open(fileName)
14+
if err != nil {
15+
log.Fatal(err)
16+
}
17+
defer file.Close()
18+
scanner := bufio.NewScanner(file)
19+
20+
rules := make(map[string]map[int]bool)
21+
22+
for scanner.Scan() {
23+
l := scanner.Text()
24+
_ = l
25+
26+
if l == "" {
27+
break
28+
}
29+
r, a1, a2, b1, b2 := "", 0, 0, 0, 0
30+
31+
l1 := strings.Split(l, ":")
32+
fmt.Sscanf(l1[1], "%d-%d or %d-%d", &a1, &a2, &b1, &b2)
33+
r = l1[0]
34+
// log.Println(r)
35+
// log.Println(r, a1, a2, b1, b2)
36+
rng := make(map[int]bool)
37+
for i := a1; i <= a2; i++ {
38+
rng[i] = true
39+
}
40+
for i := b1; i <= b2; i++ {
41+
rng[i] = true
42+
}
43+
rules[r] = rng
44+
}
45+
mytick := []int{}
46+
for scanner.Scan() {
47+
l := scanner.Text()
48+
_ = l
49+
50+
if l == "" {
51+
break
52+
}
53+
f := strings.Split(l, ",")
54+
if len(f) < 2 {
55+
continue
56+
}
57+
for _, v := range f {
58+
i, _ := strconv.Atoi(v)
59+
mytick = append(mytick, i)
60+
}
61+
}
62+
_ = mytick
63+
64+
// log.Println(rules)
65+
invalidCount := 0
66+
checkTick := make([][]int, 0)
67+
for scanner.Scan() {
68+
l := scanner.Text()
69+
_ = l
70+
71+
if l == "" {
72+
break
73+
}
74+
f := strings.Split(l, ",")
75+
if len(f) < 2 {
76+
continue
77+
}
78+
invalidtick := false
79+
// a:
80+
values := make([]int, 0)
81+
for _, v := range f {
82+
i, _ := strconv.Atoi(v)
83+
// log.Println(i)
84+
85+
invalid := true
86+
for _, rule := range rules {
87+
if rule[i] {
88+
invalid = false
89+
break
90+
}
91+
}
92+
if invalid {
93+
// log.Println("invalid", i)
94+
invalidCount += i
95+
invalidtick = true
96+
}
97+
values = append(values, i)
98+
}
99+
if !invalidtick {
100+
// log.Println("add")
101+
checkTick = append(checkTick, values)
102+
}
103+
}
104+
ret1 = invalidCount
105+
// log.Println("mt", checkTick)
106+
107+
possibleFields := make(map[string]map[int]bool)
108+
for k, rule := range rules {
109+
field := 0
110+
possibleFields[k] = make(map[int]bool)
111+
f:
112+
for ; field < len(mytick); field++ {
113+
for _, tick := range checkTick {
114+
if !rule[tick[field]] {
115+
continue f
116+
}
117+
}
118+
possibleFields[k][field] = true
119+
}
120+
}
121+
122+
// log.Println(possibleFields)
123+
done := len(rules)
124+
125+
fieldMap := make(map[string]int)
126+
for done > 0 {
127+
a:
128+
for k := range rules {
129+
if len(possibleFields[k]) == 1 {
130+
field := 0
131+
for v := range possibleFields[k] {
132+
field = v
133+
}
134+
135+
// log.Println(k, field)
136+
fieldMap[k] = field
137+
138+
for k2 := range possibleFields {
139+
if k2 == k {
140+
continue
141+
}
142+
delete(possibleFields[k2], field)
143+
}
144+
done--
145+
delete(rules, k)
146+
break a
147+
}
148+
}
149+
}
150+
// log.Println(fieldMap)
151+
ret2 = 1
152+
for k, v := range fieldMap {
153+
if strings.Contains(k, "departure") {
154+
// log.Println(v)
155+
ret2 *= mytick[v]
156+
}
157+
}
158+
159+
return ret1, ret2
160+
}
161+
func main() {
162+
// log.Println(do("test.txt"))
163+
// log.Println(do("test2.txt"))
164+
log.Println(do("input.txt"))
165+
}

2020-16/angch/test.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class: 1-3 or 5-7
2+
row: 6-11 or 33-44
3+
seat: 13-40 or 45-50
4+
5+
your ticket:
6+
7,1,14
7+
8+
nearby tickets:
9+
7,3,47
10+
40,4,50
11+
55,2,20
12+
38,6,12

2020-16/angch/test2.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class: 0-1 or 4-19
2+
row: 0-5 or 8-19
3+
seat: 0-13 or 16-19
4+
5+
your ticket:
6+
11,12,13
7+
8+
nearby tickets:
9+
3,9,18
10+
15,1,5
11+
5,14,9

0 commit comments

Comments
 (0)