Beispiel #1
0
                        if monster_char == "#":
                            grid[row + monster_index] = grid[
                                row +
                                monster_index][:match_index +
                                               monster_char_index] + "O" + grid[
                                                   row + monster_index][
                                                       match_index +
                                                       monster_char_index + 1:]
    roughness = sum([row.count("#") for row in grid])

    return sea_monster_count != 0, roughness


def print_grid(grid):
    colorama.init()
    for row in grid:
        for char in row:
            if char == "#":
                print(colorama.Fore.BLUE, end='')
            elif char == ".":
                print(colorama.Fore.CYAN, end='')
            elif char == "O":
                print(colorama.Fore.YELLOW, end='')
            else:
                assert False
            print(char + colorama.Style.RESET_ALL, end='')
        print()


aoc.run_raw(main, "day20.txt")
Beispiel #2
0

def main(puzzle_input):
    values = [int(val) for val in puzzle_input]

    pattern_matrix = numpy.array(get_pattern_matrix(len(values)))
    values = numpy.array(values)
    for _ in range(100):
        values = numpy.matmul(pattern_matrix, values)
        values = [abs(r) % 10 for r in values]
    part1 = "".join(map(str, values[:8]))

    values = puzzle_input
    values *= 10000
    offset = int(values[:7])
    values = values[offset:]
    values = [int(val) for val in values]

    for _ in range(100):
        s = sum(values)
        for i in range(len(values)):
            v = s % 10
            s -= values[i]
            values[i] = v
    part2 = "".join(map(str, values[:8]))

    return part1, part2


aoc.run_raw(main, "day16.txt")
Beispiel #3
0
            part1 += 1
        if has_same(password, True):
            part2 += 1

        index = 5
        numbers[index] += 1
        while numbers[index] == 10:
            numbers[index] = 0
            numbers[index - 1] += 1
            index -= 1
        for i in range(index, 6):
            numbers[i] = max(numbers[i], numbers[i - 1])
        password = int(''.join([str(n) for n in numbers]))

    return part1, part2


def has_same(password, part2=False):
    passwordString = str(password)
    for i in range(5):
        if passwordString[i] == passwordString[i + 1]:
            if part2 == False:
                return True
            elif (i == 0 or passwordString[i] != passwordString[i - 1]) and (
                    i == 4 or passwordString[i] != passwordString[i + 2]):
                return True
    return False


aoc.run_raw(main, "day04.txt")