Skip to content

Commit 770844d

Browse files
committed
day22: solve first part
1 parent c296b3f commit 770844d

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

day22/example1.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
15887950
2+
16495136
3+
527345
4+
704524
5+
1553684
6+
12683156
7+
11100544
8+
12249484
9+
7753432
10+
5908254

day22/example2.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1
2+
10
3+
100
4+
2024

day22/main.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"os"
7+
8+
"github.com/fxnn/adventofcode2024/util"
9+
)
10+
11+
func readInitialSecrets() []int {
12+
var scanner = bufio.NewScanner(os.Stdin)
13+
14+
var secrets []int
15+
for scanner.Scan() {
16+
var line = scanner.Text()
17+
secrets = append(secrets, util.Atoi(line))
18+
}
19+
if err := scanner.Err(); err != nil {
20+
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
21+
os.Exit(1)
22+
}
23+
24+
return secrets
25+
}
26+
27+
func mixAndPrune(number, secret int) int {
28+
return (number ^ secret) % 16777216
29+
}
30+
31+
func calculateNextSecret(secret int) int {
32+
var step1 = mixAndPrune(secret*64, secret)
33+
var step2 = mixAndPrune(step1/32, step1)
34+
var step3 = mixAndPrune(step2*2048, step2)
35+
return step3
36+
}
37+
38+
func main() {
39+
var sum int
40+
for _, initialSecret := range readInitialSecrets() {
41+
var secret = initialSecret
42+
for i := 0; i < 2000; i++ {
43+
secret = calculateNextSecret(secret)
44+
}
45+
sum += secret
46+
fmt.Printf("%d: %d\n", initialSecret, secret)
47+
}
48+
fmt.Printf("sum of secrets: %d\n", sum)
49+
}

0 commit comments

Comments
 (0)