|
|
@ -0,0 +1,80 @@ |
|
|
|
|
|
import re |
|
|
|
|
|
|
|
|
|
|
|
def split_into_list(file_path): |
|
|
|
|
|
f = open(file_path, "r") |
|
|
|
|
|
list_of_lists = [] |
|
|
|
|
|
for line in f: |
|
|
|
|
|
stripped_line = line.strip() |
|
|
|
|
|
stripped_line = str(stripped_line) |
|
|
|
|
|
#line_list = stripped_line.split() |
|
|
|
|
|
list_of_lists.append(stripped_line) |
|
|
|
|
|
|
|
|
|
|
|
f.close() |
|
|
|
|
|
return(list_of_lists) |
|
|
|
|
|
|
|
|
|
|
|
def get_numbers(list): |
|
|
|
|
|
nums = [] |
|
|
|
|
|
for i in list: |
|
|
|
|
|
x = re.search("^([\S]+)", i).group(0) |
|
|
|
|
|
nums.append(x) |
|
|
|
|
|
return nums |
|
|
|
|
|
|
|
|
|
|
|
def get_strings(list): |
|
|
|
|
|
strings = [] |
|
|
|
|
|
for i in list: |
|
|
|
|
|
y = re.sub(r".*?(\w+)\s*$", r"\1", i) |
|
|
|
|
|
strings.append(y) |
|
|
|
|
|
return strings |
|
|
|
|
|
|
|
|
|
|
|
def get_letters(list): |
|
|
|
|
|
letters = [] |
|
|
|
|
|
for i in list: |
|
|
|
|
|
z = re.match("([^:]+)", i).group(0) |
|
|
|
|
|
z = z.split('.')[0].lstrip().split(' ')[1] |
|
|
|
|
|
letters.append(z) |
|
|
|
|
|
return letters |
|
|
|
|
|
|
|
|
|
|
|
def find_occurences(strings, letters): |
|
|
|
|
|
j = 0 |
|
|
|
|
|
number_of_occurences = [] |
|
|
|
|
|
for i in strings: |
|
|
|
|
|
corresponding_letter = letters[j] |
|
|
|
|
|
k = i.count(corresponding_letter) |
|
|
|
|
|
number_of_occurences.append(k) |
|
|
|
|
|
j = j+1 |
|
|
|
|
|
return number_of_occurences |
|
|
|
|
|
|
|
|
|
|
|
def find_max_min(nums): |
|
|
|
|
|
mins = [] |
|
|
|
|
|
maxes = [] |
|
|
|
|
|
for i in nums: |
|
|
|
|
|
splitted_nums = [] |
|
|
|
|
|
splitted_nums = i.split('-') |
|
|
|
|
|
min = int(splitted_nums[0]) |
|
|
|
|
|
max = int(splitted_nums[1]) |
|
|
|
|
|
mins.append(min) |
|
|
|
|
|
maxes.append(max) |
|
|
|
|
|
return mins, maxes |
|
|
|
|
|
|
|
|
|
|
|
def compare_occurences(number_of_occurences, mins, maxes): |
|
|
|
|
|
j = 0 |
|
|
|
|
|
valids = [] |
|
|
|
|
|
for i in number_of_occurences: |
|
|
|
|
|
min = mins[j] |
|
|
|
|
|
max = maxes[j] |
|
|
|
|
|
j = j+1 |
|
|
|
|
|
if min <= i and max >= i: |
|
|
|
|
|
valids.append("Valid") |
|
|
|
|
|
else: |
|
|
|
|
|
valids.append("Invalid") |
|
|
|
|
|
return valids |
|
|
|
|
|
|
|
|
|
|
|
list = split_into_list("day2input.txt") |
|
|
|
|
|
nums = get_numbers(list) |
|
|
|
|
|
letters = get_letters(list) |
|
|
|
|
|
strings = get_strings(list) |
|
|
|
|
|
number_of_occurences = find_occurences(strings, letters) |
|
|
|
|
|
mins, maxes = find_max_min(nums) |
|
|
|
|
|
valids = compare_occurences(number_of_occurences, mins, maxes) |
|
|
|
|
|
print(valids) |
|
|
|
|
|
print(valids.count("Valid")) |