cobanov / advent-of-code

Python solutions to Advent of Code 2021 challenges.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Advent of Code

My solutions to the Advent of Code challenges.

Day 1

with open("./day_1_input.txt", "r") as file:
    data = file.read().split("\n\n")
    elves = [i.split("\n") for i in data]

highest = 0
for elf in elves:
    calories = sum([int(i) for i in elf])
    if calories > highest:
        highest = calories

print(f"Part 1: {highest}")

## Part 2
calories = []
for elf in elves:
    calories.append(sum([int(i) for i in elf]))
    calories.sort()

print(f"Part 2: {sum(calories[-3:])}")

Day 2

with open("./day_2_input.txt", "r") as f:
    data = f.read()
    data_lines = [i for i in data.split("\n")]


def score(me, opponent):
    return 3 * ((me - opponent + 1) % 3) + me + 1


score_1 = 0
score_2 = 0

for line in data_lines:
    opponent, me = map(ord, line.split(" "))
    opponent -= ord("A")
    me -= ord("X")

    score_1 += score(me, opponent)
    score_2 += score((opponent + me - 1) % 3, opponent)

print("Part 1:", score_1)
print("Part 2:", score_2)

Day 3

with open("./day_3_input.txt", "r") as f:
    data = f.read()
    data_lines = [i for i in data.split("\n")]


def get_priority(letter):
    if letter.islower():
        return ord(letter) - ord("a") + 1
    else:
        return ord(letter) - ord("A") + 1 + 26


cum_result = 0
for i in data_lines:
    len_line = int(len(i) / 2)
    first_section, second_section = set(i[:len_line]), (i[len_line:])
    value = list(first_section.intersection(second_section))[0]
    result = get_priority(value)
    cum_result += result

print(cum_result)

# Part 2

step = 3
cum_result_2 = 0
for x in range(0, len(data_lines), 3):
    group_data = [set(i) for i in data_lines[x : x + step]]
    letter = list(group_data[0].intersection(group_data[1], group_data[2]))[0]
    result = get_priority(letter)
    cum_result_2 += result

print(cum_result_2)

Day 4

with open("./day_4_input.txt", "r") as f:
    data = f.read()
    data_lines = [i for i in data.split("\n")]

# Part 1 & Part 2
counter = 0
inter = 0
for i in data_lines:
    first, second = i.split(",")
    f_start, f_end = first.split("-")
    s_start, s_end = second.split("-")
    first_set = set(range(int(f_start), int(f_end) + 1))
    second_set = set(range(int(s_start), int(s_end) + 1))

    if second_set.issubset(first_set):
        counter += 1
    if first_set.issubset(second_set):
        counter += 1
    if first_set == second_set:
        counter -= 1

    if first_set.intersection(second_set):
        inter += 1

print(f"Part 1: {counter}")
print(f"Part 2: {inter}")

About

Python solutions to Advent of Code 2021 challenges.


Languages

Language:Python 100.0%