summaryrefslogtreecommitdiff
path: root/05/main.py
diff options
context:
space:
mode:
Diffstat (limited to '05/main.py')
-rwxr-xr-x05/main.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/05/main.py b/05/main.py
new file mode 100755
index 0000000..876d20c
--- /dev/null
+++ b/05/main.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+
+
+
+def solve_part1(lines):
+ result = 0
+
+ for line in lines:
+ # Rule 1: at least three vowels
+ nvowels = 0
+ for v in "aeiou":
+ nvowels += line.count(v)
+ rule1 = nvowels >= 3
+
+ # Rule 2: at least one double letter
+ rule2 = False
+ for i in range(len(line) - 1):
+ if line[i] == line[i + 1]:
+ rule2 = True
+ break
+
+ # Rule 3: no "ab", "cd", "pq" or "xy"
+ rule3 = True
+ for s in ["ab", "cd", "pq", "xy"]:
+ if line.count(s) > 0:
+ rule3 = False
+ break
+
+ if rule1 and rule2 and rule3:
+ result += 1
+
+ return result
+
+
+
+def solve_part2(lines):
+ result = 0
+
+ for line in lines:
+ # Rule 1: twice-occurring two-letter sequence
+ rule1 = False
+ for i in range(len(line) - 1):
+ s = line[i : i + 2]
+ if line.count(s) >= 2:
+ rule1 = True
+ break
+
+ # Rule 2: ABA-like sequence
+ rule2 = False
+ for i, c in enumerate(line):
+ if i < len(line) - 2 and line[i + 2] == c:
+ rule2 = True
+ break
+
+ if rule1 and rule2:
+ result += 1
+
+ return result
+
+
+
+def main():
+ # Read list of strings from input text file
+ with open("input.txt", "r") as f:
+ lines = f.read().splitlines()
+
+ print("Part 1 solution:", solve_part1(lines)) # 258 for me
+ print("Part 2 solution:", solve_part2(lines)) # 53 for me
+
+
+
+if __name__ == "__main__":
+ main()