day 2 done
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
with open(r'2024/02\input.txt', 'r') as file:
|
||||||
|
input = file.read()
|
||||||
|
|
||||||
|
test_input = '''7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9'''
|
||||||
|
|
||||||
|
# for each line we want to compare the current number to the next number
|
||||||
|
# if the number is between 1 and 3 difference it is valid
|
||||||
|
# we also need to know and store if it is ascending or descending
|
||||||
|
# because all numbers need to be ascending or descending and not mixed
|
||||||
|
# this will mean the line is valid
|
||||||
|
|
||||||
|
valid_list_count = 0
|
||||||
|
|
||||||
|
for line in input.split('\n'):
|
||||||
|
safe = False
|
||||||
|
line = line.split()
|
||||||
|
list_line = [int(i) for i in line]
|
||||||
|
|
||||||
|
# check all numbers in the line are ascending or descending
|
||||||
|
if list_line == sorted(list_line) or list_line == sorted(list_line, reverse=True):
|
||||||
|
#print(list_line, 'ascending or descending')
|
||||||
|
safe = True
|
||||||
|
print(list_line, 'steady')
|
||||||
|
else:
|
||||||
|
safe = False
|
||||||
|
print(list_line, 'unsteady')
|
||||||
|
continue
|
||||||
|
|
||||||
|
for i, num in enumerate(list_line):
|
||||||
|
if i == 0:
|
||||||
|
continue
|
||||||
|
check = abs(num - list_line[i-1])
|
||||||
|
if check >= 4 or check == 0:
|
||||||
|
#print(check)
|
||||||
|
safe = False
|
||||||
|
else:
|
||||||
|
#print(check)
|
||||||
|
safe = True
|
||||||
|
if not safe:
|
||||||
|
print(list_line, 'unsafe, big jumps')
|
||||||
|
break
|
||||||
|
|
||||||
|
if safe:
|
||||||
|
print(list_line, 'safe')
|
||||||
|
valid_list_count += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print(valid_list_count)
|
||||||
|
|
||||||
|
#print(valid_list_count)
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
testing = 0
|
||||||
|
|
||||||
|
if testing == 0:
|
||||||
|
with open(r'2024/02\input.txt', 'r') as file:
|
||||||
|
input = file.read()
|
||||||
|
else:
|
||||||
|
input = '''7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9'''
|
||||||
|
|
||||||
|
# for each line we want to compare the current number to the next number
|
||||||
|
# if the number is between 1 and 3 difference it is valid
|
||||||
|
# we also need to know and store if it is ascending or descending
|
||||||
|
# because all numbers need to be ascending or descending and not mixed
|
||||||
|
# this will mean the line is valid
|
||||||
|
|
||||||
|
valid_list_count = 0
|
||||||
|
retest_list = []
|
||||||
|
|
||||||
|
|
||||||
|
def test_line(line):
|
||||||
|
safe = False
|
||||||
|
|
||||||
|
# check all numbers in the line are ascending or descending
|
||||||
|
if line == sorted(line) or line == sorted(line, reverse=True):
|
||||||
|
#print(line, 'ascending or descending')
|
||||||
|
safe = True
|
||||||
|
print(line, 'steady')
|
||||||
|
else:
|
||||||
|
safe = False
|
||||||
|
print(line, 'unsteady')
|
||||||
|
#retest_list.append(line)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
for i, num in enumerate(line):
|
||||||
|
if i == 0:
|
||||||
|
continue
|
||||||
|
check = abs(num - line[i-1])
|
||||||
|
if check >= 4 or check == 0:
|
||||||
|
#print(check)
|
||||||
|
safe = False
|
||||||
|
else:
|
||||||
|
#print(check)
|
||||||
|
safe = True
|
||||||
|
if not safe:
|
||||||
|
print(line, 'unsafe, big jumps')
|
||||||
|
#retest_list.append(line)
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
reports = []
|
||||||
|
# convert the input to a list of lists
|
||||||
|
for line in input.split('\n'):
|
||||||
|
data = line.split()
|
||||||
|
reads = [int(i) for i in data]
|
||||||
|
reports.append(reads)
|
||||||
|
|
||||||
|
#print(reports)
|
||||||
|
|
||||||
|
for report in reports:
|
||||||
|
safe = test_line(report)
|
||||||
|
if safe:
|
||||||
|
print(report, 'safe')
|
||||||
|
valid_list_count += 1
|
||||||
|
else:
|
||||||
|
#add the list to the retest list
|
||||||
|
retest_list.append(report)
|
||||||
|
|
||||||
|
print(retest_list)
|
||||||
|
|
||||||
|
# # we need to iterate over the retest list
|
||||||
|
# but this time removing one number and doing the test again,
|
||||||
|
# if it is safe we can add it to our safe count and move on
|
||||||
|
# if it is unsafe, we need to add back in our removed number and remove the next number
|
||||||
|
for list in retest_list:
|
||||||
|
for i, num in enumerate(list):
|
||||||
|
# remove the number
|
||||||
|
test_list = list.copy()
|
||||||
|
test_list.pop(i)
|
||||||
|
safe = test_line(test_list)
|
||||||
|
if safe:
|
||||||
|
print(test_list, 'safe')
|
||||||
|
valid_list_count += 1
|
||||||
|
break
|
||||||
|
|
||||||
|
print(valid_list_count)
|
||||||
Reference in New Issue
Block a user