about summary refs log tree commit diff
path: root/advent-of-code/day_4.py
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-01-29T14·43+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-01-29T14·43+0000
commit5c9079a41059e077f2b71b68eb83ff9fcb2e38d1 (patch)
treedce7e3566b04213228fb3c92fc593ca18841d972 /advent-of-code/day_4.py
parentfb9380ba268b3cd27372acadb87b14cc96163374 (diff)
Splice ./universe directory into ./
Manually merging:
- README.md: I added the description from universe/README.md into the heading of
  dotfiles/README.md.
- .envrc: dotfiles/.envrc was a superset of universe/.envrc
- .gitignore: Adding some of the ignored patterns from universe/.gitignore to
  dotfiles/.gitignore

Everything else here should be a simple rename.
Diffstat (limited to 'advent-of-code/day_4.py')
-rw-r--r--advent-of-code/day_4.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/advent-of-code/day_4.py b/advent-of-code/day_4.py
new file mode 100644
index 000000000000..adef73b452dc
--- /dev/null
+++ b/advent-of-code/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)]))