Luke 9a, AoC:
SPOILER ALERT! Vis spoiler
Kode
import re
def nine_a():
with open('9.txt') as ifile:
compressed = ifile.read().strip()
tail = 0
length = 0
for match in re.finditer(r'\(([0-9]+)x([0-9]+)\)', compressed):
start, end = match.start(), match.end()
# Skip matches that are part of compressed data
if start < tail:
continue
chars, n = map(int, match.groups())
length += (start - tail) + n*chars # (length of uncompressed data) + length of decompressed compressed data
tail = end+chars
# Add any uncompressed data from the end of the file
return length + len(compressed)-tail
Jobber litt med deloppgave b nå - jeg tror jeg forstår hvordan den skal løses (jeg klarte ihvertfall test-casene på kalkulatoren), men jeg har ikke fått det ned som kode enda
Edit:
Luke 9b, AoC:
SPOILER ALERT! Vis spoiler
Etter å ha knotet en del, forstod jeg at jeg så å si hadde løst deloppgave b allerede, det eneste jeg behøvde å gjøre var et par mindre endringer i koden fra deloppgave a:
Kode
def length_of_data(data, mult=1, pattern=r'\(([0-9]+)x([0-9]+)\)'):
tot = 0
tail = 0
for match in re.finditer(pattern, data):
start, end = match.start(), match.end()
if start < tail:
continue
chars, n = map(int, match.groups())
tot += start-tail + length_of_data(data[end:end+chars], n)
tail = end+chars
tot += len(data)-tail
return tot*mult
def nine_b():
with open('9.txt') as ifile:
return length_of_data(ifile.read().strip())
Sist endret av steili; 9. desember 2016 kl. 17:58.
Grunn: Automatisk sammenslåing med etterfølgende innlegg.