Compare commits
No commits in common. "f9b2cbf69a74172d266de6dfff6df9fdaa564c1f" and "38013bf70539e11d8d91a6691f4d14b69d23b05b" have entirely different histories.
f9b2cbf69a
...
38013bf705
3 changed files with 16 additions and 120 deletions
|
@ -106,18 +106,22 @@ def find_xmas(data: np.array):
|
||||||
for i in range(data.shape[0]):
|
for i in range(data.shape[0]):
|
||||||
for j in range(data.shape[1]):
|
for j in range(data.shape[1]):
|
||||||
if data[i, j] == "X":
|
if data[i, j] == "X":
|
||||||
score += sum(
|
if is_horizontal_forwards(data, i, j):
|
||||||
[
|
score += 1
|
||||||
is_horizontal_forwards(data, i, j),
|
if is_horizontal_backwards(data, i, j):
|
||||||
is_horizontal_backwards(data, i, j),
|
score += 1
|
||||||
is_vertical_downwards(data, i, j),
|
if is_vertical_downwards(data, i, j):
|
||||||
is_vertical_upwards(data, i, j),
|
score += 1
|
||||||
is_diagonal_forwards_downwards(data, i, j),
|
if is_vertical_upwards(data, i, j):
|
||||||
is_diagonal_forwards_upwards(data, i, j),
|
score += 1
|
||||||
is_diagonal_backwards_downwards(data, i, j),
|
if is_diagonal_forwards_downwards(data, i, j):
|
||||||
is_diagonal_backwards_upwards(data, i, j),
|
score += 1
|
||||||
]
|
if is_diagonal_forwards_upwards(data, i, j):
|
||||||
)
|
score += 1
|
||||||
|
if is_diagonal_backwards_downwards(data, i, j):
|
||||||
|
score += 1
|
||||||
|
if is_diagonal_backwards_upwards(data, i, j):
|
||||||
|
score += 1
|
||||||
|
|
||||||
return score
|
return score
|
||||||
|
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal_forwards_downwards(data, i, j):
|
|
||||||
if data[i - 1, j - 1] == "M":
|
|
||||||
if data[i + 1, j + 1] == "S":
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal_forwards_upwards(data, i, j):
|
|
||||||
if data[i + 1, j - 1] == "M":
|
|
||||||
if data[i - 1, j + 1] == "S":
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal_backwards_upwards(data, i, j):
|
|
||||||
if data[i + 1, j + 1] == "M":
|
|
||||||
if data[i - 1, j - 1] == "S":
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal_backwards_downwards(data, i, j):
|
|
||||||
if data[i - 1, j + 1] == "M":
|
|
||||||
if data[i + 1, j - 1] == "S":
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal1(data, i, j):
|
|
||||||
return is_diagonal_forwards_downwards(data, i, j) or is_diagonal_backwards_upwards(
|
|
||||||
data, i, j
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def is_diagonal2(data, i, j):
|
|
||||||
return is_diagonal_backwards_downwards(data, i, j) or is_diagonal_forwards_upwards(
|
|
||||||
data, i, j
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def find_x_mas(data: np.array):
|
|
||||||
score = 0
|
|
||||||
for i in range(1, data.shape[0] - 1):
|
|
||||||
for j in range(1, data.shape[1] - 1):
|
|
||||||
if data[i, j] == "A":
|
|
||||||
if is_diagonal1(data, i, j) and is_diagonal2(data, i, j):
|
|
||||||
score += 1
|
|
||||||
|
|
||||||
return score
|
|
||||||
|
|
||||||
|
|
||||||
def main(file: Path) -> int:
|
|
||||||
data_str = file.read_text()
|
|
||||||
x_axis_size = data_str.find("\n")
|
|
||||||
y_axis_size = data_str.count("\n") + 1
|
|
||||||
data = np.full((x_axis_size, y_axis_size), "")
|
|
||||||
i, j = 0, 0
|
|
||||||
for character in data_str:
|
|
||||||
if character != "\n":
|
|
||||||
data[i, j] = character
|
|
||||||
j += 1
|
|
||||||
else:
|
|
||||||
i += 1
|
|
||||||
j = 0
|
|
||||||
return find_x_mas(data)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
input_file = Path(__file__).parent / "input-data"
|
|
||||||
print(main(input_file))
|
|
|
@ -1,33 +0,0 @@
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from aoc_2024.day4 import part2
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
def test_find_all():
|
|
||||||
data_str = """MMMSXXMASM
|
|
||||||
MSAMXMSMSA
|
|
||||||
AMXSXMAAMM
|
|
||||||
MSAMASMSMX
|
|
||||||
XMASAMXAMM
|
|
||||||
XXAMMXXAMA
|
|
||||||
SMSMSASXSS
|
|
||||||
SAXAMASAAA
|
|
||||||
MAMMMXMMMM
|
|
||||||
MXMXAXMASX"""
|
|
||||||
data = np.full((10, 10), "")
|
|
||||||
i, j = 0, 0
|
|
||||||
for character in data_str:
|
|
||||||
if character != "\n":
|
|
||||||
data[i, j] = character
|
|
||||||
j += 1
|
|
||||||
else:
|
|
||||||
i += 1
|
|
||||||
j = 0
|
|
||||||
assert part2.find_x_mas(data) == 9
|
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
|
||||||
data_file = Path(__file__).parent / "test-data"
|
|
||||||
assert part2.main(data_file) == 9
|
|
Loading…
Add table
Add a link
Reference in a new issue