+package day06
+
+import (
+ "fmt"
+ "math"
+)
+
+type Input struct {
+ Time uint64
+ Distance uint64
+}
+func Part1(input string) int {
+ answer := 1.0
+ ins := parseInput1(input)
+ for _, in := range ins {
+ t1, t2, _ := solveQuadratic(1, float64(in.Time) * -1, float64(in.Distance))
+ fmt.Printf("t1: %v t2: %v ans: %v\n", t1, t2, (t1 - t2 + 1))
+ answer *= (t1 - t2 + 1)
+
+ }
+ return int(answer)
+}
+
+func Part2(input string) int {
+ answer := 1.0
+ ins := parseInput2(input)
+ for _, in := range ins {
+ t1, t2, _ := solveQuadratic(1, float64(in.Time) * -1, float64(in.Distance))
+ fmt.Printf("t1: %v t2: %v ans: %v\n", t1, t2, (t1 - t2 + 1))
+ answer *= (t1 - t2 + 1)
+
+ }
+ return int(answer)}
+
+func parseInput1(input string) []Input {
+ var in []Input
+ in = append(in, Input{46, 214})
+ in = append(in, Input{80, 1177})
+ in = append(in, Input{78, 1402})
+ in = append(in, Input{66, 1024})
+ return in
+}
+
+func parseInput2(input string) []Input {
+ var in []Input
+ in = append(in, Input{46807866, 214117714021024})
+ return in
+}
+
+func solveQuadratic(a, b, c float64) (float64, float64, error) {
+ // Calculate the discriminant
+ discriminant := b*b - 4*a*c
+
+ // Check if the discriminant is non-negative
+ if discriminant < 0 {
+ return 0, 0, fmt.Errorf("no real roots, discriminant is negative")
+ }
+
+ // Calculate the roots
+ root1 := (-b + math.Sqrt(discriminant)) / (2 * a)
+ root2 := (-b - math.Sqrt(discriminant)) / (2 * a)
+
+ if isWholeNumber(root1) { root1 = root1 - 1.0 }
+ if isWholeNumber(root2) { root2 = root2 + 1.0 }
+ return math.Floor(root1), math.Ceil(root2), nil
+}
+
+func isWholeNumber(x float64) bool {
+ rounded := math.Round(x)
+ return x == rounded
+}
\ No newline at end of file