|
@@ -29,6 +29,36 @@ func readInput(file *os.File) []int {
|
|
|
return numbers
|
|
|
}
|
|
|
|
|
|
+func calculate(number int) int {
|
|
|
+ a := number * 64
|
|
|
+ number = (number ^ a) % 16777216
|
|
|
+
|
|
|
+ b := number / 32
|
|
|
+ number = (number ^ b) % 16777216
|
|
|
+
|
|
|
+ c := number * 2048
|
|
|
+ number = (number ^ c) % 16777216
|
|
|
+
|
|
|
+ return number
|
|
|
+}
|
|
|
+
|
|
|
+func generateNumber(number int, iterations int) int {
|
|
|
+ for i := 0; i < iterations; i++ {
|
|
|
+ number = calculate(number)
|
|
|
+ }
|
|
|
+
|
|
|
+ return number
|
|
|
+}
|
|
|
+
|
|
|
+func part1(numbers []int, iterations int) int {
|
|
|
+ var result int
|
|
|
+ for _, number := range numbers {
|
|
|
+ result += generateNumber(number, iterations)
|
|
|
+ }
|
|
|
+
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
func main() {
|
|
|
if len(os.Args) < 2 {
|
|
|
log.Fatal("You need to specify a file!")
|
|
@@ -41,5 +71,5 @@ func main() {
|
|
|
}
|
|
|
|
|
|
numbers := readInput(file)
|
|
|
- fmt.Println(numbers)
|
|
|
+ fmt.Println("Part1:", part1(numbers, 2000))
|
|
|
}
|