Browse Source

No globals

Piotr Czajkowski 3 years ago
parent
commit
5f9ba18797
1 changed files with 13 additions and 13 deletions
  1. 13 13
      day15/day15.go

+ 13 - 13
day15/day15.go

@@ -7,10 +7,9 @@ import (
 	"strings"
 )
 
-var lastNumber int
-var numbersSpoken map[int][2]int
-
-func readNumbers(startingNumbers string) {
+func readNumbers(startingNumbers string) (int, map[int][2]int) {
+	lastNumber := 0
+	numbersSpoken := make(map[int][2]int)
 	for i, item := range strings.Split(string(startingNumbers), ",") {
 		var number int
 		n, err := fmt.Sscanf(item, "%d", &number)
@@ -21,9 +20,11 @@ func readNumbers(startingNumbers string) {
 		lastNumber = number
 		numbersSpoken[number] = [2]int{i + 1, 0}
 	}
+
+	return lastNumber, numbersSpoken
 }
 
-func playGame(currentRound, end int) int {
+func playGame(currentRound, end, lastNumber int, numbersSpoken map[int][2]int) (int, map[int][2]int) {
 	var currentNumber int
 	for ; currentRound <= end; currentRound++ {
 		if spoken, ok := numbersSpoken[lastNumber]; !ok {
@@ -50,11 +51,7 @@ func playGame(currentRound, end int) int {
 		lastNumber = currentNumber
 	}
 
-	return currentNumber
-}
-
-func init() {
-	numbersSpoken = make(map[int][2]int)
+	return currentNumber, numbersSpoken
 }
 
 func main() {
@@ -62,7 +59,10 @@ func main() {
 		log.Fatal("You need to specify starting numbers!")
 	}
 
-	readNumbers(os.Args[1])
-	fmt.Println("Part1:", playGame(len(numbersSpoken)+1, 2020))
-	fmt.Println("Part2:", playGame(2021, 30000000))
+	lastNumber, numbersSpoken := readNumbers(os.Args[1])
+	lastNumber, numbersSpoken = playGame(len(numbersSpoken)+1, 2020, lastNumber, numbersSpoken)
+	fmt.Println("Part1:", lastNumber)
+
+	lastNumber, numbersSpoken = playGame(2021, 30000000, lastNumber, numbersSpoken)
+	fmt.Println("Part2:", lastNumber)
 }