40 lines
1.0 KiB
Python
Executable File
40 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
def read_input(filename):
|
|
with open(filename) as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
yield line.split(" ")
|
|
|
|
def is_safe(levels):
|
|
tmp = [ (int(levels[i-1]) - int(levels[i])) for i in range(1,len(levels))]
|
|
tmp2 = [ abs(x) for x in tmp]
|
|
if (abs(sum(tmp)) != sum(tmp2)):
|
|
return False
|
|
tmp3 = [x for x in tmp2 if x in [1,2,3]]
|
|
if len(tmp3) != len(tmp2):
|
|
return False
|
|
return True
|
|
|
|
def main(args):
|
|
safe_count = 0
|
|
for levels in read_input(args.file):
|
|
if (is_safe(levels)):
|
|
safe_count += 1
|
|
continue
|
|
for i in range(len(levels)):
|
|
tmp2 = levels[:i] + levels[i+1 :]
|
|
if is_safe(tmp2):
|
|
safe_count += 1
|
|
break
|
|
print(safe_count)
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(
|
|
prog='AdventOfCode 2024, Day 02, part 2',
|
|
)
|
|
parser.add_argument('-f', '--file', required=True)
|
|
args = parser.parse_args()
|
|
main(args) |