Day04
This commit is contained in:
parent
262c8c0814
commit
b34bf33f67
1 changed files with 80 additions and 0 deletions
80
day04.py
Normal file
80
day04.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# N
|
||||
# NW NO
|
||||
# W X O
|
||||
# SW SO
|
||||
# S
|
||||
|
||||
# 1
|
||||
x = list("XMAS")
|
||||
|
||||
h = list()
|
||||
with open('day04') as f:
|
||||
for l in f:
|
||||
h.append([*l.strip()])
|
||||
|
||||
def idx(i,j,k):
|
||||
global h,x
|
||||
if i<0 or j<0 or i>=len(h) or j>=len(h[0]):
|
||||
return False
|
||||
if h[i][j] != x[k]:
|
||||
return False
|
||||
return True
|
||||
|
||||
def fmas(i,j):
|
||||
n=o=s=w=1
|
||||
no=so=sw=nw=1
|
||||
|
||||
for k in range(4):
|
||||
if not idx(i,j+k, k): o = 0
|
||||
if not idx(i,j-k, k): w = 0
|
||||
if not idx(i+k,j,k): s = 0
|
||||
if not idx(i-k,j,k): n = 0
|
||||
|
||||
if not idx(i-k,j+k,k): no = 0
|
||||
if not idx(i+k,j-k,k): sw = 0
|
||||
if not idx(i-k,j-k,k): nw = 0
|
||||
if not idx(i+k,j+k,k): so = 0
|
||||
|
||||
return n+o+s+w+no+so+sw+nw
|
||||
|
||||
res = 0
|
||||
for i in range(len(h)):
|
||||
for j in range(len(h[0])):
|
||||
if h[i][j] == 'X':
|
||||
res += fmas(i,j)
|
||||
|
||||
# 2
|
||||
def idx2(i,j):
|
||||
global h,x
|
||||
if i<0 or j<0 or i>=len(h) or j>=len(h[0]):
|
||||
return False
|
||||
if h[i][j] == 'S':
|
||||
return 'S'
|
||||
if h[i][j] == 'M':
|
||||
return 'M'
|
||||
return False
|
||||
|
||||
def fmas2(i,j):
|
||||
no = idx2(i-1,j+1)
|
||||
sw = idx2(i+1,j-1)
|
||||
nw = idx2(i-1,j-1)
|
||||
so = idx2(i+1,j+1)
|
||||
|
||||
if not no: return 0
|
||||
if not sw: return 0
|
||||
if not nw: return 0
|
||||
if not so: return 0
|
||||
|
||||
if sw == no: return 0
|
||||
if nw == so: return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
res2 = 0
|
||||
for i in range(len(h)):
|
||||
for j in range(len(h[0])):
|
||||
if h[i][j] == 'A':
|
||||
res2 += fmas2(i,j)
|
Loading…
Reference in a new issue