Added 2020 (python)

This commit is contained in:
Karma Riuk
2023-08-02 11:39:56 +02:00
commit 410815acf8
93 changed files with 11719 additions and 0 deletions

Binary file not shown.

91
2020/11/input Normal file
View File

@ -0,0 +1,91 @@
LLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLL..LLLLLLL..LLLLLL.LLLLLLLL.L.LLLLLLLLLLL
LLLLL.LL.LLLLLLL.LLLLL.LLLLL.LLLLLLL..LLLLLLLLLLLLLLLL.LLLLLLLLLL.LL.L.LLLLL.LLL.LLLL..LLLLLLLLLLL.
LLLLLLLL.LLLLLLLLL.LLL.LLLL..LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LL.LLLL.LLLLL.L.LLL.LLLLLLLLLLL.LLLL.L
L.LLLLL..LLLLLLL..LLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLL
LLLLLLLLLLLLLLL...LLLLLLLLL..L.LLLLLLLLLLLLLLLL.LLL.LL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL..LLLLL
LL.LLLLL.LLLLLLL.LLLLL.LLLLL.LLLLLLLLLL.LLLL.LL.LLLLLL.LLL.LLL.LLL.LLLLL.LLL.LLLLLLLL..L.LLLLLLLL.L
LLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLL.LL.LLLLLLL.LLLLLLLL..LLLLLLLLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLL.LL.LLLLL.LLLLLLLLL.LLLLLL.LLL.L.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLL.
.L.LL..L.L...L.LL....L...LL......LL..L.L...L.L.LLLLLL..L...LLL..LL..L..............L.L..L.......LL.
LLLLLLLL..LLLLLL.LLL.L.L.LLL.LLL.L.LLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLL
LLLLLLLL.LLL.LLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL..LLLLL.LLLLL.L.LLLLLL.LLLLLLLLL.LLLLLL..LLLLL
LLLLLLLL.LLL.LLL.L.LLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
.LLLLLLL.LLLLLLL.LLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
LLL.LLLL.LLLLLLL.LLLLLLLLLLL.LLLLLL.L.LLLLLLLLL..LLLLL.LLLLL.LLLL.LL..LL.LLL.LLLLLLLLLLLLLLLLLL.LL.
........LL...L..L....L.LLLLL..L..LL........L.L.L.LL.L.LL..L.LLL.L....LL........L..LLLL.LLL....L....
LLLLLLLL.LLLLLLL.LLLLLLLLLLL.LL.LLLLL.LLLLLLLLL.LLLLLLLLLLLL.LLLLL.L.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
LLLLLLLL.LL.LLLLLLLLLLLLLLLL.LLLLLLLL.L.LLL.LLL.LLLLLLLLLLLL.LLLLLLL.LLLLL.L.LLLLLLLL.LLLLLL.LLLLLL
L.LLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL..LLLLLL.L.LLL.LL.LLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLL
LLLLLLLLL..L.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL..LLLLLLLL.LLLLLL.LLLLL.
LLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLL..LLLLLLL.L.LLLLLLLLLLLL.LLLLLL..LLLLLLLL.LLLLLLL.LLLLLL.LLLLLL
LLLLLLLL.L.L.LLL.LLLLL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL
.........L.LL...LLL.....LL..LL.....L.L.L.......L..L......LLLL.L...L.L...L.....LL.........L.LL.L..LL
L.LLLLLL.LLLLLLL..LLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLL..LLLLLL.LLLLLLLL.LLLL.LLLLLLLL
LLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLL.LLLLL.LLL.LLLL.L.LLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLL
LLLLLLLL.LLLLLLL..LLLL.LLLLLLLLLLL.LL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLL..LLLLLLLL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLL..LLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.L.LLLLL.LLLL.LLLLLLL.L.LLLLL..LLLLLLL.LLLL.L...LLLL
L.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLL.LLLLLLL.L.LLLLLLLLLL.LLLLLLL..L.LLLL.LLLLLLL.LLLLLLL.LLLLLL
LLLLL.LL.LLLLLLL..L.LL.LLLLL.LL.LLLLL.LLL.LLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLL.LLLLLL
LL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLL..LLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLL
..L.......L...........LL...L.L....L.........LL.L.LLL.L.........L..LL....L.L....LL.L......LL....L.L.
LLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLL.LL.LLLL.L.LL..LLLLLL.LL.LLLLLL.LLLLLL..LLLLLL.L.LLLLLL.LLLLLL
LL.LL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.L.LLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLL.LLLLLL
LLLLLLLL.L.LLLLL.LLLLL.LLLLLLLLLL.LLL..LLLL.LLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLL.LLLLLLLL.LLLLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLL.LLLL.LLLLLL
LL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLLL..LLLLLLL.LLLLLLLL.LLLLLLLLLL.LL
L........L.L.L...LL.LLL...L........LL..L...L..LL..LL.L.L....L..L..L.L....L.L.....LLL.L.LL...L...L.L
LLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL..LL.LLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLL.L.LLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLL.LLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLL.LLL.LLL.LLLLL..LLLLLLLLLLLLL.L
LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.L.LLLLL.LLLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL..LLLLLLL.LLLLLLLL.LLLL
LLLLLLLLLLLL..LL.LLLLLLLL.LL.LLLLLLLL..LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLLLLL.LLLLLLLL.LLLLLL.LLLLLL
.L..L......L.L.LL..L...LL.L...L....L.L.....LLLL...L.L...LL.....L......L..L.L.L.....L.L......L....LL
LLLLLLLLLLLLLLLLL.LLLL.LLL.L.LLLLLLLL..LL.LLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLLLL.LLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
.LLLLLLL.L.LLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLL.L.LLLLLLLLLLLLL
LLLLLLLLLLL.LLLLLLLLLL.LLLLL.LLLLLLLL..LLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
LLLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLL.LL.LLLLLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLLLLLL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLL
LLLLLLLLLLLLL.LL.LLLLLLLLLLL.LLLLL.LL.LLLLL.LLL.LLLLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.
LLLL.LLL.LLLLLLL.LLLLL.LLL.LLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLL..LLLLLLLL..LLLLLLLLLLLL
LLLLLLLL.LLLL.LL.LLLLL.LLLLLLLLLLLLLL.LLLLLLLLL..LLLLL.L.LLL.LLLLLLL.LLLLLL.LLLLLLLLLL.LLLLL.LLLLLL
.....LL.L..L..L..LL.............LL...L..L.LLLLL.L.L...L.....L...L.....L....LL.L..L.....LLL.........
LLLLLLLLLLLL.LLL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LL.LL.LL.LLLL.L.LLLLLL
LLLLLLLLLL.LLL.L.LLLLLLLLLLL.LLLLLLLL.LLL..LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLL.LLLLLLLL.LLLL
LLL.LLLL.LLL.LLL.LLLLL.LLLL..LLLLL.LL.LL.LLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL.LLLLLL..L.LLLLLLL.L.LLLLLL.L.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL
LLLL.LLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLL.LLLLL.L.LLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.L.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL.L.LL.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLL.LL
LLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LL.LLLLL.LLLLLLLLLLLLL
LLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLL.LLLLLL
..LL..LL..LL......L....L....L....L....L..L...........L.L...L.L.L...LL.L..L..........LLLL.L..L.L....
LLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLL.L..LLL.LLL.LLLLLLLL..LLLLL.LLLLLL
LLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLL..LLLLLL..LLLLL
LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLL.LL.LLLLLL.LLL.LL.LLLLLL.LLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLL.L
LLLL.LLL.LLLLLLL.LLLLLL.LLL..L.LLLLLL.LL.LLLLLLLLL.LLLLLLLLL.L.LLLLLLLL.LLLL.LL.L.LLL.LLLLLL.LLLLLL
LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
L..LLL.L....L...LL..LLLLL..L...LL.L..L.L...............L.LL.L.....LLL.LL...L..L.LL..L..L...L.......
LLLLLLLL.LL.LLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLL.LLL
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.L.L.LLLLLLL.LLLL....LLLLL
LLLLLLLLLLLLLLLL.LLLLL.L.LLLLL.LLLLL..LLLLLLLLL..LL.LL.LLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLLLL..LLLL.L
LLLLLLLL.LLLLLLL.LLLL..LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLLL
L.......L....L....L.LL..L.LL...L.L.LL........L......L.......LL.L.L...L...L...LL.L.L.L..............
LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLL..LLLL.LL.LLLLLLL.L.LLLL.L.L.LLLL.LLLLLL
LLLLLLLLLL.LLLLL.LLLLL.L.LLL..LLLL.LLLL.LLLLL.LLLLLLLL.L.LLL.LLLLLLL.LLLLLLLLLLLL.LLL.LLLLLLLLLLLLL
LLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLL.L.LLLLLLLLL.LLLLLL.L.LLLLLLLLLLL.LLLLLLL..LLLLLLL.LLLLLLLLLLLLL
LLLLLLLL.L.LLLL..LLLLL.LLLLL.LLLLLLLLLLLLLLLLL..LLLLLL.LLLLL.LL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
LLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLL.LLLL.L..LLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLL.LLLL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLL.L.LLLLLLLLLL.L.L..LLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLL..LLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL
..LL.....L....L...L.LL........LL.L........L....L....L.L....LLL.L....LLLLLL.L.L.L..LLL.L.L.L..LL..LL
LLLL.LLL.LLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLL..LLLLLLLL.LLLLLL.LL.L.LLLL.LLLLL.LLL.LLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLL.
LLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLL..LLLLLL.LLLLLLL.LLLLL.LL.LLLLLL.LLLLLL
LLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLL.LL.L.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL
LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLL.LLLLL.LLLLLL.LLLLLL
LLL.LLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLL.LLLLLL.LLLLLL

118
2020/11/prog.py Normal file
View File

@ -0,0 +1,118 @@
def get_input(sample = False, sample_name = "sample"):
with open(sample_name if sample else "input", "r") as f:
return [list(l.strip()) for l in f.readlines()]
def is_there_occupied(range_x, range_y, seats):
try:
for x, y in zip(range_x, range_y):
# print(f"\tChecking: {x}, {y}")
if seats[y][x] == "#":
# print(f"\tFound an # at {x}, {y}")
return True
elif seats[y][x] == "L":
return False
return False
except IndexError:
return False
def count_occupied_direction(center_x, center_y, seats):
count = 0
len_x = len(seats[0])
len_y = len(seats)
directions = [
( # N
[center_x] * center_y,
range(center_y - 1, -1, -1)
),
( # NE
range(center_x + 1, len_x),
range(center_y - 1, -1, -1)
),
( # E
range(center_x + 1, len_x),
[center_y] * (len_x - center_x)
),
( # SE
range(center_x + 1, len_x),
range(center_y + 1, len_y)
),
( # S
[center_x] * (len_y - center_y),
range(center_y + 1, len_y)
),
( # SW
range(center_x - 1, -1, -1),
range(center_y + 1, len_y)
),
( # W
range(center_x - 1, -1, -1),
[center_y] * center_x
),
( # NW
range(center_x - 1, -1, -1),
range(center_y - 1, -1, -1),
)
]
for range_x, range_y in directions:
if is_there_occupied(range_x, range_y, seats):
count += 1
return count
def count_occupied_around(center_x, center_y, seats):
count = 0
len_x = len(seats[0])
len_y = len(seats)
for y in range(center_y-1, center_y+2):
for x in range(center_x-1, center_x+2):
if x in range(len_x) and y in range(len_y) and (x, y) != (center_x, center_y):
if seats[y][x] == "#" : count += 1
return count
def get_dummy_seats(len_x, len_y):
ret = []
for y in range(len_y):
line = ""
for x in range(len_x):
line += "."
ret.append(line)
return ret
def get_result(seats: list, part = 1):
len_x = len(seats[0])
len_y = len(seats)
prev_seats = get_dummy_seats(len_x, len_y)
while prev_seats != seats:
new_seats = [[item for item in line] for line in seats]
for y in range(len_y):
for x in range(len_x):
place = seats[y][x]
if place == ".": continue
count = count_occupied_around(x, y, seats) if part == 1 else count_occupied_direction(x, y, seats)
if place == "L" and count == 0:
new_seats[y][x] = "#"
elif place == "#" and count >= (4 if part == 1 else 5):
new_seats[y][x] = "L"
prev_seats = seats
seats = new_seats
count = 0
for line in seats:
for char in line:
if char == "#": count += 1
return count
if __name__ == "__main__":
print(get_result(get_input(), part = 2))

10
2020/11/sample Normal file
View File

@ -0,0 +1,10 @@
L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL

View File

@ -0,0 +1,7 @@
.##.##.
#.#.#.#
##...##
...L...
##...##
#.#.#.#
.##.##.

16
2020/11/test.py Normal file
View File

@ -0,0 +1,16 @@
from prog import *
inp = get_input(sample = True)
result_1 = get_result(inp)
expected_1 = 37
print(f"{result_1 = } {result_1 == expected_1}")
print()
inp_no_occupied = get_input(sample = True, sample_name = "sample_no_occupied")
print(count_occupied_direction(3, 3, inp_no_occupied))
result_2 = get_result(inp, part = 2)
expected_2 = 26
print(f"{result_2 = } {result_2 == expected_2}")