Spaces:
Running
Running
def is_safe_sequence(nums): | |
if len(nums) <= 1: | |
return True | |
# Check first difference to determine if we're expecting increasing or decreasing | |
diff = nums[1] - nums[0] | |
increasing = diff > 0 | |
for i in range(len(nums)-1): | |
curr_diff = nums[i+1] - nums[i] | |
# Check if difference is between 1 and 3 | |
if abs(curr_diff) < 1 or abs(curr_diff) > 3: | |
return False | |
# Check if direction matches | |
if increasing and curr_diff <= 0: | |
return False | |
if not increasing and curr_diff >= 0: | |
return False | |
return True | |
def can_be_safe_with_removal(nums): | |
if is_safe_sequence(nums): | |
return True | |
# Try removing each number | |
for i in range(len(nums)): | |
new_nums = nums[:i] + nums[i+1:] | |
if is_safe_sequence(new_nums): | |
return True | |
return False | |
# Read input | |
with open("input.txt", "r") as f: | |
lines = f.readlines() | |
# Parse numbers | |
sequences = [] | |
for line in lines: | |
nums = [int(x) for x in line.strip().split()] | |
sequences.append(nums) | |
# Part 1: Count safe sequences | |
safe_count = sum(1 for seq in sequences if is_safe_sequence(seq)) | |
print(str(safe_count)) | |
# Part 2: Count sequences that can be made safe with one removal | |
safe_with_removal_count = sum(1 for seq in sequences if can_be_safe_with_removal(seq)) | |
print(str(safe_with_removal_count)) |