2024(4): fixed the first puzzle!
This commit is contained in:
@ -31,7 +31,7 @@ def rotate(list_2d):
|
|||||||
substring += list_2d[x][y]
|
substring += list_2d[x][y]
|
||||||
x += 1
|
x += 1
|
||||||
y += 1
|
y += 1
|
||||||
diagonal_list.append(substring)
|
diagonal_list.append(substring)
|
||||||
|
|
||||||
# Reverse
|
# Reverse
|
||||||
diagonal_list = diagonal_list[::-1]
|
diagonal_list = diagonal_list[::-1]
|
||||||
@ -45,7 +45,39 @@ def rotate(list_2d):
|
|||||||
substring += list_2d[x][y]
|
substring += list_2d[x][y]
|
||||||
x += 1
|
x += 1
|
||||||
y += 1
|
y += 1
|
||||||
diagonal_list.append(substring)
|
diagonal_list.append(substring)
|
||||||
|
|
||||||
|
return diagonal_list
|
||||||
|
|
||||||
|
def rotate_neg(list_2d):
|
||||||
|
x_max, y_max = len(list_2d), len(list_2d[0])
|
||||||
|
diagonal_list = []
|
||||||
|
|
||||||
|
# Diagonals starting from (0,0), for the first row.
|
||||||
|
for i in range(x_max):
|
||||||
|
substring = ""
|
||||||
|
x = x_max - 1 - i
|
||||||
|
y = 0
|
||||||
|
while x >= 0 and y < y_max:
|
||||||
|
#print(x, x_max, y, y_max)
|
||||||
|
substring += list_2d[x][y]
|
||||||
|
x -= 1
|
||||||
|
y += 1
|
||||||
|
diagonal_list.append(substring)
|
||||||
|
|
||||||
|
# Reverse
|
||||||
|
diagonal_list = diagonal_list[::-1]
|
||||||
|
|
||||||
|
# Diagonals starting from (0,1), for the first column.
|
||||||
|
for j in range(1, y_max):
|
||||||
|
substring = ""
|
||||||
|
x = x_max - 1
|
||||||
|
y = j
|
||||||
|
while x >= 0 and y < len(list_2d[x]):
|
||||||
|
substring += list_2d[x][y]
|
||||||
|
x -= 1
|
||||||
|
y += 1
|
||||||
|
diagonal_list.append(substring)
|
||||||
|
|
||||||
return diagonal_list
|
return diagonal_list
|
||||||
|
|
||||||
@ -53,24 +85,26 @@ if __name__ == "__main__":
|
|||||||
result = 0
|
result = 0
|
||||||
|
|
||||||
with open("input", "r") as fp:
|
with open("input", "r") as fp:
|
||||||
# Skip last line as it is empty
|
# Skip last line as it is empty.
|
||||||
full_string = fp.read().split("\n")[:-1]
|
full_string = fp.read().split("\n")[:-1]
|
||||||
for line in full_string:
|
for line in full_string:
|
||||||
result += scan_line(line)
|
result += scan_line(line)
|
||||||
result += scan_line(line[::-1])
|
result += scan_line(line[::-1])
|
||||||
|
# Transpose for vertical hits.
|
||||||
for line in transpose(full_string):
|
for line in transpose(full_string):
|
||||||
result += scan_line(line)
|
result += scan_line(line)
|
||||||
result += scan_line(line[::-1])
|
result += scan_line(line[::-1])
|
||||||
|
|
||||||
|
# Rotate 45 degrees to one side for diagonals.
|
||||||
diagonal_list = rotate(full_string)
|
diagonal_list = rotate(full_string)
|
||||||
for line in diagonal_list:
|
for line in diagonal_list:
|
||||||
result += scan_line(line)
|
result += scan_line(line)
|
||||||
result += scan_line(line[::-1])
|
result += scan_line(line[::-1])
|
||||||
# TODO: Transposion after rotating is ill-defined.
|
diagonal_list = rotate_neg(full_string)
|
||||||
for line in rotate(transpose(full_string)):
|
# Rotate the other way round.
|
||||||
|
for line in diagonal_list:
|
||||||
result += scan_line(line)
|
result += scan_line(line)
|
||||||
result += scan_line(line[::-1])
|
result += scan_line(line[::-1])
|
||||||
|
|
||||||
#transposed_file =
|
|
||||||
print(f"The sum of all horizontal XMAS's equals {result}.")
|
print(f"The sum of all horizontal XMAS's equals {result}.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user