43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
data = []
|
|
|
|
with open("input.txt") as file:
|
|
for line in file:
|
|
_line = line.rstrip()
|
|
data.append(int(_line))
|
|
|
|
|
|
def solve_p1(input_data) -> int:
|
|
_sorted_data = sorted(data)
|
|
sorted_data = [0] + _sorted_data + [_sorted_data[-1] + 3]
|
|
diff = {
|
|
1: 0,
|
|
2: 0,
|
|
3: 0
|
|
}
|
|
for i in range(1, len(sorted_data)):
|
|
diff[sorted_data[i] - sorted_data[i-1]] += 1
|
|
return diff[1] * diff[3]
|
|
|
|
# Warning
|
|
# this is correct algorithmically, but naive, so extremely slow for long lists
|
|
# Saving this because it's nevertheless interesting approach IMO
|
|
def naive_solve_p2(input_data) -> int:
|
|
_sorted_data = sorted(input_data)
|
|
sorted_data = [0] + _sorted_data + [_sorted_data[-1] + 3]
|
|
|
|
def rec_seek_remove(start_index, partial_data):
|
|
result = 1 # we start with 1 because we have the option to do nothing
|
|
|
|
for i in range(start_index, len(partial_data)-1):
|
|
diff = partial_data[i+1] - partial_data[i-1]
|
|
if diff <= 3: # can be deleted
|
|
new_list = partial_data[:i] + partial_data[i+1:]
|
|
result += rec_seek_remove(i, new_list)
|
|
|
|
return result
|
|
|
|
return rec_seek_remove(1, sorted_data)
|
|
|
|
|
|
print(solve_p1(data))
|