Skip to content

Commit 02a3537

Browse files
author
Oscar Franzén
committed
day24
1 parent e383342 commit 02a3537

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed

digidis-go/day24/day24.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
"strings"
7+
)
8+
9+
var ports [][2]int
10+
var used map[int]bool
11+
12+
func main() {
13+
data, _ := ioutil.ReadFile("input.txt")
14+
rows := strings.Split(string(data), "\n")
15+
var a, b int
16+
for _, r := range rows {
17+
fmt.Sscanf(r, "%d/%d", &a, &b)
18+
ports = append(ports, [2]int{a, b})
19+
}
20+
21+
used = make(map[int]bool)
22+
for i, p := range ports {
23+
if p[0] == 0 {
24+
fmt.Printf("starting from %v\n", p)
25+
solve(i, p[1])
26+
}
27+
if p[1] == 0 {
28+
fmt.Printf("starting from %v\n", p)
29+
solve(i, p[0])
30+
}
31+
}
32+
33+
fmt.Printf("Maxium strength %v\n", maxS)
34+
fmt.Printf("Maxium strength and length %v\n", maxSL)
35+
}
36+
37+
var maxS, maxL, maxSL int
38+
39+
func solve(start int, next int) {
40+
used[start] = true
41+
for i, p := range ports {
42+
if !used[i] && p[0] == next {
43+
solve(i, p[1])
44+
}
45+
if !used[i] && p[1] == next {
46+
solve(i, p[0])
47+
}
48+
}
49+
s, l := calc()
50+
maxS = max(maxS, s)
51+
maxL = max(maxL, l)
52+
if l == maxL && s > maxSL {
53+
maxSL = s
54+
}
55+
used[start] = false
56+
}
57+
58+
func max(a, b int) int {
59+
if a > b {
60+
return a
61+
}
62+
return b
63+
}
64+
65+
func calc() (s, l int) {
66+
for i := range used {
67+
if used[i] {
68+
l++
69+
s = s + ports[i][0] + ports[i][1]
70+
}
71+
}
72+
return
73+
}

digidis-go/day24/input.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
48/5
2+
25/10
3+
35/49
4+
34/41
5+
35/35
6+
47/35
7+
34/46
8+
47/23
9+
28/8
10+
27/21
11+
40/11
12+
22/50
13+
48/42
14+
38/17
15+
50/33
16+
13/13
17+
22/33
18+
17/29
19+
50/0
20+
20/47
21+
28/0
22+
42/4
23+
46/22
24+
19/35
25+
17/22
26+
33/37
27+
47/7
28+
35/20
29+
8/36
30+
24/34
31+
6/7
32+
7/43
33+
45/37
34+
21/31
35+
37/26
36+
16/5
37+
11/14
38+
7/23
39+
2/23
40+
3/25
41+
20/20
42+
18/20
43+
19/34
44+
25/46
45+
41/24
46+
0/33
47+
3/7
48+
49/38
49+
47/22
50+
44/15
51+
24/21
52+
10/35
53+
6/21
54+
14/50

0 commit comments

Comments
 (0)