aoc/2015/day05.py

96 lines
1.9 KiB
Python

#!/usr/bin/env python3
from typing import TextIO
def nice_or_naughty(string: str) -> int:
"""0 for naughty and 1 for nice"""
# count vowels
cv = (
string.count("a")
+ string.count("e")
+ string.count("i")
+ string.count("o")
+ string.count("u")
)
if cv < 3:
return 0
# twice in a row
dbl = 0
for ch in range(0, len(string)):
if len(string) > ch + 1 and string[ch] == string[ch + 1]:
dbl += 1
if dbl == 0:
return 0
# naughty strings
n = ("ab", "cd", "pq", "xy")
for x in n:
if x in string:
return 0
return 1
def nn2(string: str) -> int:
# first
a = 0 # we can only have 0 or 1, because of the return
# not anymore b/c it's BOTH, but whatever
for c in range(0, len(string) - 1):
pair = string[c : c + 2]
# print("pair is", pair)
for d in range(c + 2, len(string) - 1): # , len(string) - 2):
# print("trying to match", pair, string[d : d + 2])
if d + 1 < len(string) and string[d : d + 2] == pair:
# print("yay")
a += 1
break
else: # ?? huuhhh? https://stackoverflow.com/questions/653509/breaking-out-of-nested-loops
continue
break
# second
b = 0
for c in range(0, len(string) - 2):
if string[c] == string[c + 2]:
b += 1
break
if a == 1 and b == 1:
return 1
return 0
def part1(file: TextIO) -> int:
count = 0
for string in file:
count += nice_or_naughty(string.strip())
return count
def part2(file: TextIO) -> int:
count = 0
for string in file:
count += nn2(string.strip())
return count
if __name__ == "__main__":
with open("day05.txt", "r") as f:
print(part1(f))
with open("day05.txt", "r") as f:
print(part2(f))