about summary refs log tree commit diff
path: root/scratch/advent-of-code-2019/day_4.py
diff options
context:
space:
mode:
Diffstat (limited to 'scratch/advent-of-code-2019/day_4.py')
-rw-r--r--scratch/advent-of-code-2019/day_4.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/scratch/advent-of-code-2019/day_4.py b/scratch/advent-of-code-2019/day_4.py
new file mode 100644
index 000000000000..adef73b452dc
--- /dev/null
+++ b/scratch/advent-of-code-2019/day_4.py
@@ -0,0 +1,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)]))