Ver código fonte

Maybe some direction

Piotr Czajkowski 4 anos atrás
pai
commit
b4182e5620
1 arquivos alterados com 41 adições e 0 exclusões
  1. 41 0
      day13/day13.go

+ 41 - 0
day13/day13.go

@@ -99,6 +99,46 @@ func findEarliestBus(data schedule) int64 {
 	return earliest * earliestID
 }
 
+func calculate(buses []bus) int64 {
+	num := []int64{}
+	var prod int64 = 1
+	pp := []int64{}
+	inv := []int64{}
+	rem := []int64{}
+
+	for i, current := range buses {
+		if current.id == "x" {
+			continue
+		}
+
+		num = append(num, current.idValue)
+		rem = append(rem, int64(i))
+		prod *= current.idValue
+	}
+
+	for i, _ := range num {
+		pp = append(pp, prod/num[i])
+	}
+
+	for i, _ := range num {
+		var x int64 = 1
+		for {
+			if (pp[i]*x)%num[i] == 1 {
+				inv = append(inv, x)
+				break
+			}
+			x++
+		}
+	}
+
+	var sub int64
+	for i, _ := range num {
+		sub += rem[i] * pp[i] * inv[i]
+	}
+
+	return sub % prod
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a file!")
@@ -117,4 +157,5 @@ func main() {
 
 	data = calculateTimes(data)
 	fmt.Println("Part1:", findEarliestBus(data))
+	fmt.Println("Part2:", calculate(data.buses))
 }