AoC Dag 6 i Python:
SPOILER ALERT! Vis spoiler
Litt quick'n'dirty-løsning for del 2. Kunne sikker integrert de bedre. I del 1 utfører jeg bare algoritmen de spesifiserer, og lagrer hver tilstand i en dict. Med en gang jeg ser at dicten har en tidligere tilstand så avbryter jeg.
I del 2 så gjør jeg akkurat det samme, men nullstiller dicten når jeg ser første sykel. Setter samtidig et flagg som gjør at neste gang sykelen startes, så avbrytes loopen.
Kode
memos = {}
banks = map(int,open("6.txt").read().split()) #[0,2,7,0]
def realloc(b):
ix_hi = b.index(max(b))
blocks = b[ix_hi]
b[ix_hi] = 0
ix = (ix_hi + 1) % len(b)
while blocks > 0:
b[ix] += 1
blocks -= 1
ix = (ix + 1) % len(b)
return b
# Part 1
cycles = 0
while True:
memostring = ','.join(map(str,banks))
if memostring in memos:
break
memos[memostring] = True
cycles += 1
realloc(banks)
print cycles
# Part 2
cycles = 0
seen_cycle = False
while True:
memostring = ','.join(map(str,banks))
if memostring in memos:
if seen_cycle:
break
seen_cycle = True
memos = {}
memos[memostring] = True
if seen_cycle:
cycles += 1
realloc(banks)
print cycles