rename stuff
This commit is contained in:
1 parent
7c3d439f6e
commit
97ddc36b62
325 files changed
+85
No files matched your search
@@ -0,0 +1,141 @@
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
|
||||
def test(array, x, y):
|
||||
test = []
|
||||
if not x-1 < 0:
|
||||
try:
|
||||
test.append(array[x-1][y])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x - 1][y + 1])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x - 1][y - 1])
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
try:
|
||||
test.append(array[x][y-1])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x + 1][y - 1])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x + 1][y])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x][y + 1])
|
||||
except IndexError:
|
||||
pass
|
||||
try:
|
||||
test.append(array[x + 1][y + 1])
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
return test
|
||||
|
||||
|
||||
def occupy_seats(array):
|
||||
second = deepcopy(array)
|
||||
changes = 0
|
||||
for x in range(0, len(array)):
|
||||
for y in range(0, len(array[x])):
|
||||
tests = test(array, x, y)
|
||||
d = tests.count('#')
|
||||
|
||||
if array[x][y] == 'L' and d == 0:
|
||||
second[x][y] = '#'
|
||||
changes += 1
|
||||
|
||||
if array[x][y] == "#" and d > 3:
|
||||
second[x][y] = 'L'
|
||||
changes += 1
|
||||
|
||||
return changes, second
|
||||
|
||||
|
||||
def oob(space, y, x):
|
||||
if y < 0: return True
|
||||
if y >= len(space): return True
|
||||
if x < 0: return True
|
||||
if x >= len(space[y]): return True
|
||||
return False
|
||||
|
||||
|
||||
def visible_seats(space, y, x):
|
||||
dirs = [(y, x) for x in [0, 1, -1] for y in [0, 1, -1]]
|
||||
neighbors = []
|
||||
for a, b in dirs:
|
||||
if a == 0 and b == 0: continue
|
||||
step = 1
|
||||
|
||||
def pos():
|
||||
return (step * a + y, step * b + x)
|
||||
|
||||
while (not oob(space, *pos())):
|
||||
loc = space[pos()[0]][pos()[1]]
|
||||
if loc == "L" or loc == "#":
|
||||
neighbors.append(loc)
|
||||
break
|
||||
step += 1
|
||||
return neighbors
|
||||
|
||||
|
||||
def occupy_seats2(array):
|
||||
second = deepcopy(array)
|
||||
changes = 0
|
||||
for x in range(0, len(array)):
|
||||
for y in range(0, len(array[x])):
|
||||
d = visible_seats(array, x, y).count('#')
|
||||
|
||||
if array[x][y] == 'L' and d == 0:
|
||||
second[x][y] = '#'
|
||||
changes += 1
|
||||
|
||||
if array[x][y] == "#" and d > 4:
|
||||
second[x][y] = 'L'
|
||||
changes += 1
|
||||
|
||||
return changes, second
|
||||
|
||||
|
||||
with open(r"C:\Users\Maya\Desktop\Uni\WS_2021\AoC\input11") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for i in range(0, len(lines)):
|
||||
lines[i] = list(lines[i])
|
||||
|
||||
lines2 = deepcopy(lines)
|
||||
|
||||
while True:
|
||||
c, lines = occupy_seats(lines)
|
||||
if c == 0:
|
||||
break
|
||||
|
||||
count = 0
|
||||
|
||||
for line in lines:
|
||||
count += line.count('#')
|
||||
|
||||
print(count)
|
||||
|
||||
while True:
|
||||
c, lines2 = occupy_seats2(lines2)
|
||||
print(c)
|
||||
if c == 0:
|
||||
break
|
||||
|
||||
count2 = 0
|
||||
|
||||
for line in lines2:
|
||||
count2 += line.count('#')
|
||||
|
||||
print(count2)
|
||||
|
||||
Reference in new issue
Block a user