-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday4.py
78 lines (51 loc) · 1.78 KB
/
day4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from HelperFunctions import readInputFile
from HelperFunctions import readExampleInput
from HelperFunctions import convertToInt
directions = {'UP':(0,-1), 'DOWN':(0,1), 'LEFT':(-1,0), 'RIGHT':(1,0), 'UPLEFT':(-1,-1), 'UPRIGHT':(1,-1), 'DOWNLEFT':(-1,1), 'DOWNRIGHT':(1,1)}
word = ['X','M','A','S']
def prepareBoard(board):
newBoard = []
newBoard.append(['.' for x in range(len(board[0])+2)])
for line in board:
newLine = ['.'] + [x for x in line] + ['.']
newBoard.append(newLine)
newBoard.append(['.' for x in range(len(board[0])+2)])
return newBoard
def findWordInDirections(posX,posY,board):
words = 0
for direction in directions.values():
currentPos = (posX,posY)
for wordPos in range(1,5):
if wordPos == 4:
words = words + 1
break
currentPos = (currentPos[0] + direction[0], currentPos[1] + direction[1])
if not(board[currentPos[1]][currentPos[0]] == word[wordPos]):
break
return words
def isXMAS(posX,posY,board):
if (board[posY-1][posX-1] == 'M' and board[posY+1][posX+1] == 'S') or (board[posY-1][posX-1] == 'S' and board[posY+1][posX+1] == 'M'):
if (board[posY+1][posX-1] == 'M' and board[posY-1][posX+1] == 'S') or (board[posY+1][posX-1] == 'S' and board[posY-1][posX+1] == 'M'):
return 1
return 0
def do1(board):
words = 0
for posY,line in enumerate(board):
for posX,value in enumerate(line):
if value == 'X':
words = words + findWordInDirections(posX,posY,board)
return words
def do2(board):
occurrences = 0
for posY,line in enumerate(board):
for posX,value in enumerate(line):
if value == 'A':
occurrences = occurrences + isXMAS(posX,posY,board)
return occurrences
def do():
strInput = readInputFile(4)
board = prepareBoard(strInput.split('\n'))
print(do1(board))
print(do2(board))
print('done')
do()