Files
aoc_2024/day4.py
Marguerite Miallier 02b83c4005 jour 4
2024-12-04 22:44:23 +01:00

183 lines
4.8 KiB
Python

with open('day4.txt') as f:
l = [line.rstrip().split() for line in f]
# l = [["MMMSXXMASM"],
# ["MSAMXMSMSA"],
# ["AMXSXMAAMM"],
# ["MSAMASMSMX"],
# ["XMASAMXAMM"],
# ["XXAMMXXAMA"],
# ["SMSMSASXSS"],
# ["SAXAMASAAA"],
# ["MAMMMXMMMM"],
# ["MXMXAXMASX"]]
print(l[1][0][1] + l[1][0][2])
def search_left(l,i,j): #horizontal backwards
word = ""
print(l[i][0][j])
for k in range(4):
word += l[i][0][j-k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_right(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i][0][j+k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_up(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i-k][0][j]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_down(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i+k][0][j]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_up_left(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i-k][0][j-k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_up_right(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i-k][0][j+k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_down_left(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i+k][0][j-k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_down_right(l,i,j): #horizontal forward
word = ""
for k in range(4):
word += l[i+k][0][j+k]
print("word", word)
if word == "XMAS" :
return True
else :
return False
def search_mas(l,i,k):
diag1 = l[i-1][0][j-1] + l[i][0][j] + l[i+1][0][j+1]
diag2 = l[i+1][0][j-1] + l[i][0][j] + l[i-1][0][j+1]
if diag1 == "MAS" or diag1 == "SAM":
if diag2 == "MAS" or diag2 == "SAM":
return True
else :
return False
if __name__=="__main__":
PART1 = False
cnt = 0
if PART1 :
for i in range(len(l)):
for j in range(len(l[i][0])):
if j - 3 >= 0:
xmas = search_left(l,i,j)
print("XMAS left",xmas)
if xmas:
cnt+=1
"not working left"
if j + 3 <= len(l[i][0])-1:
xmas = search_right(l,i,j)
print("XMAS right",xmas)
if xmas:
cnt+=1
"not working right"
if i - 3 >= 0 :
xmas = search_up(l,i,j)
print("XMAS up",xmas)
if xmas:
cnt+=1
"not working up"
if i + 3 <= len(l) - 1:
xmas = search_down(l,i,j)
print("XMAS down",xmas)
if xmas:
cnt+=1
"not working down"
if j - 3 >= 0 and i - 3 >= 0 :
xmas = search_up_left(l,i,j)
print("XMAS up left",xmas)
if xmas:
cnt+=1
"not working up left"
if j + 3 <= len(l[i][0])-1 and i - 3 >= 0:
xmas = search_up_right(l,i,j)
print("XMAS upright",xmas)
if xmas:
cnt+=1
"not working upright"
if j - 3 >= 0 and i + 3 <= len(l)-1:
xmas = search_down_left(l,i,j)
print("XMAS down left",xmas)
if xmas:
cnt+=1
"not working down left"
if j + 3 <= len(l[i][0])-1 and i + 3 <= len(l)-1:
xmas = search_down_right(l,i,j)
print("XMAS down right",xmas)
if xmas:
cnt+=1
"not working down right"
else:
cnt = 0
for i in range(len(l)):
for j in range(len(l[i][0])):
if l[i][0][j] == "A":
if j - 1 >= 0 and i + 1 <= len(l)-1 and j + 1 <= len(l[i][0])-1 and i - 1 >= 0:
xmas = search_mas(l,i,j)
print("x-mas", xmas)
if xmas :
cnt += 1
print(cnt)