File size: 1,428 Bytes
a4da721
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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))