View Single Post
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.