89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
#!/bin/python3
|
|
import sys,re
|
|
from pprint import pprint
|
|
sys.path.insert(0, '../../')
|
|
from fred import list2int,get_re,nprint,lprint
|
|
|
|
input_f = 'input'
|
|
|
|
part = 2
|
|
#########################################
|
|
# #
|
|
# Part 1 #
|
|
# #
|
|
#########################################
|
|
|
|
def checkInc(line:list):
|
|
safe = False
|
|
for i in range(0,len(line)-1):
|
|
if line[i] < line[i+1]:
|
|
safe = True
|
|
else:
|
|
return False
|
|
return safe
|
|
|
|
def checkDesc(line:list):
|
|
safe = False
|
|
for i in range(0,len(line)-1):
|
|
if line[i] > line[i+1]:
|
|
safe = True
|
|
else:
|
|
return False
|
|
return safe
|
|
|
|
def checkJump(line:list):
|
|
safe = False
|
|
for i in range(0,len(line)-1):
|
|
if abs(line[i] - line[i+1]) in [1,2,3]:
|
|
safe = True
|
|
else:
|
|
return False
|
|
return safe
|
|
|
|
|
|
if part == 1:
|
|
reports = []
|
|
count = 0
|
|
with open(input_f) as file:
|
|
for line in file:
|
|
reports.append(list2int(line.rstrip().split()))
|
|
|
|
for r in reports:
|
|
if (checkDesc(r) or checkInc(r)) and checkJump(r):
|
|
count += 1
|
|
print(count)
|
|
|
|
|
|
|
|
#########################################
|
|
# #
|
|
# Part 2 #
|
|
# #
|
|
#########################################
|
|
if part == 2:
|
|
reports = []
|
|
count = 0
|
|
j = 0
|
|
with open(input_f) as file:
|
|
for line in file:
|
|
reports.append(list2int(line.rstrip().split()))
|
|
|
|
for rdx,r in enumerate(reports):
|
|
if (checkDesc(r) or checkInc(r)) and checkJump(r):
|
|
count += 1
|
|
else:
|
|
secondSafe = False
|
|
while not secondSafe:
|
|
tmp = r[:j] + r[j + 1:]
|
|
if (checkDesc(tmp) or checkInc(tmp)) and checkJump(tmp):
|
|
count += 1
|
|
secondSafe = True
|
|
|
|
if not secondSafe and j > len(tmp)-1:
|
|
break
|
|
j += 1
|
|
j = 0
|
|
secondSafe = False
|
|
|
|
print(count)
|