コード例 #1
0
ファイル: part2.py プロジェクト: amayomode/advent-of-code
from part1 import parseInput, update_grid
import numpy as np


def syncronized_step(grid):
    i = 1
    while True:
        grid = update_grid(grid)
        if np.all(grid == 0):
            return i
        i += 1


if __name__ == '__main__':
    grid = parseInput("input.txt")
    print(syncronized_step(grid))
コード例 #2
0
from part1 import parseInput, pair_insertions

if __name__ == '__main__':
    template, rules = parseInput("input.txt")
    print(pair_insertions(template, rules, steps=40))
コード例 #3
0
from part1 import parseInput, simulate

if __name__ == "__main__":
    initial_states = parseInput("input.txt")
    print(simulate(initial_states, 256))
コード例 #4
0
def find_basin_lengths(heightmap):
    basin_lengths = []
    rows, cols = heightmap.shape
    for i in range(rows):
        for j in range(cols):
            neighbors = []
            point = heightmap[i, j]
            # up
            if i - 1 >= 0:
                neighbors.append(heightmap[i - 1, j])
            # down
            if i + 1 <= rows - 1:
                neighbors.append(heightmap[i + 1, j])
            # left
            if j - 1 >= 0:
                neighbors.append(heightmap[i, j - 1])
            # right
            if j + 1 <= cols - 1:
                neighbors.append(heightmap[i, j + 1])
            if all([point < n for n in neighbors]):
                basin_lengths.append(len(find_basin((i, j), heightmap)))
    return basin_lengths


if __name__ == '__main__':
    heightmap = parseInput('input.txt')
    basin = find_basin_lengths(heightmap)
    basin.sort(reverse=True)
    print(prod(basin[:3]))
コード例 #5
0
ファイル: part2.py プロジェクト: amayomode/advent-of-code
from part1 import parseInput


def lowest_fuel(positions):
    best = float("inf")
    for median in range(min(positions), max(positions)):
        cost = 0
        for pos in positions:
            n = abs(median - pos)
            cost += n * (n + 1) / 2
        if cost <= best:
            best = cost
    return best


if __name__ == "__main__":
    positions = parseInput("input.txt")
    print(lowest_fuel(positions))
コード例 #6
0
from part1 import BingoBoard, parseInput


def last_winner(numbers, bingo_boards):
    winners = []
    combos = []
    for num in numbers:
        for index, board in enumerate(bingo_boards):
            board.draw(num)
            if board.is_winner() and index not in winners:
                winners.append(index)
                combos.append(num * board.score())
    return combos[-1]


if __name__ == "__main__":
    numbers, bingo_boards = parseInput("input.txt")
    print(last_winner(numbers, bingo_boards))
コード例 #7
0
from part1 import parseInput


def distinct_paths(map, vertex, visited, complete, revisited_cave):
    for neighbor in map[vertex]:
        if neighbor == "end":
            complete.append(1)
            continue
        if neighbor.islower():
            if neighbor in visited:
                if revisited_cave != "":
                    continue
                revisited_cave = neighbor
            else:
                visited.add(neighbor)
        distinct_paths(map, neighbor, visited, complete, revisited_cave)
        if neighbor.islower():
            if revisited_cave == neighbor:
                revisited_cave = ""
            else:
                visited.discard(neighbor)
    return sum(complete)


if __name__ == "__main__":
    map = parseInput("input.txt")
    print(distinct_paths(map, "start", set(), list(), ''))