Skip to content

Commit 29a6065

Browse files
author
Ale Paredes
committed
Add day6 solution
1 parent 1a789e0 commit 29a6065

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

2023/day6/inp.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Time: 53 89 76 98
2+
Distance: 313 1090 1214 1201

2023/day6/main.go

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"regexp"
7+
"strconv"
8+
"strings"
9+
)
10+
11+
type Record struct {
12+
lowHold int
13+
highHold int
14+
}
15+
16+
func parseLine(line string) []int {
17+
var result []int
18+
19+
re := regexp.MustCompile(`\d+`)
20+
for _, e := range re.FindAllString(line, -1) {
21+
i, err := strconv.Atoi(e)
22+
if err != nil {
23+
fmt.Println(err)
24+
}
25+
26+
result = append(result, i)
27+
}
28+
29+
return result
30+
}
31+
32+
func beatRecord(time int, distance int) Record {
33+
var record Record
34+
35+
for hold := 1; hold <= time; hold++ {
36+
travelDistance := hold * (time - hold)
37+
38+
if record.highHold != 0 && record.lowHold != 0 {
39+
break
40+
}
41+
42+
if travelDistance > distance {
43+
record.lowHold = hold
44+
record.highHold = time - hold
45+
}
46+
47+
}
48+
49+
return record
50+
}
51+
52+
func main() {
53+
54+
input, err := os.ReadFile("inp.txt")
55+
if err != nil {
56+
fmt.Println(err)
57+
}
58+
lines := strings.Split(string(input), "\n")
59+
60+
times := parseLine(string(lines[0]))
61+
distances := parseLine(string(lines[1]))
62+
63+
ways := 1
64+
65+
for i, time := range times {
66+
record := beatRecord(time, distances[i])
67+
ways *= record.highHold - record.lowHold + 1
68+
}
69+
70+
fmt.Println("Part 1", ways)
71+
72+
correctTime, err := strconv.Atoi(strings.Replace(strings.TrimPrefix(string(lines[0]), "Time:"), " ", "", -1))
73+
if err != nil {
74+
fmt.Println(err)
75+
}
76+
correctDistance, err := strconv.Atoi(strings.Replace(strings.TrimPrefix(string(lines[1]), "Distance:"), " ", "", -1))
77+
if err != nil {
78+
fmt.Println(err)
79+
}
80+
81+
record := beatRecord(correctTime, correctDistance)
82+
83+
fmt.Println("Part 2", record.highHold-record.lowHold+1)
84+
}

0 commit comments

Comments
 (0)