about summary refs log tree commit diff
path: root/universe/advent-of-code/day_4.py
blob: adef73b452dc68f59b63665b44ca134ca950d7b6 (plain) (blame)
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
import re

start = 134792
end = 675810


def satisfies(x):
    x = str(x)
    result = False
    double, not_decreasing = False, False

    # double and *only* double exists
    for i in range(len(x) - 1):
        # double and left-of-a  is BOL or !x
        #        and right-of-b is EOL or !x
        a, b = x[i], x[i + 1]
        bol = i - 1 < 0
        eol = i + 2 >= len(x)
        if a == b and (bol or x[i - 1] != a) and (eol or x[i + 2] != a):
            double = True
            break

    # not_decreasing
    prev = int(x[0])
    for a in x[1:]:
        a = int(a)
        if prev > a:
            return False
        prev = a
    not_decreasing = True

    return double and not_decreasing


print(len([x for x in range(start, end + 1) if satisfies(x)]))