Ejemplo n.º 1
0
def get_fabric_claim_grid(filename):
    fabric_claims = read_input(filename)
    fabric_claim_grid = Counter()
    for claim in fabric_claims:
        claimed_region = get_fabric_grid(claim)
        fabric_claim_grid.update(claimed_region)
    return fabric_claim_grid
Ejemplo n.º 2
0
def part1(filename):
    """Find the resulting freq"""
    freq = 0
    changing_freq = read_input(filename)
    for change in changing_freq:
        freq += int(change)
    return freq
Ejemplo n.º 3
0
def part2(filename):
    fabric_claim_grid = get_fabric_claim_grid(filename)
    fabric_single_claim = set(
        [k for k in fabric_claim_grid if fabric_claim_grid[k] == 1])
    fabric_claims = read_input(filename)
    for claim in fabric_claims:
        claim_grid = set(get_fabric_grid(claim))
        if claim_grid.issubset(fabric_single_claim):
            claim_id, _, _ = decompose_claim(claim)
            return claim_id
Ejemplo n.º 4
0
def part1(filename):
    ids = read_input(filename)
    num_twice, num_thrice = 0, 0
    for id in ids:
        cntr = Counter(id)
        if 2 in cntr.values():
            num_twice += 1
        if 3 in cntr.values():
            num_thrice += 1
    return num_twice * num_thrice
Ejemplo n.º 5
0
def part2(filename):
    """Find the first repeating frequency"""
    #Use sets to be faster
    freq_list = set([0])
    freq = 0
    while True:
        changing_freq = read_input(filename)
        for change in changing_freq:
            freq += int(change)
            if freq not in freq_list:
                freq_list.add(freq)
            else:
                return freq
Ejemplo n.º 6
0
def part2(filename):
    ids = read_input(filename)
    first_id = next(ids)
    id_len = len(first_id)
    id_collection = set()
    id1, id2 = None, None
    for id in ids:
        for prior_id in id_collection:
            mismatch = 0
            for idx in range(id_len):
                if id[idx] != prior_id[idx]:
                    mismatch += 1
                    if mismatch > 1:
                        continue
            if mismatch == 1:
                id1, id2 = id, prior_id
                break
        id_collection.add(id)
    return ''.join([x for x, y in zip(id1, id2) if x == y])
Ejemplo n.º 7
0
def get_guard_duty_log(filename):
    guard_duty = GuardDuty()
    guard_logs = read_input(filename)
    for log in guard_logs:
        guard_duty.process_log(log)
    return guard_duty