This commit is contained in:
Aéna Aria 2025-12-12 10:52:08 +01:00
parent e086476976
commit 346b97df52
3 changed files with 1118 additions and 0 deletions

64
day12/1.py Normal file
View file

@ -0,0 +1,64 @@
import numpy as np
with open(r'day12/input.txt', 'r') as input:
lines = input.read().split('\n')[:-1]
def array_in(arr,lst):
for oth in lst:
if np.array_equal(arr,oth): return True
return False
def is_compat(grid,tile,x,y):
return (not 2 in (grid[x-1:x+2,y-1:y+2]+tile))
def add(grid,tile,x,y):
grid[x-1:x+2,y-1:y+2]+=tile
def find_solution(grid,reqs,x0 = 1,y0 = 1):
dim = np.shape(grid)
if reqs == []:
return True
for tile in tiles[reqs[0]]:
for x in range(x0, dim[0]-1):
for y in range(y0 if x == x0 else 1, dim[1]-1):
if is_compat(grid,tile,x,y):
add(grid,tile,x,y)
if find_solution(grid, reqs[1:]): return True
add(grid,-tile,x,y)
return False
tiles = []
areas = []
i = -1
for line in lines:
if 'x' in line:
dim,reqs = line.split(':')
dim = list(map(int,dim.split('x')))
reqs = list(map(int,reqs.strip().split(' ')))
areas.append((dim,reqs))
elif ':' in line:
i+=1
tiles.append([])
elif line != '':
tiles[i].append(list(map(lambda x: 1 if x=='#' else 0,list(line))))
for i,tile in enumerate(tiles.copy()):
base = np.array(tile)
flips_n_rots = [base]
for rot in [base,np.rot90(base),np.rot90(np.rot90(base)),np.rot90(np.rot90(np.rot90(base)))]:
for flip in [rot,np.flipud(rot)]:
if not array_in(flip, flips_n_rots) : flips_n_rots.append(flip)
tiles[i] = flips_n_rots
for dim,reqs in areas:
area = np.zeros(dim)
reqs_list = []
for i in range(len(reqs)):
for _ in range(reqs[i]):
reqs_list.append(i)
print(dim,reqs_list)
print(find_solution(area,reqs_list))

24
day12/1bad.py Normal file
View file

@ -0,0 +1,24 @@
import numpy as np
with open(r'day12/input.txt', 'r') as input:
lines = input.read().split('\n')[:-1]
tiles = []
areas = []
i = -1
for line in lines:
if 'x' in line:
dim,reqs = line.split(':')
dim = list(map(int,dim.split('x')))
reqs = list(map(int,reqs.strip().split(' ')))
areas.append((dim,reqs))
elif ':' in line:
i+=1
tiles.append([])
elif line != '':
tiles[i].append(list(map(lambda x: 1 if x=='#' else 0,list(line))))
count = 0
for dim,reqs in areas:
count += 1 if dim[0]*dim[1] >= sum(reqs)*9 else 0
print(count)

1030
day12/input.txt Normal file

File diff suppressed because it is too large Load diff