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_positions(nums):
    pos1 = []
    pos2 = []
    for i in nums:
        splitted_nums = []
        splitted_nums = i.split('-')
        posx = int(splitted_nums[0])
        posy = int(splitted_nums[1])
        pos1.append(posx)
        pos2.append(posy)
    return pos1, pos2

def find_valids(strings, pos1, pos2, letters):
    j = 0
    valids = []
    for i in strings:
        string = strings[j]
        low_pos = pos1[j] - 1
        high_pos = pos2[j] - 1
        if string[low_pos] != string[high_pos]:
            if string[low_pos] == letters[j]:
                valids.append("Valid")
            elif string[high_pos] == letters[j]:
                valids.append("Valid")
            else:
                valids.append("Invalid")
        else:
            valids.append("Invalid")
        j = j+1
    return valids

list = split_into_list("day2input.txt")
nums = get_numbers(list)
letters = get_letters(list)
strings  = get_strings(list)
pos1, pos2 = find_positions(nums)
valids = find_valids(strings, pos1, pos2, letters)
print(valids)
print(valids.count("Valid"))
