コード例 #1
0
ファイル: day1.py プロジェクト: bloy/adventofcode-2017
#!env python
import aoc


def revcaptcha(rotate, seed):
    return sum(
        int(digit) for i, digit in enumerate(seed)
        if seed[(i + rotate) % len(seed)] == digit)


if __name__ == '__main__':
    puzzle_input = "".join(aoc.input_lines(day=1))

    rotate1 = 1
    rotate2 = len(puzzle_input) // 2

    print(revcaptcha(rotate1, puzzle_input))
    print(revcaptcha(rotate2, puzzle_input))
コード例 #2
0
ファイル: day6.py プロジェクト: bloy/adventofcode-2017
        count -= 1
    return tuple(banks)


def solve1(row):
    seen = set()
    count = 0
    while row not in seen:
        seen.add(row)
        count += 1
        row = iterate(row)
    return count

def solve2(row):
    seen = set()
    record = list()
    count = 0
    while row not in seen:
        seen.add(row)
        record.append(row)
        count += 1
        row = iterate(row)
    return count - record.index(row)

if __name__ == '__main__':
    rows = [(0, 2, 7, 0)]
    rows = [tuple(int(bank) for bank in row.split()) for row in aoc.input_lines(day=6)]
    row = rows[0]
    print(solve1(row))
    print(solve2(row))
コード例 #3
0
    current = 0
    returns = [None, None]
    while 1:
        try:
            returns[current] = next(programs[current])
        except StopIteration:
            return returns
        current = (current + 1) % 2



lines = [
    'set a 1',
    'add a 2',
    'mul a a',
    'mod a 5',
    'snd a',
    'set a 0',
    'rcv a',
    'jgz a -1',
    'set a 1',
    'jgz a -2',
]


if __name__ == '__main__':
    lines = aoc.input_lines(day=18)
    data = parse_data(lines)
    pprint.pprint(solve1(data))
    pprint.pprint(solve2(data))
コード例 #4
0
            oldjump = jumps[offset]
        except IndexError:
            return steps
        steps += 1
        jumps[offset] += 1
        offset += oldjump


def solve2(rows):
    steps = 0
    offset = 0
    jumps = list(rows)
    while 1:
        try:
            oldjump = jumps[offset]
        except IndexError:
            return steps
        steps += 1
        if oldjump >= 3:
            jumps[offset] -= 1
        else:
            jumps[offset] += 1
        offset += oldjump


if __name__ == '__main__':
    rows = tuple([0, 3, 0, 1, -3])
    rows = tuple([int(row) for row in aoc.input_lines(day=5)])
    print(solve1(rows))
    print(solve2(rows))
コード例 #5
0
ファイル: day4.py プロジェクト: bloy/adventofcode-2017
    wordset = set()
    for word in phrase.split(' '):
        if word in wordset:
            return False
        for scramble in itertools.permutations(word):
            wordset.add("".join(scramble))
    return True


def solve2(rows):
    count = 0
    for row in rows:
        if valid2(row):
            count += 1
    return count


def solve2alt(rows):
    count = 0
    for row in rows:
        words = ["".join(sorted(word)) for word in row.split(' ')]
        if len(words) == len(set(words)):
            count += 1
    return count


if __name__ == '__main__':
    rows = [row for row in aoc.input_lines(day=4)]
    print(solve1(rows))
    print(solve2alt(rows))
コード例 #6
0
ファイル: day20.py プロジェクト: bloy/adventofcode-2017
    count = len(particles)
    deltacount = 0
    for t in itertools.count():
        positions = [pos_at_tick(t, p) for p in particles]
        for p in set(positions):
            if positions.count(p) > 1:
                while p in positions:
                    i = positions.index(p)
                    del positions[i]
                    del particles[i]
        if count != len(particles):
            count = len(particles)
            deltacount = 0
        else:
            deltacount += 1
        print("time:", t, "time since change:", deltacount, "num particles:",
              len(particles))
        if deltacount >= 1000:
            return len(particles)


lines = [
    'p=<3,0,0>, v=<2,0,0>, a=<-1,0,0>', 'p=<4,0,0>, v=<0,0,0>, a=<-2,0,0>'
]

if __name__ == '__main__':
    lines = aoc.input_lines(day=20)
    data = parse_data(lines)
    pprint.pprint(solve1(data))
    pprint.pprint(solve2(data))
コード例 #7
0
ファイル: day2.py プロジェクト: bloy/adventofcode-2017
import itertools

import aoc


def checksum(row):
    return max(row) - min(row)


def solve1(rows):
    return sum(checksum(row) for row in rows)


def checksum2(row):
    for a, b in itertools.combinations(row, 2):
        if a % b == 0:
            return a // b
        if b % a == 0:
            return b // a


def solve2(rows):
    return sum(checksum2(row) for row in rows)


if __name__ == '__main__':
    rows = [[int(col) for col in row.split('\t')]
            for row in aoc.input_lines(day=2)]
    print(solve1(rows))
    print(solve2(rows))
コード例 #8
0
ファイル: day19.py プロジェクト: bloy/adventofcode-2017
            y = y - 1
        elif direction == 'W':
            x = x + 1
        elif direction == 'E':
            x = x - 1
        current = char_at(data, x, y)
        stepcount += 1
    return "".join(path), stepcount


def solve2(data):
    pass


lines = [
    "     |          ",
    "     |  +--+    ",
    "     A  |  C    ",
    " F---|----E|--+ ",
    "     |  |  |  D ",
    "     +B-+  +--+ ",
    "                ",
]


if __name__ == '__main__':
    lines = aoc.input_lines(day=19, strip=False)
    data = parse_data(lines)
    pprint.pprint(solve1(data))
    pprint.pprint(solve2(data))