File size: 1,833 Bytes
a4da721
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
file = "./input.txt"

def next_secret(secret):
    secret = (secret * 64) ^ secret
    secret = secret % 16777216
    secret = (secret // 32) ^ secret
    secret = secret % 16777216
    secret = (secret * 2048) ^ secret
    secret = secret % 16777216
    return secret

def solve1():
    with open(file, 'r') as f:
        secrets = [int(line.strip()) for line in f]
    
    total_sum = 0
    for secret in secrets:
        for _ in range(2000):
            secret = next_secret(secret)
        total_sum += secret
    print(total_sum)


def get_prices(initial_secret):
    prices = []
    secret = initial_secret
    prices.append(secret % 10)
    for _ in range(2000):
        secret = next_secret(secret)
        prices.append(secret % 10)
    return prices

def get_changes(prices):
    changes = []
    for i in range(1, len(prices)):
        changes.append(prices[i] - prices[i-1])
    return changes

def solve2():
    with open(file, 'r') as f:
        secrets = [int(line.strip()) for line in f]

    max_bananas = 0

    for c1 in range(-9, 10):
        for c2 in range(-9, 10):
            for c3 in range(-9, 10):
                for c4 in range(-9, 10):
                    sequence = [c1, c2, c3, c4]
                    total_bananas = 0
                    for secret in secrets:
                        prices = get_prices(secret)
                        changes = get_changes(prices)
                        
                        sold = False
                        for i in range(len(changes) - 3):
                            if changes[i:i+4] == sequence:
                                total_bananas += prices[i+4]
                                sold = True
                                break
                    max_bananas = max(max_bananas, total_bananas)
    print(max_bananas)


solve1()
solve2()