60 lines
1.2 KiB
Python
60 lines
1.2 KiB
Python
|
import shared
|
||
|
import matrix
|
||
|
from collections import Counter
|
||
|
import numpy as np
|
||
|
|
||
|
letters = [x for x in 'abcdefghijklmnopqrstuvwxyz']
|
||
|
letter_doubles = [x+x for x in letters]
|
||
|
vowels = [x for x in 'aeiou']
|
||
|
no = ['ab','cd','pq','xy']
|
||
|
|
||
|
def check_pt1(s):
|
||
|
any_no = [True for x in no if x in s]
|
||
|
if any_no:
|
||
|
return False
|
||
|
|
||
|
vowel_count = 0
|
||
|
for l in s:
|
||
|
if l in vowels:
|
||
|
vowel_count += 1
|
||
|
if vowel_count < 3:
|
||
|
return False
|
||
|
|
||
|
for d in letter_doubles:
|
||
|
if d in s:
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
|
||
|
def pt1(strs):
|
||
|
okay = [s for s in strs if check_pt1(s)]
|
||
|
print(len(okay))
|
||
|
|
||
|
|
||
|
def check_pt2(s):
|
||
|
for idx in range(len(s)-1):
|
||
|
me = s[idx:idx+2]
|
||
|
index = s.rindex(me)
|
||
|
if index and index != idx and index != idx+1:
|
||
|
break
|
||
|
else:
|
||
|
return False
|
||
|
for idx in range(len(s)-2):
|
||
|
me = s[idx:idx+3]
|
||
|
if me[0] == me[2]:
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
def pt2(strs):
|
||
|
okay = [s for s in strs if check_pt2(s)]
|
||
|
print(len(okay))
|
||
|
|
||
|
def main():
|
||
|
with open(shared.get_fname(5), "r") as f:
|
||
|
inp = [x.rstrip() for x in f.readlines()]
|
||
|
pt1(inp)
|
||
|
pt2(inp)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|