import sys
import os
sys.path.insert(1, os.path.abspath('../../'))
from python_tools.aoc_utils import *

levels = []

def part_one(input):
    safe_levels=0
    for i in input:
        levels.append(list(map(int,i.split())))
    for i in levels:
        increasing = (i[1]-i[0]) > 0
        maybe_safe = True
        for j in range(1,len(i)):
            diff = i[j] - i[j-1]
            inc = diff > 0
            if ((inc != increasing) or (abs(diff) > 3) or (diff==0)):
                maybe_safe = False
                break
        if maybe_safe:
            safe_levels+=1
        else:
            continue

    print("Part_One: ", safe_levels)


def test_level(level, remove_one):
    increasing = (level[1]-level[0]) > 0
    maybe_safe = True
    index = 1
    while(index < len(level)):
        diff = level[index] - level[index-1]
        inc = diff > 0
        if ((inc != increasing) or (abs(diff) > 3) or (diff==0)):
            if remove_one:
                remove_one = False
                #if its less then 2 any of the first 3 numbers
                #could be the one causing issues.
                if index <= 2:
                    l0 = level.copy()
                    l2 = level.copy()
                    del level[1]
                    del l0[0]
                    del l2[2]
                    maybe_safe = test_level(level, False) or test_level(l0, False) or test_level(l2, False)

                elif index == len(level)-1:
                    maybe_safe = True
                else:
                    del level[index]
                    maybe_safe = test_level(level, False)
            else:
                maybe_safe = False
            break
        index += 1
    return maybe_safe


def part_two(input):
    safe_levels=0
    for i in levels:
        if test_level(i, True):
            safe_levels += 1

    print("Part_Two: ", safe_levels)

def main():
    contents = file2list("input.txt")
    part_one(contents)
    part_two(contents)

if __name__ == "__main__":
    main()