Posté par steph1978 .
En réponse au message Advent of Code, jour 14.
Évalué à 2.
Dernière modification le 16 décembre 2023 à 02:22.
importsysI=sys.stdin.read().splitlines()G=[list(l)forlinI]R=len(G)C=len(G[0])defrotate(G,F):forrinrange(R):forcinrange(C):F[c][R-1-r]=G[r][c]deftilt(G):forxinrange(C):foryinrange(R):ifG[y][x]=="O":forjinrange(y-1,0-1,-1):ifG[j][x]=='.':G[j][x]="O"G[j+1][x]="."else:breakscore=lambda:sum((R-y)*row.count('O')fory,rowinenumerate(G))cache={}F=[['?'for_inrange(C)]for_inrange(R)]# pre-allocate saves 10% time (no GC)end=1_000_000_000i=0whilei<end:i+=1forjinrange(4):tilt(G)ifi==1andj==0:print(score())# part 1rotate(G,F);F,G=G,Fh=''.join(''.join(row)forrowinG)ifhincache:period=i-cache[h]skip=(end-i)//periodi+=skip*periodcache[h]=iprint(score())
# python en 44 LoC, 110ms et 10MB RAM
Posté par steph1978 . En réponse au message Advent of Code, jour 14. Évalué à 2. Dernière modification le 16 décembre 2023 à 02:22.