Move to proper folder

This commit is contained in:
David Doblas Jiménez 2023-08-12 10:46:04 +02:00
parent 8c7dad677a
commit e5d96e8125
30 changed files with 14014 additions and 0 deletions

98
src/Year_2022/Day01.py Normal file
View File

@ -0,0 +1,98 @@
# --- Day 1: Calorie Counting ---
# Santa's reindeer typically eat regular reindeer food, but they need a lot of
# magical energy to deliver presents on Christmas. For that, their favorite
# snack is a special type of star fruit that only grows deep in the jungle. The
# Elves have brought you on their annual expedition to the grove where the
# fruit grows.
# To supply enough magical energy, the expedition needs to retrieve a minimum
# of fifty stars by December 25th. Although the Elves assure you that the grove
# has plenty of fruit, you decide to grab any fruit you see along the way, just
# in case.
# Collect stars by solving puzzles. Two puzzles will be made available on each
# day in the Advent calendar; the second puzzle is unlocked when you complete
# the first. Each puzzle grants one star. Good luck!
# The jungle must be too overgrown and difficult to navigate in vehicles or
# access from the air; the Elves' expedition traditionally goes on foot. As
# your boats approach land, the Elves begin taking inventory of their supplies.
# One important consideration is food - in particular, the number of Calories
# each Elf is carrying (your puzzle input).
# The Elves take turns writing down the number of Calories contained by the
# various meals, snacks, rations, etc. that they've brought with them, one item
# per line. Each Elf separates their own inventory from the previous Elf's
# inventory (if any) by a blank line.
# For example, suppose the Elves finish writing their items' Calories and end
# up with the following list:
# 1000
# 2000
# 3000
# 4000
# 5000
# 6000
# 7000
# 8000
# 9000
# 10000
# This list represents the Calories of the food carried by five Elves:
# The first Elf is carrying food with 1000, 2000, and 3000 Calories, a
# total of 6000 Calories.
# The second Elf is carrying one food item with 4000 Calories.
# The third Elf is carrying food with 5000 and 6000 Calories, a total of
# 11000 Calories.
# The fourth Elf is carrying food with 7000, 8000, and 9000 Calories, a
# total of 24000 Calories.
# The fifth Elf is carrying one food item with 10000 Calories.
# In case the Elves get hungry and need extra snacks, they need to know which
# Elf to ask: they'd like to know how many Calories are being carried by the
# Elf carrying the most Calories. In the example above, this is 24000 (carried
# by the fourth Elf).
# Find the Elf carrying the most Calories. How many total Calories is that Elf
# carrying?
from collections import Counter
with open("P1.txt") as f:
cal_list = [line for line in f.read().strip().split("\n\n")]
elfs = Counter()
for idx, elf in enumerate(cal_list):
elfs[idx] = sum([int(food) for food in elf.split("\n")])
print(elfs.most_common(1))
# --- Part Two ---
# By the time you calculate the answer to the Elves' question, they've already
# realized that the Elf carrying the most Calories of food might eventually run
# out of snacks.
# To avoid this unacceptable situation, the Elves would instead like to know
# the total Calories carried by the top three Elves carrying the most Calories.
# That way, even if one of those Elves runs out of snacks, they still have two
# backups.
# In the example above, the top three Elves are the fourth Elf (with 24000
# Calories), then the third Elf (with 11000 Calories), then the fifth Elf (with
# 10000 Calories). The sum of the Calories carried by these three elves is
# 45000.
# Find the top three Elves carrying the most Calories. How many Calories are
# those Elves carrying in total?
top_three = elfs.most_common(3)
print(sum(cals for elf, cals in top_three))

110
src/Year_2022/Day02.py Normal file
View File

@ -0,0 +1,110 @@
# --- Day 2: Rock Paper Scissors ---
# The Elves begin to set up camp on the beach. To decide whose tent gets to be
# closest to the snack storage, a giant Rock Paper Scissors tournament is
# already in progress.
# Rock Paper Scissors is a game between two players. Each game contains many
# rounds; in each round, the players each simultaneously choose one of Rock,
# Paper, or Scissors using a hand shape. Then, a winner for that round is
# selected: Rock defeats Scissors, Scissors defeats Paper, and Paper defeats
# Rock. If both players choose the same shape, the round instead ends in a
# draw.
# Appreciative of your help yesterday, one Elf gives you an encrypted strategy
# guide (your puzzle input) that they say will be sure to help you win. "The
# first column is what your opponent is going to play: A for Rock, B for Paper,
# and C for Scissors. The second column--" Suddenly, the Elf is called away to
# help with someone's tent.
# The second column, you reason, must be what you should play in response: X
# for Rock, Y for Paper, and Z for Scissors. Winning every time would be
# suspicious, so the responses must have been carefully chosen.
# The winner of the whole tournament is the player with the highest score. Your
# total score is the sum of your scores for each round. The score for a single
# round is the score for the shape you selected (1 for Rock, 2 for Paper, and 3
# for Scissors) plus the score for the outcome of the round (0 if you lost, 3
# if the round was a draw, and 6 if you won).
# Since you can't be sure if the Elf is trying to help you or trick you, you
# should calculate the score you would get if you were to follow the strategy
# guide.
# For example, suppose you were given the following strategy guide:
# A Y
# B X
# C Z
# This strategy guide predicts and recommends the following:
# In the first round, your opponent will choose Rock (A), and you should
# choose Paper (Y). This ends in a win for you with a score of 8 (2 because you
# chose Paper + 6 because you won).
# In the second round, your opponent will choose Paper (B), and you should
# choose Rock (X). This ends in a loss for you with a score of 1 (1 + 0).
# The third round is a draw with both players choosing Scissors, giving you
# a score of 3 + 3 = 6.
# In this example, if you were to follow the strategy guide, you would get a
# total score of 15 (8 + 1 + 6).
# What would your total score be if everything goes exactly according to your
# strategy guide?
game_score_dic = {
"A": {"X": 3 + 1, "Y": 6 + 2, "Z": 0 + 3},
"B": {"X": 0 + 1, "Y": 3 + 2, "Z": 6 + 3},
"C": {"X": 6 + 1, "Y": 0 + 2, "Z": 3 + 3},
}
with open("P2.txt") as f:
strategy_list = [line for line in f.read().strip().split("\n")]
score_dic = 0
for game in strategy_list:
p1, p2 = game.split()
score_dic += game_score_dic[p1][p2]
print(score_dic)
# --- Part Two ---
# The Elf finishes helping with the tent and sneaks back over to you. "Anyway,
# the second column says how the round needs to end: X means you need to lose,
# Y means you need to end the round in a draw, and Z means you need to win.
# Good luck!"
# The total score is still calculated in the same way, but now you need to
# figure out what shape to choose so the round ends as indicated. The example
# above now goes like this:
# In the first round, your opponent will choose Rock (A), and you need the
# round to end in a draw (Y), so you also choose Rock. This gives you a score
# of 1 + 3 = 4.
# In the second round, your opponent will choose Paper (B), and you choose
# Rock so you lose (X) with a score of 1 + 0 = 1.
# In the third round, you will defeat your opponent's Scissors with Rock
# for a score of 1 + 6 = 7.
# Now that you're correctly decrypting the ultra top secret strategy guide, you
# would get a total score of 12.
# Following the Elf's instructions for the second column, what would your total
# score be if everything goes exactly according to your strategy guide?
game_score_2nd_dic = {
"A": {"X": 0 + 3, "Y": 3 + 1, "Z": 6 + 2},
"B": {"X": 0 + 1, "Y": 3 + 2, "Z": 6 + 3},
"C": {"X": 0 + 2, "Y": 3 + 3, "Z": 6 + 1},
}
score_2nd = 0
for game in strategy_list:
p1, p2 = game.split()
score_2nd += game_score_2nd_dic[p1][p2]
print(score_2nd)

128
src/Year_2022/Day03.py Normal file
View File

@ -0,0 +1,128 @@
# --- Day 3: Rucksack Reorganization ---
# One Elf has the important job of loading all of the rucksacks with supplies
# for the jungle journey. Unfortunately, that Elf didn't quite follow the
# packing instructions, and so a few items now need to be rearranged.
# Each rucksack has two large compartments. All items of a given type are meant
# to go into exactly one of the two compartments. The Elf that did the packing
# failed to follow this rule for exactly one item type per rucksack.
# The Elves have made a list of all of the items currently in each rucksack
# (your puzzle input), but they need your help finding the errors. Every item
# type is identified by a single lowercase or uppercase letter (that is, a and
# A refer to different types of items).
# The list of items for each rucksack is given as characters all on a single
# line. A given rucksack always has the same number of items in each of its two
# compartments, so the first half of the characters represent items in the
# first compartment, while the second half of the characters represent items in
# the second compartment.
# For example, suppose you have the following list of contents from six
# rucksacks:
# vJrwpWtwJgWrhcsFMMfFFhFp
# jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
# PmmdzqPrVvPwwTWBwg
# wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
# ttgJtRGJQctTZtZT
# CrZsJsPPZsGzwwsLwLmpwMDw
# The first rucksack contains the items vJrwpWtwJgWrhcsFMMfFFhFp, which
# means its first compartment contains the items vJrwpWtwJgWr, while the second
# compartment contains the items hcsFMMfFFhFp. The only item type that appears
# in both compartments is lowercase p.
# The second rucksack's compartments contain jqHRNqRjqzjGDLGL and
# rsFMfFZSrLrFZsSL. The only item type that appears in both compartments is
# uppercase L.
# The third rucksack's compartments contain PmmdzqPrV and vPwwTWBwg; the
# only common item type is uppercase P.
# The fourth rucksack's compartments only share item type v.
# The fifth rucksack's compartments only share item type t.
# The sixth rucksack's compartments only share item type s.
# To help prioritize item rearrangement, every item type can be converted to a
# priority:
# Lowercase item types a through z have priorities 1 through 26.
# Uppercase item types A through Z have priorities 27 through 52.
# In the above example, the priority of the item type that appears in both
# compartments of each rucksack is 16 (p), 38 (L), 42 (P), 22 (v), 20 (t), and
# 19 (s); the sum of these is 157.
# Find the item type that appears in both compartments of each rucksack. What
# is the sum of the priorities of those item types?
with open("P3.txt") as f:
items_list = [line for line in f.read().strip().split()]
priorities = 0
for items in items_list:
first, second = items[: len(items) // 2], items[len(items) // 2 :]
char = list(set(first) & set(second))[0]
if char.isupper():
priorities += ord(char) - 38
else:
priorities += ord(char) - 96
print(priorities)
# --- Part Two ---
# As you finish identifying the misplaced items, the Elves come to you with
# another issue.
# For safety, the Elves are divided into groups of three. Every Elf carries a
# badge that identifies their group. For efficiency, within each group of three
# Elves, the badge is the only item type carried by all three Elves. That is,
# if a group's badge is item type B, then all three Elves will have item type B
# somewhere in their rucksack, and at most two of the Elves will be carrying
# any other item type.
# The problem is that someone forgot to put this year's updated authenticity
# sticker on the badges. All of the badges need to be pulled out of the
# rucksacks so the new authenticity stickers can be attached.
# Additionally, nobody wrote down which item type corresponds to each group's
# badges. The only way to tell which item type is the right one is by finding
# the one item type that is common between all three Elves in each group.
# Every set of three lines in your list corresponds to a single group, but each
# group can have a different badge item type. So, in the above example, the
# first group's rucksacks are the first three lines:
# vJrwpWtwJgWrhcsFMMfFFhFp
# jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
# PmmdzqPrVvPwwTWBwg
# And the second group's rucksacks are the next three lines:
# wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
# ttgJtRGJQctTZtZT
# CrZsJsPPZsGzwwsLwLmpwMDw
# In the first group, the only item type that appears in all three rucksacks is
# lowercase r; this must be their badges. In the second group, their badge item
# type must be Z.
# Priorities for these items must still be found to organize the sticker
# attachment efforts: here, they are 18 (r) for the first group and 52 (Z) for
# the second group. The sum of these is 70.
# Find the item type that corresponds to the badges of each three-Elf group.
# What is the sum of the priorities of those item types?
from more_itertools import grouper
new_priorities = 0
for triplet in grouper(items_list, 3):
first, second, third = triplet
char = list(set(first) & set(second) & set(third))[0]
if char.isupper():
new_priorities += ord(char) - 38
else:
new_priorities += ord(char) - 96
print(new_priorities)

104
src/Year_2022/Day04.py Normal file
View File

@ -0,0 +1,104 @@
# --- Day 4: Camp Cleanup ---
# Space needs to be cleared before the last supplies can be unloaded from the
# ships, and so several Elves have been assigned the job of cleaning up
# sections of the camp. Every section has a unique ID number, and each Elf is
# assigned a range of section IDs.
# However, as some of the Elves compare their section assignments with each
# other, they've noticed that many of the assignments overlap. To try to
# quickly find overlaps and reduce duplicated effort, the Elves pair up and
# make a big list of the section assignments for each pair (your puzzle input).
# For example, consider the following list of section assignment pairs:
# 2-4,6-8
# 2-3,4-5
# 5-7,7-9
# 2-8,3-7
# 6-6,4-6
# 2-6,4-8
# For the first few pairs, this list means:
# Within the first pair of Elves, the first Elf was assigned sections 2-4
# (sections 2, 3, and 4), while the second Elf was assigned sections 6-8
# (sections 6, 7, 8).
# The Elves in the second pair were each assigned two sections.
# The Elves in the third pair were each assigned three sections: one got
# sections 5, 6, and 7, while the other also got 7, plus 8 and 9.
# This example list uses single-digit section IDs to make it easier to draw;
# your actual list might contain larger numbers. Visually, these pairs of
# section assignments look like this:
# .234..... 2-4
# .....678. 6-8
# .23...... 2-3
# ...45.... 4-5
# ....567.. 5-7
# ......789 7-9
# .2345678. 2-8
# ..34567.. 3-7
# .....6... 6-6
# ...456... 4-6
# .23456... 2-6
# ...45678. 4-8
# Some of the pairs have noticed that one of their assignments fully contains
# the other. For example, 2-8 fully contains 3-7, and 6-6 is fully contained by
# 4-6. In pairs where one assignment fully contains the other, one Elf in the
# pair would be exclusively cleaning sections their partner will already be
# cleaning, so these seem like the most in need of reconsideration. In this
# example, there are 2 such pairs.
# In how many assignment pairs does one range fully contain the other?
with open("P4.txt") as f:
section_pairs = [line for line in f.read().strip().split()]
assignment_pairs = 0
for elfs in section_pairs:
e1, e2 = [[int(x) for x in pairs.split("-")] for pairs in elfs.split(",")]
e1, e2 = {x for x in range(e1[0], e1[1] + 1)}, {
x for x in range(e2[0], e2[1] + 1)
}
if len(e1) == len(e1 | e2) or len(e2) == len(e1 | e2):
assignment_pairs += 1
print(assignment_pairs)
# --- Part Two ---
# It seems like there is still quite a bit of duplicate work planned. Instead,
# the Elves would like to know the number of pairs that overlap at all.
# In the above example, the first two pairs (2-4,6-8 and 2-3,4-5) don't
# overlap, while the remaining four pairs (5-7,7-9, 2-8,3-7, 6-6,4-6, and
# 2-6,4-8) do overlap:
# 5-7,7-9 overlaps in a single section, 7.
# 2-8,3-7 overlaps all of the sections 3 through 7.
# 6-6,4-6 overlaps in a single section, 6.
# 2-6,4-8 overlaps in sections 4, 5, and 6.
# So, in this example, the number of overlapping assignment pairs is 4.
# In how many assignment pairs do the ranges overlap?
assignment_pairs_overlaps = len(section_pairs)
for elfs in section_pairs:
e1, e2 = [[int(x) for x in pairs.split("-")] for pairs in elfs.split(",")]
e1, e2 = {x for x in range(e1[0], e1[1] + 1)}, {
x for x in range(e2[0], e2[1] + 1)
}
if len(e1 & e2) == 0:
assignment_pairs_overlaps -= 1
print(assignment_pairs_overlaps)

194
src/Year_2022/Day05.py Normal file
View File

@ -0,0 +1,194 @@
# --- Day 5: Supply Stacks ---
# The expedition can depart as soon as the final supplies have been unloaded
# from the ships. Supplies are stored in stacks of marked crates, but because
# the needed supplies are buried under many other crates, the crates need to be
# rearranged.
# The ship has a giant cargo crane capable of moving crates between stacks. To
# ensure none of the crates get crushed or fall over, the crane operator will
# rearrange them in a series of carefully-planned steps. After the crates are
# rearranged, the desired crates will be at the top of each stack.
# The Elves don't want to interrupt the crane operator during this delicate
# procedure, but they forgot to ask her which crate will end up where, and they
# want to be ready to unload them as soon as possible so they can embark.
# They do, however, have a drawing of the starting stacks of crates and the
# rearrangement procedure (your puzzle input). For example:
# [D]
# [N] [C]
# [Z] [M] [P]
# 1 2 3
# move 1 from 2 to 1
# move 3 from 1 to 3
# move 2 from 2 to 1
# move 1 from 1 to 2
# In this example, there are three stacks of crates. Stack 1 contains two
# crates: crate Z is on the bottom, and crate N is on top. Stack 2 contains
# three crates; from bottom to top, they are crates M, C, and D. Finally, stack
# 3 contains a single crate, P.
# Then, the rearrangement procedure is given. In each step of the procedure, a
# quantity of crates is moved from one stack to a different stack. In the first
# step of the above rearrangement procedure, one crate is moved from stack 2 to
# stack 1, resulting in this configuration:
# [D]
# [N] [C]
# [Z] [M] [P]
# 1 2 3
# In the second step, three crates are moved from stack 1 to stack 3. Crates
# are moved one at a time, so the first crate to be moved (D) ends up below the
# second and third crates:
# [Z]
# [N]
# [C] [D]
# [M] [P]
# 1 2 3
# Then, both crates are moved from stack 2 to stack 1. Again, because crates
# are moved one at a time, crate C ends up below crate M:
# [Z]
# [N]
# [M] [D]
# [C] [P]
# 1 2 3
# Finally, one crate is moved from stack 1 to stack 2:
# [Z]
# [N]
# [D]
# [C] [M] [P]
# 1 2 3
# The Elves just need to know which crate will end up on top of each stack; in
# this example, the top crates are C in stack 1, M in stack 2, and Z in stack
# 3, so you should combine these together and give the Elves the message CMZ.
# After the rearrangement procedure completes, what crate ends up on top of
# each stack?
from collections import defaultdict
with open("P5.txt") as f:
stack_crates, instructions = [
line for line in f.read().strip().split("\n\n")
]
def parse_crates(crates):
stacks = defaultdict(str)
for row in crates.splitlines():
for idx, char in enumerate(row):
if not char.isalpha():
continue
stacks[idx // 4 + 1] += char
return stacks
def parse_instruction(inst):
procedure = inst.split(" ")
units, from_crate, to_crate = [int(num) for num in procedure[1::2]]
return units, from_crate, to_crate
def rearrange(stack, u, f, t):
move = stack[f][:u][::-1]
stack[t] = move + stack[t]
stack[f] = stack[f][u:]
stacks = parse_crates(stack_crates)
# needed for Part 2
stacks_ = stacks.copy()
for inst in instructions.splitlines():
u, f, t = parse_instruction(inst)
rearrange(stacks, u, f, t)
print("".join([v[0] for k, v in sorted(stacks.items())]))
# --- Part Two ---
# As you watch the crane operator expertly rearrange the crates, you notice the
# process isn't following your prediction.
# Some mud was covering the writing on the side of the crane, and you quickly
# wipe it away. The crane isn't a CrateMover 9000 - it's a CrateMover 9001.
# The CrateMover 9001 is notable for many new and exciting features: air
# conditioning, leather seats, an extra cup holder, and the ability to pick up
# and move multiple crates at once.
# Again considering the example above, the crates begin in the same
# configuration:
# [D]
# [N] [C]
# [Z] [M] [P]
# 1 2 3
# Moving a single crate from stack 2 to stack 1 behaves the same as before:
# [D]
# [N] [C]
# [Z] [M] [P]
# 1 2 3
# However, the action of moving three crates from stack 1 to stack 3 means that
# those three moved crates stay in the same order, resulting in this new
# configuration:
# [D]
# [N]
# [C] [Z]
# [M] [P]
# 1 2 3
# Next, as both crates are moved from stack 2 to stack 1, they retain their
# order as well:
# [D]
# [N]
# [C] [Z]
# [M] [P]
# 1 2 3
# Finally, a single crate is still moved from stack 1 to stack 2, but now it's
# crate C that gets moved:
# [D]
# [N]
# [Z]
# [M] [C] [P]
# 1 2 3
# In this example, the CrateMover 9001 has put the crates in a totally
# different order: MCD.
# Before the rearrangement process finishes, update your simulation so that the
# Elves know where they should stand to be ready to unload the final supplies.
# After the rearrangement procedure completes, what crate ends up on top of
# each stack?
def rearrange_9001(stack, u, f, t):
move = stack[f][:u]
stack[t] = move + stack[t]
stack[f] = stack[f][u:]
for inst in instructions.splitlines():
u, f, t = parse_instruction(inst)
rearrange_9001(stacks_, u, f, t)
print("".join([v[0] for k, v in sorted(stacks_.items())]))

89
src/Year_2022/Day06.py Normal file
View File

@ -0,0 +1,89 @@
# --- Day 6: Tuning Trouble ---
# The preparations are finally complete; you and the Elves leave camp on foot
# and begin to make your way toward the star fruit grove.
# As you move through the dense undergrowth, one of the Elves gives you a
# handheld device. He says that it has many fancy features, but the most
# important one to set up right now is the communication system.
# However, because he's heard you have significant experience dealing with
# signal-based systems, he convinced the other Elves that it would be okay to
# give you their one malfunctioning device - surely you'll have no problem
# fixing it.
# As if inspired by comedic timing, the device emits a few colorful sparks.
# To be able to communicate with the Elves, the device needs to lock on to
# their signal. The signal is a series of seemingly-random characters that the
# device receives one at a time.
# To fix the communication system, you need to add a subroutine to the device
# that detects a start-of-packet marker in the datastream. In the protocol
# being used by the Elves, the start of a packet is indicated by a sequence of
# four characters that are all different.
# The device will send your subroutine a datastream buffer (your puzzle input);
# your subroutine needs to identify the first position where the four most
# recently received characters were all different. Specifically, it needs to
# report the number of characters from the beginning of the buffer to the end
# of the first such four-character marker.
# For example, suppose you receive the following datastream buffer:
# mjqjpqmgbljsphdztnvjfqwrcgsmlb
# After the first three characters (mjq) have been received, there haven't been
# enough characters received yet to find the marker. The first time a marker
# could occur is after the fourth character is received, making the most recent
# four characters mjqj. Because j is repeated, this isn't a marker.
# The first time a marker appears is after the seventh character arrives. Once
# it does, the last four characters received are jpqm, which are all different.
# In this case, your subroutine should report the value 7, because the first
# start-of-packet marker is complete after 7 characters have been processed.
# Here are a few more examples:
# bvwbjplbgvbhsrlpgdmjqwftvncz: first marker after character 5
# nppdvjthqldpwncqszvftbrmjlhg: first marker after character 6
# nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg: first marker after character 10
# zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw: first marker after character 11
# How many characters need to be processed before the first start-of-packet
# marker is detected?
from more_itertools import sliding_window
with open("P6.txt") as f:
data_stream = [line for line in f.read().strip().split()][0]
for idx, key in enumerate(sliding_window(data_stream, 4)):
if len(set(key)) == 4:
print(key, idx + 4)
break
# --- Part Two ---
# Your device's communication system is correctly detecting packets, but still
# isn't working. It looks like it also needs to look for messages.
# A start-of-message marker is just like a start-of-packet marker, except it
# consists of 14 distinct characters rather than 4.
# Here are the first positions of start-of-message markers for all of the above
# examples:
# mjqjpqmgbljsphdztnvjfqwrcgsmlb: first marker after character 19
# bvwbjplbgvbhsrlpgdmjqwftvncz: first marker after character 23
# nppdvjthqldpwncqszvftbrmjlhg: first marker after character 23
# nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg: first marker after character 29
# zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw: first marker after character 26
# How many characters need to be processed before the first start-of-message
# marker is detected?
for idx, key in enumerate(sliding_window(data_stream, 14)):
if len(set(key)) == 14:
print(key, idx + 14)
break

184
src/Year_2022/Day07.py Normal file
View File

@ -0,0 +1,184 @@
# --- Day 7: No Space Left On Device ---
# You can hear birds chirping and raindrops hitting leaves as the expedition
# proceeds. Occasionally, you can even hear much louder sounds in the distance;
# how big do the animals get out here, anyway?
# The device the Elves gave you has problems with more than just its
# communication system. You try to run a system update:
# $ system-update --please --pretty-please-with-sugar-on-top
# Error: No space left on device
# Perhaps you can delete some files to make space for the update?
# You browse around the filesystem to assess the situation and save the
# resulting terminal output (your puzzle input). For example:
# $ cd /
# $ ls
# dir a
# 14848514 b.txt
# 8504156 c.dat
# dir d
# $ cd a
# $ ls
# dir e
# 29116 f
# 2557 g
# 62596 h.lst
# $ cd e
# $ ls
# 584 i
# $ cd ..
# $ cd ..
# $ cd d
# $ ls
# 4060174 j
# 8033020 d.log
# 5626152 d.ext
# 7214296 k
# The filesystem consists of a tree of files (plain data) and directories
# (which can contain other directories or files). The outermost directory is
# called /. You can navigate around the filesystem, moving into or out of
# directories and listing the contents of the directory you're currently in.
# Within the terminal output, lines that begin with $ are commands you
# executed, very much like some modern computers:
# cd means change directory. This changes which directory is the current
# directory, but the specific result depends on the argument:
# cd x moves in one level: it looks in the current directory for the
# directory named x and makes it the current directory.
# cd .. moves out one level: it finds the directory that contains the
# current directory, then makes that directory the current directory.
# cd / switches the current directory to the outermost directory, /.
# ls means list. It prints out all of the files and directories
# immediately contained by the current directory:
# 123 abc means that the current directory contains a file named abc
# with size 123.
# dir xyz means that the current directory contains a directory named
# xyz.
# Given the commands and output in the example above, you can determine that
# the filesystem looks visually like this:
# - / (dir)
# - a (dir)
# - e (dir)
# - i (file, size=584)
# - f (file, size=29116)
# - g (file, size=2557)
# - h.lst (file, size=62596)
# - b.txt (file, size=14848514)
# - c.dat (file, size=8504156)
# - d (dir)
# - j (file, size=4060174)
# - d.log (file, size=8033020)
# - d.ext (file, size=5626152)
# - k (file, size=7214296)
# Here, there are four directories: / (the outermost directory), a and d (which
# are in /), and e (which is in a). These directories also contain files of
# various sizes.
# Since the disk is full, your first step should probably be to find
# directories that are good candidates for deletion. To do this, you need to
# determine the total size of each directory. The total size of a directory is
# the sum of the sizes of the files it contains, directly or indirectly.
# (Directories themselves do not count as having any intrinsic size.)
# The total sizes of the directories above can be found as follows:
# The total size of directory e is 584 because it contains a single file i
# of size 584 and no other directories.
# The directory a has total size 94853 because it contains files f (size
# 29116), g (size 2557), and h.lst (size 62596), plus file i indirectly (a
# contains e which contains i).
# Directory d has total size 24933642.
# As the outermost directory, / contains every file. Its total size is
# 48381165, the sum of the size of every file.
# To begin, find all of the directories with a total size of at most 100000,
# then calculate the sum of their total sizes. In the example above, these
# directories are a and e; the sum of their total sizes is 95437 (94853 + 584).
# (As in this example, this process can count files more than once!)
# Find all of the directories with a total size of at most 100000. What is the
# sum of the total sizes of those directories?
with open("P7.txt") as f:
filesystem = [line for line in f.read().splitlines()]
tree = []
total = 0
for line in filesystem:
if "$ cd" in line:
if ".." in line:
dir_size = tree.pop()
tree[-1] += dir_size
if dir_size < 100_000:
total += dir_size
else:
tree.append(0)
elif line[0].isdigit():
tree[-1] += int(line.split()[0])
print(total)
# --- Part Two ---
# Now, you're ready to choose a directory to delete.
# The total disk space available to the filesystem is 70000000. To run the
# update, you need unused space of at least 30000000. You need to find a
# directory you can delete that will free up enough space to run the update.
# In the example above, the total size of the outermost directory (and thus the
# total amount of used space) is 48381165; this means that the size of the
# unused space must currently be 21618835, which isn't quite the 30000000
# required by the update. Therefore, the update still requires a directory with
# total size of at least 8381165 to be deleted before it can run.
# To achieve this, you have the following options:
# Delete directory e, which would increase unused space by 584.
# Delete directory a, which would increase unused space by 94853.
# Delete directory d, which would increase unused space by 24933642.
# Delete directory /, which would increase unused space by 48381165.
# Directories e and a are both too small; deleting them would not free up
# enough space. However, directories d and / are both big enough! Between
# these, choose the smallest: d, increasing unused space by 24933642.
# Find the smallest directory that, if deleted, would free up enough space on
# the filesystem to run the update. What is the total size of that directory?
tree = []
total = []
for line in filesystem:
if "$ cd" in line:
if ".." in line:
dir_size = tree.pop()
tree[-1] += dir_size
total.append(dir_size)
else:
tree.append(0)
elif line[0].isdigit():
tree[-1] += int(line.split()[0])
while tree:
total.append(tree.pop())
if tree:
tree[-1] += total[-1]
total.sort()
used_space = 70_000_000 - total[-1]
for size_dir in total:
if used_space + size_dir >= 30_000_000:
print(size_dir)
break

175
src/Year_2022/Day08.py Normal file
View File

@ -0,0 +1,175 @@
# --- Day 8: Treetop Tree House ---
# The expedition comes across a peculiar patch of tall trees all planted
# carefully in a grid. The Elves explain that a previous expedition planted
# these trees as a reforestation effort. Now, they're curious if this would be
# a good location for a tree house.
# First, determine whether there is enough tree cover here to keep a tree house
# hidden. To do this, you need to count the number of trees that are visible
# from outside the grid when looking directly along a row or column.
# The Elves have already launched a quadcopter to generate a map with the
# height of each tree (your puzzle input). For example:
# 30373
# 25512
# 65332
# 33549
# 35390
# Each tree is represented as a single digit whose value is its height, where 0
# is the shortest and 9 is the tallest.
# A tree is visible if all of the other trees between it and an edge of the
# grid are shorter than it. Only consider trees in the same row or column; that
# is, only look up, down, left, or right from any given tree.
# All of the trees around the edge of the grid are visible - since they are
# already on the edge, there are no trees to block the view. In this example,
# that only leaves the interior nine trees to consider:
# The top-left 5 is visible from the left and top. (It isn't visible from
# the right or bottom since other trees of height 5 are in the way.)
# The top-middle 5 is visible from the top and right.
# The top-right 1 is not visible from any direction; for it to be visible,
# there would need to only be trees of height 0 between it and an edge.
# The left-middle 5 is visible, but only from the right.
# The center 3 is not visible from any direction; for it to be visible,
# there would need to be only trees of at most height 2 between it and an edge.
# The right-middle 3 is visible from the right.
# In the bottom row, the middle 5 is visible, but the 3 and 4 are not.
# With 16 trees visible on the edge and another 5 visible in the interior, a
# total of 21 trees are visible in this arrangement.
# Consider your map; how many trees are visible from outside the grid?
import numpy as np
with open("/home/xfeluser/AoC_2022/P8.txt") as f:
grid = [int(num) for line in f.read().strip().split() for num in line]
grid_arr = np.array(grid).reshape(int(len(grid) ** 0.5), int(len(grid) ** 0.5))
perimeter = grid_arr.shape[0] * 2 + (grid_arr.shape[0] - 2) * 2
def is_visible(arr, x, y):
point = arr[x, y]
top = arr[:x, y]
bottom = arr[x + 1 :, y]
left = arr[x, :y]
right = arr[x, y + 1 :]
return np.any(
[1 for pos in [top, bottom, left, right] if np.all(point - pos > 0)]
)
total = 0
for idx, element in enumerate(np.nditer(grid_arr[1:-1, 1:-1])):
x = 1 + (idx // grid_arr[1:-1, 1:-1].shape[0])
y = 1 + (idx % grid_arr[1:-1, 1:-1].shape[0])
if is_visible(grid_arr, x, y):
total += 1
print(perimeter + total)
# --- Part Two ---
# Content with the amount of tree cover available, the Elves just need to know
# the best spot to build their tree house: they would like to be able to see a
# lot of trees.
# To measure the viewing distance from a given tree, look up, down, left, and
# right from that tree; stop if you reach an edge or at the first tree that is
# the same height or taller than the tree under consideration. (If a tree is
# right on the edge, at least one of its viewing distances will be zero.)
# The Elves don't care about distant trees taller than those found by the rules
# above; the proposed tree house has large eaves to keep it dry, so they
# wouldn't be able to see higher than the tree house anyway.
# In the example above, consider the middle 5 in the second row:
# 30373
# 25512
# 65332
# 33549
# 35390
# Looking up, its view is not blocked; it can see 1 tree (of height 3).
# Looking left, its view is blocked immediately; it can see only 1 tree
# (of height 5, right next to it).
# Looking right, its view is not blocked; it can see 2 trees.
# Looking down, its view is blocked eventually; it can see 2 trees (one of
# height 3, then the tree of height 5 that blocks its view).
# A tree's scenic score is found by multiplying together its viewing distance
# in each of the four directions. For this tree, this is 4 (found by
# multiplying 1 * 1 * 2 * 2).
# However, you can do even better: consider the tree of height 5 in the middle
# of the fourth row:
# 30373
# 25512
# 65332
# 33549
# 35390
# Looking up, its view is blocked at 2 trees (by another tree with a height
# of 5).
# Looking left, its view is not blocked; it can see 2 trees.
# Looking down, its view is also not blocked; it can see 1 tree.
# Looking right, its view is blocked at 2 trees (by a massive tree of
# height 9).
# This tree's scenic score is 8 (2 * 2 * 1 * 2); this is the ideal spot for the
# tree house.
# Consider each tree on your map. What is the highest scenic score possible for
# any tree?
from math import prod
def visibility(arr, x, y):
point = arr[x, y]
top = arr[:x, y]
bottom = arr[x + 1 :, y]
left = arr[x, :y]
right = arr[x, y + 1 :]
return prod(
(
length_path(point, direction)
for direction in [top[::-1], bottom, left[::-1], right]
)
)
def length_path(p, direction):
path_length = 0
for pos in direction:
if p - pos >= 0:
path_length += 1
if p - pos == 0:
break
else:
path_length += 1
break
return path_length
total = 0
maximum_path = 0
for idx, element in enumerate(np.nditer(grid_arr[1:-1, 1:-1])):
x = 1 + (idx // grid_arr[1:-1, 1:-1].shape[0])
y = 1 + (idx % grid_arr[1:-1, 1:-1].shape[0])
maximum_path = max(visibility(grid_arr, x, y), maximum_path)
print(maximum_path)

770
src/Year_2022/Day09.py Normal file
View File

@ -0,0 +1,770 @@
# --- Day 9: Rope Bridge ---
# This rope bridge creaks as you walk along it. You aren't sure how old it is,
# or whether it can even support your weight.
# It seems to support the Elves just fine, though. The bridge spans a gorge
# which was carved out by the massive river far below you.
# You step carefully; as you do, the ropes stretch and twist. You decide to
# distract yourself by modeling rope physics; maybe you can even figure out
# where not to step.
# Consider a rope with a knot at each end; these knots mark the head and the
# tail of the rope. If the head moves far enough away from the tail, the tail
# is pulled toward the head.
# Due to nebulous reasoning involving Planck lengths, you should be able to
# model the positions of the knots on a two-dimensional grid. Then, by
# following a hypothetical series of motions (your puzzle input) for the head,
# you can determine how the tail will move.
# Due to the aforementioned Planck lengths, the rope must be quite short; in
# fact, the head (H) and tail (T) must always be touching (diagonally adjacent
# and even overlapping both count as touching):
# ....
# .TH.
# ....
# ....
# .H..
# ..T.
# ....
# ...
# .H. (H covers T)
# ...
# If the head is ever two steps directly up, down, left, or right from the
# tail, the tail must also move one step in that direction so it remains close
# enough:
# ..... ..... .....
# .TH.. -> .T.H. -> ..TH.
# ..... ..... .....
# ... ... ...
# .T. .T. ...
# .H. -> ... -> .T.
# ... .H. .H.
# ... ... ...
# Otherwise, if the head and tail aren't touching and aren't in the same row or
# column, the tail always moves one step diagonally to keep up:
# ..... ..... .....
# ..... ..H.. ..H..
# ..H.. -> ..... -> ..T..
# .T... .T... .....
# ..... ..... .....
# ..... ..... .....
# ..... ..... .....
# ..H.. -> ...H. -> ..TH.
# .T... .T... .....
# ..... ..... .....
# You just need to work out where the tail goes as the head follows a series of
# motions. Assume the head and the tail both start at the same position,
# overlapping.
# For example:
# R 4
# U 4
# L 3
# D 1
# R 4
# D 1
# L 5
# R 2
# This series of motions moves the head right four steps, then up four steps,
# then left three steps, then down one step, and so on. After each step, you'll
# need to update the position of the tail if the step means the head is no
# longer adjacent to the tail. Visually, these motions occur as follows (s
# marks the starting position as a reference point):
# == Initial State ==
# ......
# ......
# ......
# ......
# H..... (H covers T, s)
# == R 4 ==
# ......
# ......
# ......
# ......
# TH.... (T covers s)
# ......
# ......
# ......
# ......
# sTH...
# ......
# ......
# ......
# ......
# s.TH..
# ......
# ......
# ......
# ......
# s..TH.
# == U 4 ==
# ......
# ......
# ......
# ....H.
# s..T..
# ......
# ......
# ....H.
# ....T.
# s.....
# ......
# ....H.
# ....T.
# ......
# s.....
# ....H.
# ....T.
# ......
# ......
# s.....
# == L 3 ==
# ...H..
# ....T.
# ......
# ......
# s.....
# ..HT..
# ......
# ......
# ......
# s.....
# .HT...
# ......
# ......
# ......
# s.....
# == D 1 ==
# ..T...
# .H....
# ......
# ......
# s.....
# == R 4 ==
# ..T...
# ..H...
# ......
# ......
# s.....
# ..T...
# ...H..
# ......
# ......
# s.....
# ......
# ...TH.
# ......
# ......
# s.....
# ......
# ....TH
# ......
# ......
# s.....
# == D 1 ==
# ......
# ....T.
# .....H
# ......
# s.....
# == L 5 ==
# ......
# ....T.
# ....H.
# ......
# s.....
# ......
# ....T.
# ...H..
# ......
# s.....
# ......
# ......
# ..HT..
# ......
# s.....
# ......
# ......
# .HT...
# ......
# s.....
# ......
# ......
# HT....
# ......
# s.....
# == R 2 ==
# ......
# ......
# .H.... (H covers T)
# ......
# s.....
# ......
# ......
# .TH...
# ......
# s.....
# After simulating the rope, you can count up all of the positions the tail
# visited at least once. In this diagram, s again marks the starting position
# (which the tail also visited) and # marks other positions the tail visited:
# ..##..
# ...##.
# .####.
# ....#.
# s###..
# So, there are 13 positions the tail visited at least once.
# Simulate your complete hypothetical series of motions. How many positions
# does the tail of the rope visit at least once?
with open("/home/xfeluser/AoC_2022/P9.txt") as f:
grid_positions = [line for line in f.read().strip().split("\n")]
head = tail = (0, 0)
visited = {(0, 0)}
for motion in grid_positions:
direction, steps = motion.split()
for _ in range(int(steps)):
head = (
head[0] + (direction == "R") - (direction == "L"),
head[1] + (direction == "D") - (direction == "U"),
)
if max(abs(tail[0] - head[0]), abs(tail[1] - head[1])) == 2:
tail = (
tail[0] + (tail[0] < head[0]) - (tail[0] > head[0]),
tail[1] + (tail[1] < head[1]) - (tail[1] > head[1]),
)
visited.add(tail)
print(len(visited))
# --- Part Two ---
# A rope snaps! Suddenly, the river is getting a lot closer than you remember.
# The bridge is still there, but some of the ropes that broke are now whipping
# toward you as you fall through the air!
# The ropes are moving too quickly to grab; you only have a few seconds to
# choose how to arch your body to avoid being hit. Fortunately, your simulation
# can be extended to support longer ropes.
# Rather than two knots, you now must simulate a rope consisting of ten knots.
# One knot is still the head of the rope and moves according to the series of
# motions. Each knot further down the rope follows the knot in front of it
# using the same rules as before.
# Using the same series of motions as the above example, but with the knots
# marked H, 1, 2, ..., 9, the motions now occur as follows:
# == Initial State ==
# ......
# ......
# ......
# ......
# H..... (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)
# == R 4 ==
# ......
# ......
# ......
# ......
# 1H.... (1 covers 2, 3, 4, 5, 6, 7, 8, 9, s)
# ......
# ......
# ......
# ......
# 21H... (2 covers 3, 4, 5, 6, 7, 8, 9, s)
# ......
# ......
# ......
# ......
# 321H.. (3 covers 4, 5, 6, 7, 8, 9, s)
# ......
# ......
# ......
# ......
# 4321H. (4 covers 5, 6, 7, 8, 9, s)
# == U 4 ==
# ......
# ......
# ......
# ....H.
# 4321.. (4 covers 5, 6, 7, 8, 9, s)
# ......
# ......
# ....H.
# .4321.
# 5..... (5 covers 6, 7, 8, 9, s)
# ......
# ....H.
# ....1.
# .432..
# 5..... (5 covers 6, 7, 8, 9, s)
# ....H.
# ....1.
# ..432.
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == L 3 ==
# ...H..
# ....1.
# ..432.
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ..H1..
# ...2..
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# .H1...
# ...2..
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == D 1 ==
# ..1...
# .H.2..
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == R 4 ==
# ..1...
# ..H2..
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ..1...
# ...H.. (H covers 2)
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ...1H. (1 covers 2)
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ...21H
# ..43..
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == D 1 ==
# ......
# ...21.
# ..43.H
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == L 5 ==
# ......
# ...21.
# ..43H.
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ...21.
# ..4H.. (H covers 3)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ...2..
# ..H1.. (H covers 4; 1 covers 3)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ...2..
# .H13.. (1 covers 4)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ......
# H123.. (2 covers 4)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# == R 2 ==
# ......
# ......
# .H23.. (H covers 1; 2 covers 4)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# ......
# ......
# .1H3.. (H covers 2, 4)
# .5....
# 6..... (6 covers 7, 8, 9, s)
# Now, you need to keep track of the positions the new tail, 9, visits. In this
# example, the tail never moves, and so it only visits 1 position. However, be
# careful: more types of motion are possible than before, so you might want to
# visually compare your simulated rope to the one above.
# Here's a larger example:
# R 5
# U 8
# L 8
# D 3
# R 17
# D 10
# L 25
# U 20
# These motions occur as follows (individual steps are not shown):
# == Initial State ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ...........H.............. (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == R 5 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ...........54321H......... (5 covers 6, 7, 8, 9, s)
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == U 8 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ................H.........
# ................1.........
# ................2.........
# ................3.........
# ...............54.........
# ..............6...........
# .............7............
# ............8.............
# ...........9.............. (9 covers s)
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == L 8 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ........H1234.............
# ............5.............
# ............6.............
# ............7.............
# ............8.............
# ............9.............
# ..........................
# ..........................
# ...........s..............
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == D 3 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# .........2345.............
# ........1...6.............
# ........H...7.............
# ............8.............
# ............9.............
# ..........................
# ..........................
# ...........s..............
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == R 17 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ................987654321H
# ..........................
# ..........................
# ..........................
# ..........................
# ...........s..............
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# == D 10 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ...........s.........98765
# .........................4
# .........................3
# .........................2
# .........................1
# .........................H
# == L 25 ==
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ...........s..............
# ..........................
# ..........................
# ..........................
# ..........................
# H123456789................
# == U 20 ==
# H.........................
# 1.........................
# 2.........................
# 3.........................
# 4.........................
# 5.........................
# 6.........................
# 7.........................
# 8.........................
# 9.........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ...........s..............
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# Now, the tail (9) visits 36 positions (including s) at least once:
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# ..........................
# #.........................
# #.............###.........
# #............#...#........
# .#..........#.....#.......
# ..#..........#.....#......
# ...#........#.......#.....
# ....#......s.........#....
# .....#..............#.....
# ......#............#......
# .......#..........#.......
# ........#........#........
# .........########.........
# Simulate your complete series of motions on a larger rope with ten knots.
# How many positions does the tail of the rope visit at least once?
snake = [(0, 0)] * 10
visited = {(0, 0)}
for motion in grid_positions:
direction, steps = motion.split()
for _ in range(int(steps)):
snake[0] = (
snake[0][0] + (direction == "R") - (direction == "L"),
snake[0][1] + (direction == "D") - (direction == "U"),
)
for idx in range(1, 10):
head = snake[idx - 1]
tail = snake[idx]
if max(abs(tail[0] - head[0]), abs(tail[1] - head[1])) == 2:
tail = (
tail[0] + (tail[0] < head[0]) - (tail[0] > head[0]),
tail[1] + (tail[1] < head[1]) - (tail[1] > head[1]),
)
snake[idx - 1] = head
snake[idx] = tail
visited.add(snake[-1])
print(len(visited))

397
src/Year_2022/Day10.py Normal file
View File

@ -0,0 +1,397 @@
# --- Day 10: Cathode-Ray Tube ---
# You avoid the ropes, plunge into the river, and swim to shore.
# The Elves yell something about meeting back up with them upriver, but the
# river is too loud to tell exactly what they're saying. They finish crossing
# the bridge and disappear from view.
# Situations like this must be why the Elves prioritized getting the
# communication system on your handheld device working. You pull it out of your
# pack, but the amount of water slowly draining from a big crack in its screen
# tells you it probably won't be of much immediate use.
# Unless, that is, you can design a replacement for the device's video system!
# It seems to be some kind of cathode-ray tube screen and simple CPU that are
# both driven by a precise clock circuit. The clock circuit ticks at a constant
# rate; each tick is called a cycle.
# Start by figuring out the signal being sent by the CPU. The CPU has a single
# register, X, which starts with the value 1. It supports only two
# instructions:
# addx V takes two cycles to complete. After two cycles, the X register is
# increased by the value V. (V can be negative.)
# noop takes one cycle to complete. It has no other effect.
# The CPU uses these instructions in a program (your puzzle input) to, somehow,
# tell the screen what to draw.
# Consider the following small program:
# noop
# addx 3
# addx -5
# Execution of this program proceeds as follows:
# At the start of the first cycle, the noop instruction begins execution.
# During the first cycle, X is 1. After the first cycle, the noop instruction
# finishes execution, doing nothing.
# At the start of the second cycle, the addx 3 instruction begins
# execution. During the second cycle, X is still 1.
# During the third cycle, X is still 1. After the third cycle, the addx 3
# instruction finishes execution, setting X to 4.
# At the start of the fourth cycle, the addx -5 instruction begins
# execution. During the fourth cycle, X is still 4.
# During the fifth cycle, X is still 4. After the fifth cycle, the addx -5
# instruction finishes execution, setting X to -1.
# Maybe you can learn something by looking at the value of the X register
# throughout execution. For now, consider the signal strength (the cycle number
# multiplied by the value of the X register) during the 20th cycle and every 40
# cycles after that (that is, during the 20th, 60th, 100th, 140th, 180th, and
# 220th cycles).
# For example, consider this larger program:
# addx 15
# addx -11
# addx 6
# addx -3
# addx 5
# addx -1
# addx -8
# addx 13
# addx 4
# noop
# addx -1
# addx 5
# addx -1
# addx 5
# addx -1
# addx 5
# addx -1
# addx 5
# addx -1
# addx -35
# addx 1
# addx 24
# addx -19
# addx 1
# addx 16
# addx -11
# noop
# noop
# addx 21
# addx -15
# noop
# noop
# addx -3
# addx 9
# addx 1
# addx -3
# addx 8
# addx 1
# addx 5
# noop
# noop
# noop
# noop
# noop
# addx -36
# noop
# addx 1
# addx 7
# noop
# noop
# noop
# addx 2
# addx 6
# noop
# noop
# noop
# noop
# noop
# addx 1
# noop
# noop
# addx 7
# addx 1
# noop
# addx -13
# addx 13
# addx 7
# noop
# addx 1
# addx -33
# noop
# noop
# noop
# addx 2
# noop
# noop
# noop
# addx 8
# noop
# addx -1
# addx 2
# addx 1
# noop
# addx 17
# addx -9
# addx 1
# addx 1
# addx -3
# addx 11
# noop
# noop
# addx 1
# noop
# addx 1
# noop
# noop
# addx -13
# addx -19
# addx 1
# addx 3
# addx 26
# addx -30
# addx 12
# addx -1
# addx 3
# addx 1
# noop
# noop
# noop
# addx -9
# addx 18
# addx 1
# addx 2
# noop
# noop
# addx 9
# noop
# noop
# noop
# addx -1
# addx 2
# addx -37
# addx 1
# addx 3
# noop
# addx 15
# addx -21
# addx 22
# addx -6
# addx 1
# noop
# addx 2
# addx 1
# noop
# addx -10
# noop
# noop
# addx 20
# addx 1
# addx 2
# addx 2
# addx -6
# addx -11
# noop
# noop
# noop
# The interesting signal strengths can be determined as follows:
# During the 20th cycle, register X has the value 21, so the signal
# strength is 20 * 21 = 420. (The 20th cycle occurs in the middle of the second
# addx -1, so the value of register X is the starting value, 1, plus all of the
# other addx values up to that point:
# 1 + 15 - 11 + 6 - 3 + 5 - 1 - 8 + 13 + 4 = 21.)
# During the 60th cycle, register X has the value 19, so the signal
# strength is 60 * 19 = 1140.
# During the 100th cycle, register X has the value 18, so the signal
# strength is 100 * 18 = 1800.
# During the 140th cycle, register X has the value 21, so the signal
# strength is 140 * 21 = 2940.
# During the 180th cycle, register X has the value 16, so the signal
# strength is 180 * 16 = 2880.
# During the 220th cycle, register X has the value 18, so the signal
# strength is 220 * 18 = 3960.
# The sum of these signal strengths is 13140.
# Find the signal strength during the 20th, 60th, 100th, 140th, 180th, and
# 220th cycles. What is the sum of these six signal strengths?
with open("/home/xfeluser/AoC_2022/P10.txt") as f:
program = [line for line in f.read().strip().split("\n")]
X = 1
execution = [1, 1]
for instruction in program:
if "noop" in instruction:
execution.append(X)
else:
execution.append(X)
X += int(instruction.split()[1])
execution.append(X)
cycles = [20, 60, 100, 140, 180, 220]
print(sum(cycle * execution[cycle] for cycle in cycles))
# --- Part Two ---
# It seems like the X register controls the horizontal position of a sprite.
# Specifically, the sprite is 3 pixels wide, and the X register sets the
# horizontal position of the middle of that sprite. (In this system, there is
# no such thing as "vertical position": if the sprite's horizontal position
# puts its pixels where the CRT is currently drawing, then those pixels will be
# drawn.)
# You count the pixels on the CRT: 40 wide and 6 high. This CRT screen draws
# the top row of pixels left-to-right, then the row below that, and so on. The
# left-most pixel in each row is in position 0, and the right-most pixel in
# each row is in position 39.
# Like the CPU, the CRT is tied closely to the clock circuit: the CRT draws a
# single pixel during each cycle. Representing each pixel of the screen as a #,
# here are the cycles during which the first and last pixel in each row are
# drawn:
# Cycle 1 -> ######################################## <- Cycle 40
# Cycle 41 -> ######################################## <- Cycle 80
# Cycle 81 -> ######################################## <- Cycle 120
# Cycle 121 -> ######################################## <- Cycle 160
# Cycle 161 -> ######################################## <- Cycle 200
# Cycle 201 -> ######################################## <- Cycle 240
# So, by carefully timing the CPU instructions and the CRT drawing operations,
# you should be able to determine whether the sprite is visible the instant
# each pixel is drawn. If the sprite is positioned such that one of its three
# pixels is the pixel currently being drawn, the screen produces a lit pixel
# (#); otherwise, the screen leaves the pixel dark (.).
# The first few pixels from the larger example above are drawn as follows:
# Sprite position: ###.....................................
# Start cycle 1: begin executing addx 15
# During cycle 1: CRT draws pixel in position 0
# Current CRT row: #
# During cycle 2: CRT draws pixel in position 1
# Current CRT row: ##
# End of cycle 2: finish executing addx 15 (Register X is now 16)
# Sprite position: ...............###......................
# Start cycle 3: begin executing addx -11
# During cycle 3: CRT draws pixel in position 2
# Current CRT row: ##.
# During cycle 4: CRT draws pixel in position 3
# Current CRT row: ##..
# End of cycle 4: finish executing addx -11 (Register X is now 5)
# Sprite position: ....###.................................
# Start cycle 5: begin executing addx 6
# During cycle 5: CRT draws pixel in position 4
# Current CRT row: ##..#
# During cycle 6: CRT draws pixel in position 5
# Current CRT row: ##..##
# End of cycle 6: finish executing addx 6 (Register X is now 11)
# Sprite position: ..........###...........................
# Start cycle 7: begin executing addx -3
# During cycle 7: CRT draws pixel in position 6
# Current CRT row: ##..##.
# During cycle 8: CRT draws pixel in position 7
# Current CRT row: ##..##..
# End of cycle 8: finish executing addx -3 (Register X is now 8)
# Sprite position: .......###..............................
# Start cycle 9: begin executing addx 5
# During cycle 9: CRT draws pixel in position 8
# Current CRT row: ##..##..#
# During cycle 10: CRT draws pixel in position 9
# Current CRT row: ##..##..##
# End of cycle 10: finish executing addx 5 (Register X is now 13)
# Sprite position: ............###.........................
# Start cycle 11: begin executing addx -1
# During cycle 11: CRT draws pixel in position 10
# Current CRT row: ##..##..##.
# During cycle 12: CRT draws pixel in position 11
# Current CRT row: ##..##..##..
# End of cycle 12: finish executing addx -1 (Register X is now 12)
# Sprite position: ...........###..........................
# Start cycle 13: begin executing addx -8
# During cycle 13: CRT draws pixel in position 12
# Current CRT row: ##..##..##..#
# During cycle 14: CRT draws pixel in position 13
# Current CRT row: ##..##..##..##
# End of cycle 14: finish executing addx -8 (Register X is now 4)
# Sprite position: ...###..................................
# Start cycle 15: begin executing addx 13
# During cycle 15: CRT draws pixel in position 14
# Current CRT row: ##..##..##..##.
# During cycle 16: CRT draws pixel in position 15
# Current CRT row: ##..##..##..##..
# End of cycle 16: finish executing addx 13 (Register X is now 17)
# Sprite position: ................###.....................
# Start cycle 17: begin executing addx 4
# During cycle 17: CRT draws pixel in position 16
# Current CRT row: ##..##..##..##..#
# During cycle 18: CRT draws pixel in position 17
# Current CRT row: ##..##..##..##..##
# End of cycle 18: finish executing addx 4 (Register X is now 21)
# Sprite position: ....................###.................
# Start cycle 19: begin executing noop
# During cycle 19: CRT draws pixel in position 18
# Current CRT row: ##..##..##..##..##.
# End of cycle 19: finish executing noop
# Start cycle 20: begin executing addx -1
# During cycle 20: CRT draws pixel in position 19
# Current CRT row: ##..##..##..##..##..
# During cycle 21: CRT draws pixel in position 20
# Current CRT row: ##..##..##..##..##..#
# End of cycle 21: finish executing addx -1 (Register X is now 20)
# Sprite position: ...................###..................
# Allowing the program to run to completion causes the CRT to produce the
# following image:
# ##..##..##..##..##..##..##..##..##..##..
# ###...###...###...###...###...###...###.
# ####....####....####....####....####....
# #####.....#####.....#####.....#####.....
# ######......######......######......####
# #######.......#######.......#######.....
# Render the image given by your program. What eight capital letters appear on
# your CRT?
crt = []
for cycle in range(241):
if not cycle % 40:
crt.append("\n")
crt.append("" if cycle % 40 - execution[cycle + 1] in {-1, 0, 1} else " ")
print("".join(crt))

439
src/Year_2022/Day11.py Normal file
View File

@ -0,0 +1,439 @@
# --- Day 11: Monkey in the Middle ---
# As you finally start making your way upriver, you realize your pack is much
# lighter than you remember. Just then, one of the items from your pack goes
# flying overhead. Monkeys are playing Keep Away with your missing things!
# To get your stuff back, you need to be able to predict where the monkeys will
# throw your items. After some careful observation, you realize the monkeys
# operate based on how worried you are about each item.
# You take some notes (your puzzle input) on the items each monkey currently
# has, how worried you are about those items, and how the monkey makes
# decisions based on your worry level. For example:
# Monkey 0:
# Starting items: 79, 98
# Operation: new = old * 19
# Test: divisible by 23
# If true: throw to monkey 2
# If false: throw to monkey 3
# Monkey 1:
# Starting items: 54, 65, 75, 74
# Operation: new = old + 6
# Test: divisible by 19
# If true: throw to monkey 2
# If false: throw to monkey 0
# Monkey 2:
# Starting items: 79, 60, 97
# Operation: new = old * old
# Test: divisible by 13
# If true: throw to monkey 1
# If false: throw to monkey 3
# Monkey 3:
# Starting items: 74
# Operation: new = old + 3
# Test: divisible by 17
# If true: throw to monkey 0
# If false: throw to monkey 1
# Each monkey has several attributes:
# Starting items lists your worry level for each item the monkey is
# currently holding in the order they will be inspected.
# Operation shows how your worry level changes as that monkey inspects an
# item. (An operation like new = old * 5 means that your worry level after the
# monkey inspected the item is five times whatever your worry level was before
# inspection.)
# Test shows how the monkey uses your worry level to decide where to throw
# an item next.
# If true shows what happens with an item if the Test was true.
# If false shows what happens with an item if the Test was false.
# After each monkey inspects an item but before it tests your worry level, your
# relief that the monkey's inspection didn't damage the item causes your worry
# level to be divided by three and rounded down to the nearest integer.
# The monkeys take turns inspecting and throwing items. On a single monkey's
# turn, it inspects and throws all of the items it is holding one at a time and
# in the order listed. Monkey 0 goes first, then monkey 1, and so on until each
# monkey has had one turn. The process of each monkey taking a single turn is
# called a round.
# When a monkey throws an item to another monkey, the item goes on the end of
# the recipient monkey's list. A monkey that starts a round with no items could
# end up inspecting and throwing many items by the time its turn comes around.
# If a monkey is holding no items at the start of its turn, its turn ends.
# In the above example, the first round proceeds as follows:
# Monkey 0:
# Monkey inspects an item with a worry level of 79.
# Worry level is multiplied by 19 to 1501.
# Monkey gets bored with item. Worry level is divided by 3 to 500.
# Current worry level is not divisible by 23.
# Item with worry level 500 is thrown to monkey 3.
# Monkey inspects an item with a worry level of 98.
# Worry level is multiplied by 19 to 1862.
# Monkey gets bored with item. Worry level is divided by 3 to 620.
# Current worry level is not divisible by 23.
# Item with worry level 620 is thrown to monkey 3.
# Monkey 1:
# Monkey inspects an item with a worry level of 54.
# Worry level increases by 6 to 60.
# Monkey gets bored with item. Worry level is divided by 3 to 20.
# Current worry level is not divisible by 19.
# Item with worry level 20 is thrown to monkey 0.
# Monkey inspects an item with a worry level of 65.
# Worry level increases by 6 to 71.
# Monkey gets bored with item. Worry level is divided by 3 to 23.
# Current worry level is not divisible by 19.
# Item with worry level 23 is thrown to monkey 0.
# Monkey inspects an item with a worry level of 75.
# Worry level increases by 6 to 81.
# Monkey gets bored with item. Worry level is divided by 3 to 27.
# Current worry level is not divisible by 19.
# Item with worry level 27 is thrown to monkey 0.
# Monkey inspects an item with a worry level of 74.
# Worry level increases by 6 to 80.
# Monkey gets bored with item. Worry level is divided by 3 to 26.
# Current worry level is not divisible by 19.
# Item with worry level 26 is thrown to monkey 0.
# Monkey 2:
# Monkey inspects an item with a worry level of 79.
# Worry level is multiplied by itself to 6241.
# Monkey gets bored with item. Worry level is divided by 3 to 2080.
# Current worry level is divisible by 13.
# Item with worry level 2080 is thrown to monkey 1.
# Monkey inspects an item with a worry level of 60.
# Worry level is multiplied by itself to 3600.
# Monkey gets bored with item. Worry level is divided by 3 to 1200.
# Current worry level is not divisible by 13.
# Item with worry level 1200 is thrown to monkey 3.
# Monkey inspects an item with a worry level of 97.
# Worry level is multiplied by itself to 9409.
# Monkey gets bored with item. Worry level is divided by 3 to 3136.
# Current worry level is not divisible by 13.
# Item with worry level 3136 is thrown to monkey 3.
# Monkey 3:
# Monkey inspects an item with a worry level of 74.
# Worry level increases by 3 to 77.
# Monkey gets bored with item. Worry level is divided by 3 to 25.
# Current worry level is not divisible by 17.
# Item with worry level 25 is thrown to monkey 1.
# Monkey inspects an item with a worry level of 500.
# Worry level increases by 3 to 503.
# Monkey gets bored with item. Worry level is divided by 3 to 167.
# Current worry level is not divisible by 17.
# Item with worry level 167 is thrown to monkey 1.
# Monkey inspects an item with a worry level of 620.
# Worry level increases by 3 to 623.
# Monkey gets bored with item. Worry level is divided by 3 to 207.
# Current worry level is not divisible by 17.
# Item with worry level 207 is thrown to monkey 1.
# Monkey inspects an item with a worry level of 1200.
# Worry level increases by 3 to 1203.
# Monkey gets bored with item. Worry level is divided by 3 to 401.
# Current worry level is not divisible by 17.
# Item with worry level 401 is thrown to monkey 1.
# Monkey inspects an item with a worry level of 3136.
# Worry level increases by 3 to 3139.
# Monkey gets bored with item. Worry level is divided by 3 to 1046.
# Current worry level is not divisible by 17.
# Item with worry level 1046 is thrown to monkey 1.
# After round 1, the monkeys are holding items with these worry levels:
# Monkey 0: 20, 23, 27, 26
# Monkey 1: 2080, 25, 167, 207, 401, 1046
# Monkey 2:
# Monkey 3:
# Monkeys 2 and 3 aren't holding any items at the end of the round; they both
# inspected items during the round and threw them all before the round ended.
# This process continues for a few more rounds:
# After round 2, the monkeys are holding items with these worry levels:
# Monkey 0: 695, 10, 71, 135, 350
# Monkey 1: 43, 49, 58, 55, 362
# Monkey 2:
# Monkey 3:
# After round 3, the monkeys are holding items with these worry levels:
# Monkey 0: 16, 18, 21, 20, 122
# Monkey 1: 1468, 22, 150, 286, 739
# Monkey 2:
# Monkey 3:
# After round 4, the monkeys are holding items with these worry levels:
# Monkey 0: 491, 9, 52, 97, 248, 34
# Monkey 1: 39, 45, 43, 258
# Monkey 2:
# Monkey 3:
# After round 5, the monkeys are holding items with these worry levels:
# Monkey 0: 15, 17, 16, 88, 1037
# Monkey 1: 20, 110, 205, 524, 72
# Monkey 2:
# Monkey 3:
# After round 6, the monkeys are holding items with these worry levels:
# Monkey 0: 8, 70, 176, 26, 34
# Monkey 1: 481, 32, 36, 186, 2190
# Monkey 2:
# Monkey 3:
# After round 7, the monkeys are holding items with these worry levels:
# Monkey 0: 162, 12, 14, 64, 732, 17
# Monkey 1: 148, 372, 55, 72
# Monkey 2:
# Monkey 3:
# After round 8, the monkeys are holding items with these worry levels:
# Monkey 0: 51, 126, 20, 26, 136
# Monkey 1: 343, 26, 30, 1546, 36
# Monkey 2:
# Monkey 3:
# After round 9, the monkeys are holding items with these worry levels:
# Monkey 0: 116, 10, 12, 517, 14
# Monkey 1: 108, 267, 43, 55, 288
# Monkey 2:
# Monkey 3:
# After round 10, the monkeys are holding items with these worry levels:
# Monkey 0: 91, 16, 20, 98
# Monkey 1: 481, 245, 22, 26, 1092, 30
# Monkey 2:
# Monkey 3:
# ...
# After round 15, the monkeys are holding items with these worry levels:
# Monkey 0: 83, 44, 8, 184, 9, 20, 26, 102
# Monkey 1: 110, 36
# Monkey 2:
# Monkey 3:
# ...
# After round 20, the monkeys are holding items with these worry levels:
# Monkey 0: 10, 12, 14, 26, 34
# Monkey 1: 245, 93, 53, 199, 115
# Monkey 2:
# Monkey 3:
# Chasing all of the monkeys at once is impossible; you're going to have to
# focus on the two most active monkeys if you want any hope of getting your
# stuff back. Count the total number of times each monkey inspects items over
# 20 rounds:
# Monkey 0 inspected items 101 times.
# Monkey 1 inspected items 95 times.
# Monkey 2 inspected items 7 times.
# Monkey 3 inspected items 105 times.
# In this example, the two most active monkeys inspected items 101 and 105
# times. The level of monkey business in this situation can be found by
# multiplying these together: 10605.
# Figure out which monkeys to chase by counting how many items they inspect
# over 20 rounds. What is the level of monkey business after 20 rounds of
# stuff-slinging simian shenanigans?
from dataclasses import dataclass
from math import prod
with open("/home/xfeluser/AoC_2022/P11.txt") as f:
monkeys_list = [
[line for line in monkey.split("\n")]
for monkey in f.read().split("\n\n")
]
def parse_monkeys(lst):
monkeys = []
for monkey in lst:
items = [int(i) for i in monkey[1][18:].split(",")]
op = monkey[2][23:].split()
divisor = int(monkey[3][21:])
# True is the 0th item, False is the 1st!
dest = [int(monkey[4][29]), int(monkey[5][30])]
monkeys.append(Monkey(items, op, divisor, dest))
return monkeys
@dataclass
class Monkey:
items: list[int]
op: list[str]
divisor: int
dest: list[int]
act: int = 0
def inspection(monkey):
for item in monkey.items:
op, value = monkey.op
if value == "old":
value = item
else:
value = int(value)
if op == "*":
item = (item * value) // 3
elif op == "+":
item = (item + value) // 3
# False if it divisible!
is_bored = bool(item % monkey.divisor)
monkey_receiving = monkey.dest[is_bored]
throw_to_monkey = monkeys[monkey_receiving]
throw_to_monkey.items.append(item)
monkey.act += 1
monkey.items = []
monkeys = parse_monkeys(monkeys_list)
rounds = 20
for _ in range(rounds):
for monkey in monkeys:
inspection(monkey)
print(prod(sorted([m.act for m in monkeys])[-2:]))
# --- Part Two ---
# You're worried you might not ever get your items back. So worried, in fact,
# that your relief that a monkey's inspection didn't damage an item no longer
# causes your worry level to be divided by three.
# Unfortunately, that relief was all that was keeping your worry levels from
# reaching ridiculous levels. You'll need to find another way to keep your
# worry levels manageable.
# At this rate, you might be putting up with these monkeys for a very long time
# - possibly 10000 rounds!
# With these new rules, you can still figure out the monkey business after
# 10000 rounds. Using the same example above:
# == After round 1 ==
# Monkey 0 inspected items 2 times.
# Monkey 1 inspected items 4 times.
# Monkey 2 inspected items 3 times.
# Monkey 3 inspected items 6 times.
# == After round 20 ==
# Monkey 0 inspected items 99 times.
# Monkey 1 inspected items 97 times.
# Monkey 2 inspected items 8 times.
# Monkey 3 inspected items 103 times.
# == After round 1000 ==
# Monkey 0 inspected items 5204 times.
# Monkey 1 inspected items 4792 times.
# Monkey 2 inspected items 199 times.
# Monkey 3 inspected items 5192 times.
# == After round 2000 ==
# Monkey 0 inspected items 10419 times.
# Monkey 1 inspected items 9577 times.
# Monkey 2 inspected items 392 times.
# Monkey 3 inspected items 10391 times.
# == After round 3000 ==
# Monkey 0 inspected items 15638 times.
# Monkey 1 inspected items 14358 times.
# Monkey 2 inspected items 587 times.
# Monkey 3 inspected items 15593 times.
# == After round 4000 ==
# Monkey 0 inspected items 20858 times.
# Monkey 1 inspected items 19138 times.
# Monkey 2 inspected items 780 times.
# Monkey 3 inspected items 20797 times.
# == After round 5000 ==
# Monkey 0 inspected items 26075 times.
# Monkey 1 inspected items 23921 times.
# Monkey 2 inspected items 974 times.
# Monkey 3 inspected items 26000 times.
# == After round 6000 ==
# Monkey 0 inspected items 31294 times.
# Monkey 1 inspected items 28702 times.
# Monkey 2 inspected items 1165 times.
# Monkey 3 inspected items 31204 times.
# == After round 7000 ==
# Monkey 0 inspected items 36508 times.
# Monkey 1 inspected items 33488 times.
# Monkey 2 inspected items 1360 times.
# Monkey 3 inspected items 36400 times.
# == After round 8000 ==
# Monkey 0 inspected items 41728 times.
# Monkey 1 inspected items 38268 times.
# Monkey 2 inspected items 1553 times.
# Monkey 3 inspected items 41606 times.
# == After round 9000 ==
# Monkey 0 inspected items 46945 times.
# Monkey 1 inspected items 43051 times.
# Monkey 2 inspected items 1746 times.
# Monkey 3 inspected items 46807 times.
# == After round 10000 ==
# Monkey 0 inspected items 52166 times.
# Monkey 1 inspected items 47830 times.
# Monkey 2 inspected items 1938 times.
# Monkey 3 inspected items 52013 times.
# After 10000 rounds, the two most active monkeys inspected items 52166 and
# 52013 times. Multiplying these together, the level of monkey business in this
# situation is now 2713310158.
# Worry levels are no longer divided by three after each item is inspected;
# you'll need to find another way to keep your worry levels manageable.
# Starting again from the initial state in your puzzle input, what is the level
# of monkey business after 10000 rounds?
def inspection_long(monkey):
for item in monkey.items:
op, value = monkey.op
if value == "old":
value = item
else:
value = int(value)
magic_divisor = prod([m.divisor for m in monkeys])
if op == "*":
item = (item * value) % magic_divisor
elif op == "+":
item = (item + value) % magic_divisor
# False if it divisible!
is_bored = bool(item % monkey.divisor)
monkey_receiving = monkey.dest[is_bored]
throw_to_monkey = monkeys[monkey_receiving]
throw_to_monkey.items.append(item)
monkey.act += 1
monkey.items = []
monkeys = parse_monkeys(monkeys_list)
rounds = 10_000
for _ in range(rounds):
for monkey in monkeys:
inspection_long(monkey)
print(prod(sorted([m.act for m in monkeys])[-2:]))

140
src/Year_2022/Day12.py Normal file
View File

@ -0,0 +1,140 @@
# --- Day 12: Hill Climbing Algorithm ---
# You try contacting the Elves using your handheld device, but the river you're
# following must be too low to get a decent signal.
# You ask the device for a heightmap of the surrounding area (your puzzle
# input). The heightmap shows the local area from above broken into a grid;
# the elevation of each square of the grid is given by a single lowercase
# letter, where a is the lowest elevation, b is the next-lowest, and so on up
# to the highest elevation, z.
# Also included on the heightmap are marks for your current position (S) and
# the location that should get the best signal (E). Your current position (S)
# has elevation a, and the location that should get the best signal (E) has
# elevation z.
# You'd like to reach E, but to save energy, you should do it in as few steps
# as possible. During each step, you can move exactly one square up, down,
# left, or right. To avoid needing to get out your climbing gear, the elevation
# of the destination square can be at most one higher than the elevation of
# your current square; that is, if your current elevation is m, you could step
# to elevation n, but not to elevation o. (This also means that the elevation
# of the destination square can be much lower than the elevation of your
# current square.)
# For example:
# Sabqponm
# abcryxxl
# accszExk
# acctuvwj
# abdefghi
# Here, you start in the top-left corner; your goal is near the middle. You
# could start by moving down or right, but eventually you'll need to head
# toward the e at the bottom. From there, you can spiral around to the goal:
# v..v<<<<
# >v.vv<<^
# .>vv>E^^
# ..v>>>^^
# ..>>>>>^
# In the above diagram, the symbols indicate whether the path exits each
# square moving up (^), down (v), left (<), or right (>). The location that
# should get the best signal is still E, and . marks unvisited squares.
# This path reaches the goal in 31 steps, the fewest possible.
# What is the fewest steps required to move from your current position to the
# location that should get the best signal?
with open("/home/xfeluser/AoC_2022/P12.txt") as f:
diagram = {
(x, y): ord(e)
for y, line in enumerate(f.read().strip().split("\n"))
for x, e in enumerate(line.strip())
}
start = [k for k in diagram if diagram[k] == ord("S")][0]
end = [k for k in diagram if diagram[k] == ord("E")][0]
# Use expected value for starting/ending point
diagram[start] = ord("a")
diagram[end] = ord("z")
queue = [(start, 0)]
pos_to_steps = {}
while queue:
cur, steps = queue.pop()
if cur not in pos_to_steps or steps < pos_to_steps[cur]:
pos_to_steps[cur] = steps
for offset in ((1, 0), (-1, 0), (0, 1), (0, -1)):
new_pos = cur[0] + offset[0], cur[1] + offset[1]
if new_pos in diagram and diagram[new_pos] - diagram[cur] <= 1:
queue.append((new_pos, steps + 1))
print(pos_to_steps[end])
# --- Part Two ---
# As you walk up the hill, you suspect that the Elves will want to turn this
# into a hiking trail. The beginning isn't very scenic, though; perhaps you can
# find a better starting point.
# To maximize exercise while hiking, the trail should start as low as possible:
# elevation a. The goal is still the square marked E. However, the trail should
# still be direct, taking the fewest steps to reach its goal. So, you'll need
# to find the shortest path from any square at elevation a to the square marked
# E.
# Again consider the example from above:
# Sabqponm
# abcryxxl
# accszExk
# acctuvwj
# abdefghi
# Now, there are six choices for starting position (five marked a, plus the
# square marked S that counts as being at elevation a). If you start at the
# bottom-left square, you can reach the goal most quickly:
# ...v<<<<
# ...vv<<^
# ...v>E^^
# .>v>>>^^
# >^>>>>>^
# This path reaches the goal in only 29 steps, the fewest possible.
# What is the fewest steps required to move starting from any square with
# elevation a to the location that should get the best signal?
starts = []
pos_to_steps = {}
for start in [k for k in diagram if diagram[k] == ord("a")]:
queue = [(start, 0)]
while queue:
cur, steps = queue.pop()
if cur not in pos_to_steps or steps < pos_to_steps[cur]:
pos_to_steps[cur] = steps
for offset in ((1, 0), (-1, 0), (0, 1), (0, -1)):
new_pos = cur[0] + offset[0], cur[1] + offset[1]
if new_pos in diagram and diagram[new_pos] - diagram[cur] <= 1:
queue.append((new_pos, steps + 1))
if end in pos_to_steps:
starts.append(pos_to_steps[end])
print(min(starts))

218
src/Year_2022/Day13.py Normal file
View File

@ -0,0 +1,218 @@
# --- Day 13: Distress Signal ---
# You climb the hill and again try contacting the Elves. However, you instead
# receive a signal you weren't expecting: a distress signal.
# Your handheld device must still not be working properly; the packets from the
# distress signal got decoded out of order. You'll need to re-order the list of
# received packets (your puzzle input) to decode the message.
# Your list consists of pairs of packets; pairs are separated by a blank line.
# You need to identify how many pairs of packets are in the right order.
# For example:
# [1,1,3,1,1]
# [1,1,5,1,1]
# [[1],[2,3,4]]
# [[1],4]
# [9]
# [[8,7,6]]
# [[4,4],4,4]
# [[4,4],4,4,4]
# [7,7,7,7]
# [7,7,7]
# []
# [3]
# [[[]]]
# [[]]
# [1,[2,[3,[4,[5,6,7]]]],8,9]
# [1,[2,[3,[4,[5,6,0]]]],8,9]
# Packet data consists of lists and integers. Each list starts with [, ends
# with ], and contains zero or more comma-separated values (either integers or
# other lists). Each packet is always a list and appears on its own line.
# When comparing two values, the first value is called left and the second
# value is called right. Then:
# If both values are integers, the lower integer should come first. If the
# left integer is lower than the right integer, the inputs are in the right
# order. If the left integer is higher than the right integer, the inputs are
# not in the right order. Otherwise, the inputs are the same integer; continue
# checking the next part of the input.
# If both values are lists, compare the first value of each list, then the
# second value, and so on. If the left list runs out of items first, the inputs
# are in the right order. If the right list runs out of items first, the inputs
# are not in the right order. If the lists are the same length and no
# comparison makes a decision about the order, continue checking the next part
# of the input.
# If exactly one value is an integer, convert the integer to a list which
# contains that integer as its only value, then retry the comparison. For
# example, if comparing [0,0,0] and 2, convert the right value to [2] (a list
# containing 2); the result is then found by instead comparing [0,0,0] and [2].
# Using these rules, you can determine which of the pairs in the example are in
# the right order:
# == Pair 1 ==
# - Compare [1,1,3,1,1] vs [1,1,5,1,1]
# - Compare 1 vs 1
# - Compare 1 vs 1
# - Compare 3 vs 5
# - Left side is smaller, so inputs are in the right order
# == Pair 2 ==
# - Compare [[1],[2,3,4]] vs [[1],4]
# - Compare [1] vs [1]
# - Compare 1 vs 1
# - Compare [2,3,4] vs 4
# - Mixed types; convert right to [4] and retry comparison
# - Compare [2,3,4] vs [4]
# - Compare 2 vs 4
# - Left side is smaller, so inputs are in the right order
# == Pair 3 ==
# - Compare [9] vs [[8,7,6]]
# - Compare 9 vs [8,7,6]
# - Mixed types; convert left to [9] and retry comparison
# - Compare [9] vs [8,7,6]
# - Compare 9 vs 8
# - Right side is smaller, so inputs are not in the right order
# == Pair 4 ==
# - Compare [[4,4],4,4] vs [[4,4],4,4,4]
# - Compare [4,4] vs [4,4]
# - Compare 4 vs 4
# - Compare 4 vs 4
# - Compare 4 vs 4
# - Compare 4 vs 4
# - Left side ran out of items, so inputs are in the right order
# == Pair 5 ==
# - Compare [7,7,7,7] vs [7,7,7]
# - Compare 7 vs 7
# - Compare 7 vs 7
# - Compare 7 vs 7
# - Right side ran out of items, so inputs are not in the right order
# == Pair 6 ==
# - Compare [] vs [3]
# - Left side ran out of items, so inputs are in the right order
# == Pair 7 ==
# - Compare [[[]]] vs [[]]
# - Compare [[]] vs []
# - Right side ran out of items, so inputs are not in the right order
# == Pair 8 ==
# - Compare [1,[2,[3,[4,[5,6,7]]]],8,9] vs [1,[2,[3,[4,[5,6,0]]]],8,9]
# - Compare 1 vs 1
# - Compare [2,[3,[4,[5,6,7]]]] vs [2,[3,[4,[5,6,0]]]]
# - Compare 2 vs 2
# - Compare [3,[4,[5,6,7]]] vs [3,[4,[5,6,0]]]
# - Compare 3 vs 3
# - Compare [4,[5,6,7]] vs [4,[5,6,0]]
# - Compare 4 vs 4
# - Compare [5,6,7] vs [5,6,0]
# - Compare 5 vs 5
# - Compare 6 vs 6
# - Compare 7 vs 0
# - Right side is smaller, so inputs are not in the right order
# What are the indices of the pairs that are already in the right order? (The
# first pair has index 1, the second pair has index 2, and so on.) In the above
# example, the pairs in the right order are 1, 2, 4, and 6; the sum of these
# indices is 13.
# Determine which pairs of packets are already in the right order. What is the
# sum of the indices of those pairs?
from ast import literal_eval
with open("/home/xfeluser/AoC_2022/P13.txt") as f:
packets = [literal_eval(line) for line in f.read().strip().split()]
def is_ordered(left, right):
if type(left) is list or type(right) is list:
if type(left) is not list:
left = [left]
if type(right) is not list:
right = [right]
for rec_left, rec_right in zip(left, right):
rec = is_ordered(rec_left, rec_right)
if rec != 0:
return rec
return len(left) - len(right)
else:
return left - right
count = 0
for idx, (left, right) in enumerate(zip(packets[::2], packets[1::2]), start=1):
if is_ordered(left, right) >= 0:
continue
count += idx
print(count)
# --- Part Two ---
# Now, you just need to put all of the packets in the right order. Disregard
# the blank lines in your list of received packets.
# The distress signal protocol also requires that you include two additional
# divider packets:
# [[2]]
# [[6]]
# Using the same rules as before, organize all packets - the ones in your list
# of received packets as well as the two divider packets - into the correct
# order.
# For the example above, the result of putting the packets in the correct order
# is:
# []
# [[]]
# [[[]]]
# [1,1,3,1,1]
# [1,1,5,1,1]
# [[1],[2,3,4]]
# [1,[2,[3,[4,[5,6,0]]]],8,9]
# [1,[2,[3,[4,[5,6,7]]]],8,9]
# [[1],4]
# [[2]]
# [3]
# [[4,4],4,4]
# [[4,4],4,4,4]
# [[6]]
# [7,7,7]
# [7,7,7,7]
# [[8,7,6]]
# [9]
# Afterward, locate the divider packets. To find the decoder key for this
# distress signal, you need to determine the indices of the two divider packets
# and multiply them together. (The first packet is at index 1, the second
# packet is at index 2, and so on.) In this example, the divider packets are
# 10th and 14th, and so the decoder key is 140.
# Organize all of the packets into the correct order. What is the decoder key
# for the distress signal?
from functools import cmp_to_key
packets += [[[2]], [[6]]]
packets_sorted = sorted(packets, key=cmp_to_key(is_ordered))
print((packets_sorted.index([[2]]) + 1) * (packets_sorted.index([[6]]) + 1))

254
src/Year_2022/Day14.py Normal file
View File

@ -0,0 +1,254 @@
# --- Day 14: Regolith Reservoir ---
# The distress signal leads you to a giant waterfall! Actually, hang on - the
# signal seems like it's coming from the waterfall itself, and that doesn't
# make any sense. However, you do notice a little path that leads behind the
# waterfall.
# Correction: the distress signal leads you behind a giant waterfall! There
# seems to be a large cave system here, and the signal definitely leads further
# inside.
# As you begin to make your way deeper underground, you feel the ground rumble
# for a moment. Sand begins pouring into the cave! If you don't quickly figure
# out where the sand is going, you could quickly become trapped!
# Fortunately, your familiarity with analyzing the path of falling material
# will come in handy here. You scan a two-dimensional vertical slice of the
# cave above you (your puzzle input) and discover that it is mostly air with
# structures made of rock.
# Your scan traces the path of each solid rock structure and reports the x,y
# coordinates that form the shape of the path, where x represents distance to
# the right and y represents distance down. Each path appears as a single line
# of text in your scan. After the first point of each path, each point
# indicates the end of a straight horizontal or vertical line to be drawn from
# the previous point. For example:
# 498,4 -> 498,6 -> 496,6
# 503,4 -> 502,4 -> 502,9 -> 494,9
# This scan means that there are two paths of rock; the first path consists of
# two straight lines, and the second path consists of three straight lines.
# (Specifically, the first path consists of a line of rock from 498,4 through
# 498,6 and another line of rock from 498,6 through 496,6.)
# The sand is pouring into the cave from point 500,0.
# Drawing rock as #, air as ., and the source of the sand as +, this becomes:
# 4 5 5
# 9 0 0
# 4 0 3
# 0 ......+...
# 1 ..........
# 2 ..........
# 3 ..........
# 4 ....#...##
# 5 ....#...#.
# 6 ..###...#.
# 7 ........#.
# 8 ........#.
# 9 #########.
# Sand is produced one unit at a time, and the next unit of sand is not
# produced until the previous unit of sand comes to rest. A unit of sand is
# large enough to fill one tile of air in your scan.
# A unit of sand always falls down one step if possible. If the tile
# immediately below is blocked (by rock or sand), the unit of sand attempts to
# instead move diagonally one step down and to the left. If that tile is
# blocked, the unit of sand attempts to instead move diagonally one step down
# and to the right. Sand keeps moving as long as it is able to do so, at each
# step trying to move down, then down-left, then down-right. If all three
# possible destinations are blocked, the unit of sand comes to rest and no
# longer moves, at which point the next unit of sand is created back at the
# source.
# So, drawing sand that has come to rest as o, the first unit of sand simply
# falls straight down and then stops:
# ......+...
# ..........
# ..........
# ..........
# ....#...##
# ....#...#.
# ..###...#.
# ........#.
# ......o.#.
# #########.
# The second unit of sand then falls straight down, lands on the first one, and
# then comes to rest to its left:
# ......+...
# ..........
# ..........
# ..........
# ....#...##
# ....#...#.
# ..###...#.
# ........#.
# .....oo.#.
# #########.
# After a total of five units of sand have come to rest, they form this
# pattern:
# ......+...
# ..........
# ..........
# ..........
# ....#...##
# ....#...#.
# ..###...#.
# ......o.#.
# ....oooo#.
# #########.
# After a total of 22 units of sand:
# ......+...
# ..........
# ......o...
# .....ooo..
# ....#ooo##
# ....#ooo#.
# ..###ooo#.
# ....oooo#.
# ...ooooo#.
# #########.
# Finally, only two more units of sand can possibly come to rest:
# ......+...
# ..........
# ......o...
# .....ooo..
# ....#ooo##
# ...o#ooo#.
# ..###ooo#.
# ....oooo#.
# .o.ooooo#.
# #########.
# Once all 24 units of sand shown above have come to rest, all further sand
# flows out the bottom, falling into the endless void. Just for fun, the path
# any new sand takes before falling forever is shown here with ~:
# .......+...
# .......~...
# ......~o...
# .....~ooo..
# ....~#ooo##
# ...~o#ooo#.
# ..~###ooo#.
# ..~..oooo#.
# .~o.ooooo#.
# ~#########.
# ~..........
# ~..........
# ~..........
# Using your scan, simulate the falling sand. How many units of sand come to
# rest before sand starts flowing into the abyss below?
with open("/home/xfeluser/AoC_2022/P14.txt") as f:
scan_traces = [line for line in f.read().strip().split("\n")]
def cave_generation():
cave = set()
for line in scan_traces:
points = line.split(" -> ")
for point0, point1 in zip(points, points[1:]):
x0, y0 = [int(p) for p in point0.split(",")]
x1, y1 = [int(p) for p in point1.split(",")]
for x in range(min(x0, x1), max(x0, x1) + 1):
for y in range(min(y0, y1), max(y0, y1) + 1):
cave.add((x, y))
return cave
def sand_simulation(deepest):
sand, dirs = 0, [(0, 1), (-1, 1), (1, 1)]
while True:
x, y = 500, 0
while True:
if y >= deepest or (500, 0) in cave:
return sand
for dx, dy in dirs:
nx, ny = x + dx, y + dy
if (nx, ny) not in cave:
break
else:
cave.add((x, y))
sand += 1
break
x, y = nx, ny
cave = cave_generation()
deepest = max(y for (x, y) in cave)
print(sand_simulation(deepest))
# --- Part Two ---
# You realize you misread the scan. There isn't an endless void at the bottom
# of the scan - there's floor, and you're standing on it!
# You don't have time to scan the floor, so assume the floor is an infinite
# horizontal line with a y coordinate equal to two plus the highest y
# coordinate of any point in your scan.
# In the example above, the highest y coordinate of any point is 9, and so the
# floor is at y=11. (This is as if your scan contained one extra rock path
# like -infinity,11 -> infinity,11.) With the added floor, the example above
# now looks like this:
# ...........+........
# ....................
# ....................
# ....................
# .........#...##.....
# .........#...#......
# .......###...#......
# .............#......
# .............#......
# .....#########......
# ....................
# <-- etc #################### etc -->
# To find somewhere safe to stand, you'll need to simulate falling sand until a
# unit of sand comes to rest at 500,0, blocking the source entirely and
# stopping the flow of sand into the cave. In the example above, the situation
# finally looks like this after 93 units of sand come to rest:
# ............o............
# ...........ooo...........
# ..........ooooo..........
# .........ooooooo.........
# ........oo#ooo##o........
# .......ooo#ooo#ooo.......
# ......oo###ooo#oooo......
# .....oooo.oooo#ooooo.....
# ....oooooooooo#oooooo....
# ...ooo#########ooooooo...
# ..ooooo.......ooooooooo..
# #########################
# Using your scan, simulate the falling sand until the source of the sand
# becomes blocked. How many units of sand come to rest?
cave = cave_generation()
even_deepest = deepest + 2
# 1000 in both directions should be enough
for x in range(-1000, 1000):
cave.add((x, even_deepest))
print(sand_simulation(even_deepest))

190
src/Year_2022/Day15.py Normal file
View File

@ -0,0 +1,190 @@
# --- Day 15: Beacon Exclusion Zone ---
# You feel the ground rumble again as the distress signal leads you to a large
# network of subterranean tunnels. You don't have time to search them all, but
# you don't need to: your pack contains a set of deployable sensors that you
# imagine were originally built to locate lost Elves.
# The sensors aren't very powerful, but that's okay; your handheld device
# indicates that you're close enough to the source of the distress signal to
# use them. You pull the emergency sensor system out of your pack, hit the big
# button on top, and the sensors zoom off down the tunnels.
# Once a sensor finds a spot it thinks will give it a good reading, it attaches
# itself to a hard surface and begins monitoring for the nearest signal source
# beacon. Sensors and beacons always exist at integer coordinates. Each sensor
# knows its own position and can determine the position of a beacon precisely;
# however, sensors can only lock on to the one beacon closest to the sensor as
# measured by the Manhattan distance. (There is never a tie where two beacons
# are the same distance to a sensor.)
# It doesn't take long for the sensors to report back their positions and
# closest beacons (your puzzle input). For example:
# Sensor at x=2, y=18: closest beacon is at x=-2, y=15
# Sensor at x=9, y=16: closest beacon is at x=10, y=16
# Sensor at x=13, y=2: closest beacon is at x=15, y=3
# Sensor at x=12, y=14: closest beacon is at x=10, y=16
# Sensor at x=10, y=20: closest beacon is at x=10, y=16
# Sensor at x=14, y=17: closest beacon is at x=10, y=16
# Sensor at x=8, y=7: closest beacon is at x=2, y=10
# Sensor at x=2, y=0: closest beacon is at x=2, y=10
# Sensor at x=0, y=11: closest beacon is at x=2, y=10
# Sensor at x=20, y=14: closest beacon is at x=25, y=17
# Sensor at x=17, y=20: closest beacon is at x=21, y=22
# Sensor at x=16, y=7: closest beacon is at x=15, y=3
# Sensor at x=14, y=3: closest beacon is at x=15, y=3
# Sensor at x=20, y=1: closest beacon is at x=15, y=3
# So, consider the sensor at 2,18; the closest beacon to it is at -2,15. For
# the sensor at 9,16, the closest beacon to it is at 10,16.
# Drawing sensors as S and beacons as B, the above arrangement of sensors and
# beacons looks like this:
# 1 1 2 2
# 0 5 0 5 0 5
# 0 ....S.......................
# 1 ......................S.....
# 2 ...............S............
# 3 ................SB..........
# 4 ............................
# 5 ............................
# 6 ............................
# 7 ..........S.......S.........
# 8 ............................
# 9 ............................
# 10 ....B.......................
# 11 ..S.........................
# 12 ............................
# 13 ............................
# 14 ..............S.......S.....
# 15 B...........................
# 16 ...........SB...............
# 17 ................S..........B
# 18 ....S.......................
# 19 ............................
# 20 ............S......S........
# 21 ............................
# 22 .......................B....
# This isn't necessarily a comprehensive map of all beacons in the area,
# though. Because each sensor only identifies its closest beacon, if a sensor
# detects a beacon, you know there are no other beacons that close or closer to
# that sensor. There could still be beacons that just happen to not be the
# closest beacon to any sensor. Consider the sensor at 8,7:
# 1 1 2 2
# 0 5 0 5 0 5
# -2 ..........#.................
# -1 .........###................
# 0 ....S...#####...............
# 1 .......#######........S.....
# 2 ......#########S............
# 3 .....###########SB..........
# 4 ....#############...........
# 5 ...###############..........
# 6 ..#################.........
# 7 .#########S#######S#........
# 8 ..#################.........
# 9 ...###############..........
# 10 ....B############...........
# 11 ..S..###########............
# 12 ......#########.............
# 13 .......#######..............
# 14 ........#####.S.......S.....
# 15 B........###................
# 16 ..........#SB...............
# 17 ................S..........B
# 18 ....S.......................
# 19 ............................
# 20 ............S......S........
# 21 ............................
# 22 .......................B....
# This sensor's closest beacon is at 2,10, and so you know there are no beacons
# that close or closer (in any positions marked #).
# None of the detected beacons seem to be producing the distress signal, so
# you'll need to work out where the distress beacon is by working out where it
# isn't. For now, keep things simple by counting the positions where a beacon
# cannot possibly be along just a single row.
# So, suppose you have an arrangement of beacons and sensors like in the
# example above and, just in the row where y=10, you'd like to count the number
# of positions a beacon cannot possibly exist. The coverage from all sensors
# near that row looks like this:
# 1 1 2 2
# 0 5 0 5 0 5
# 9 ...#########################...
# 10 ..####B######################..
# 11 .###S#############.###########.
# In this example, in the row where y=10, there are 26 positions where a beacon
# cannot be present.
# Consult the report from the sensors you just deployed. In the row where
# y=2000000, how many positions cannot contain a beacon?
with open("/home/xfeluser/AoC_2022/P15.txt") as f:
data = [line for line in f.read().strip().split("\n")]
def is_possible(x, y):
for sx, sy, d in sensors:
if abs(x - sx) + abs(y - sy) <= d and (x, y) not in beacons:
return False
return True
sensors, beacons = set(), set()
for line in data:
parts = line.split()
sx, sy = int(parts[2][2:-1]), int(parts[3][2:-1])
bx, by = int(parts[8][2:-1]), int(parts[9][2:])
d = abs(sx - bx) + abs(sy - by)
sensors.add((sx, sy, d))
beacons.add((bx, by))
count = 0
y = 2_000_000
for x in range(
min(x - d for x, _, d in sensors), max(x + d for x, _, d in sensors)
):
if not is_possible(x, y) and (x, y) not in beacons:
count += 1
print(count)
# --- Part Two ---
# Your handheld device indicates that the distress signal is coming from a
# beacon nearby. The distress beacon is not detected by any sensor, but the
# distress beacon must have x and y coordinates each no lower than 0 and no
# larger than 4000000.
# To isolate the distress beacon's signal, you need to determine its tuning
# frequency, which can be found by multiplying its x coordinate by 4000000 and
# then adding its y coordinate.
# In the example above, the search space is smaller: instead, the x and y
# coordinates can each be at most 20. With this reduced search area, there is
# only a single position that could have a beacon: x=14, y=11. The tuning
# frequency for this distress beacon is 56000011.
# Find the only possible position for the distress beacon. What is its tuning
# frequency?
import sys
for sx, sy, d in sensors:
for dx in range(d + 2):
dy = (d + 1) - dx
for mx, my in [(-1, 1), (1, -1), (-1, -1), (1, 1)]:
x, y = sx + (dx * mx), sy + (dy * my)
if not (0 <= x <= 4_000_000 and 0 <= y <= 4_000_000):
continue
if is_possible(x, y):
print(x * 4_000_000 + y)
sys.exit()

2246
src/Year_2022/files/P1.txt Normal file

File diff suppressed because it is too large Load Diff

140
src/Year_2022/files/P10.txt Normal file
View File

@ -0,0 +1,140 @@
noop
noop
noop
addx 5
noop
addx 1
noop
addx 4
addx 25
addx -20
noop
noop
addx 5
addx 3
noop
addx 2
noop
noop
addx -1
addx 6
addx 1
noop
addx 4
noop
addx -37
noop
noop
noop
addx 3
addx 32
addx -25
addx 2
addx 3
noop
addx 2
addx 3
noop
addx 2
addx 2
addx -24
addx 25
addx 5
addx 2
addx 8
addx -23
addx 18
addx 5
addx -39
addx 11
addx -9
addx 6
addx -2
addx 5
addx 4
addx -4
addx 3
addx 5
addx 2
noop
addx -1
addx 6
addx -21
addx 22
addx 3
addx 1
addx 5
noop
noop
addx -35
noop
noop
noop
noop
addx 37
addx -33
noop
addx 6
addx 2
addx -1
addx 3
addx 1
addx 5
addx 2
addx -19
addx 21
addx 1
addx 5
addx -31
addx 36
noop
addx 3
addx -2
addx -38
noop
noop
addx 7
addx 14
addx -4
addx -7
addx 5
addx 2
addx 12
addx -15
addx 6
addx 2
addx 5
addx -27
addx 25
addx 5
noop
addx 7
addx -2
addx 5
addx -40
noop
addx 7
noop
addx -1
addx 2
addx 5
addx -1
addx 1
addx 2
addx 7
noop
addx -2
noop
addx 3
addx 2
addx 7
noop
noop
addx 1
noop
noop
addx 3
addx 1
noop
noop
noop

View File

@ -0,0 +1,55 @@
Monkey 0:
Starting items: 63, 57
Operation: new = old * 11
Test: divisible by 7
If true: throw to monkey 6
If false: throw to monkey 2
Monkey 1:
Starting items: 82, 66, 87, 78, 77, 92, 83
Operation: new = old + 1
Test: divisible by 11
If true: throw to monkey 5
If false: throw to monkey 0
Monkey 2:
Starting items: 97, 53, 53, 85, 58, 54
Operation: new = old * 7
Test: divisible by 13
If true: throw to monkey 4
If false: throw to monkey 3
Monkey 3:
Starting items: 50
Operation: new = old + 3
Test: divisible by 3
If true: throw to monkey 1
If false: throw to monkey 7
Monkey 4:
Starting items: 64, 69, 52, 65, 73
Operation: new = old + 6
Test: divisible by 17
If true: throw to monkey 3
If false: throw to monkey 7
Monkey 5:
Starting items: 57, 91, 65
Operation: new = old + 5
Test: divisible by 2
If true: throw to monkey 0
If false: throw to monkey 6
Monkey 6:
Starting items: 67, 91, 84, 78, 60, 69, 99, 83
Operation: new = old * old
Test: divisible by 5
If true: throw to monkey 2
If false: throw to monkey 4
Monkey 7:
Starting items: 58, 78, 69, 65
Operation: new = old + 7
Test: divisible by 19
If true: throw to monkey 5
If false: throw to monkey 1

View File

@ -0,0 +1,41 @@
abccccccccccccccccaaccccccccccccccccccccaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
abcccccccccccccaaaaaccccccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
abccccccccccccccaaaaaccccccccccccccaaaaacccaaaaaacccccaaccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaa
abccccccccccccccaaaaacccccccccaacccaaaaacccaaaaaaaccccaaaacaacaaccccccccccccccccccccccccaaaccccaaaccccccccccccaaaa
abcccccccccccccaaaaacccccccaaaaaccaaaaaacccaaaaaaaacaaaaaacaaaaaccccccccccccccccccccccccaaacccaaaaccccccccccccaaac
abccccccaacaaaccccaaccccccccaaaaacaaaaaaccaaaacaaaacaaaaaccaaaaaaccccccccccccccccccccccccaaaaaaaacccccccccccccaacc
abccccccaaaaaaccccccccccccccaaaaacaaaaaaccaaaaccaaaacaaaaacaaaaaacccccccccccccccccccccccaaaaaaaaaccccccccccccccccc
abccccccaaaaaacccccccccccccaaaaaccccaaccccaacccccaaccaacaacaaaaaccccccccccccccccccccccccccaaakkkkllllcccaaaccccccc
abccccccaaaaaaacccccccccccccccaaccccaacccccccccccccccccccccccaaaccccccaaaacccccccccjjjjkkkkkkkkkkllllccccaacaccccc
abcccccaaaaaaaacccccaaccccccccccccccaaaaaaccccccccccccccccccaaccccccccaaaaccccccccjjjjjkkkkkkkkkppllllcccaaaaacccc
abcccccaaaaaaaaccaaaacccccccccccccccaaaaaccccccccccccccccaacaaccccccccaaaacccccccjjjjjjjkkkkkppppppplllccaaaaacccc
abccccccccaaaccccaaaaaacccccccccccaaaaaaaccccccccccccccccaaaaacccccccccaacccccccjjjjoooooooppppppppplllcccaaaccccc
abccccccccaaccccccaaaaaccccaacccccaaaaaaaaccccaaacccccccccaaaaaaacccccccccccccccjjjooooooooppppuuppppllcccaaaccccc
abccccccaacccccccaaaaacccccaaaccaaaaaaaaaaccaaaaaaccccccaaaaaaaaaacaaaccccccccccjjjoooouuuoopuuuuupppllcccaaaccccc
abacccccaaccccccccccaacccccaaaaaaaccaaaaaaccaaaaaaccccccaaaaaccaaaaaaaccccaaccccjjoootuuuuuuuuuuuuvpqlllcccccccccc
abaccaaaaaaaacccccccccccccccaaaaaaccaacccccccaaaaacccccccacaaaccaaaaaaccaaaacaccjjooottuuuuuuuxyuvvqqljjccddcccccc
abcccaaaaaaaaccccccccccccaaaaaaaaacaacaaccccaaaaaccccccccccaaaaaaaaaacccaaaaaacciijootttxxxuuxyyyvvqqjjjjdddcccccc
abcccccaaaaccccaaacccccccaaaaaaaaacaaaaaccccaaaaaccccccccccccaaaaaaaaacccaaaaccciiinntttxxxxxxyyvvqqqqjjjddddccccc
abccccaaaaaccccaaaaacccccaaaaaaaaaaaaaaaaccccccccccccccccccccaaaaaaaaaaccaaaaccciiinntttxxxxxxyyvvvqqqqjjjdddccccc
abccccaaaaaaccaaaaaccccccccaaaaaaaaaaaaaacccccccccccccccccccccccaaacaaacaacaaccciiinnnttxxxxxyyyvvvvqqqqjjjdddcccc
SbccccaaccaaccaaaaacccccccccaaaaaaaaaaaaacccccccccccccccccccccccaaacccccccccccciiinnntttxxxEzzyyyyvvvqqqjjjdddcccc
abcccccccccccccaaaaacccccccaaaaaaaaacaaaccccccccccccccccccccccccaaccccccccccccciiinnnttxxxxyyyyyyyyvvvqqqjjjdddccc
abcccccccccccccaaccccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccciiinnntttxxyyyyyyyyyvvvvqqqjjjdddccc
abccccccccccccccccccccccccaaaaaaaacccccccccccccccccccccccccccccccccccccccccccciiinntttxxxwwwyyywwvvvvrqqjjjjdddccc
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccciinnntttxwwwwwyyywwvvvrrrqkkkeddcccc
abcccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccchhnnntttsswwswwyywwrrrrrrkkkkeeecccc
abcccccccccccccccccccccccccccaaaaaacccccccccccccccccccaccccccccccccaaacccccccchhhnmmssssssswwwwwwrrrkkkkkeeeeecccc
abcccccccccccccccccccccccccccccaaacccccccccccccccccccaaccccccccccaaaaaacccccaahhhmmmmmsssssswwwwrrrkkkkkeeeeeccccc
abaacccccccccccccaccccccccccccccccccccccccccccccccaaaaacaacccccccaaaaaacaaaaaahhhhmmmmmmmmssswwwrrkkkkeeeeeacccccc
abacccccccccccccaaaaaaaaccccccccaaacccccccaaccccccaaaaaaaacccccccaaaaaacaaaaaaahhhhmmmmmmmmsssrrrrkkkeeeeeaacccccc
abaaaccccaaccccccaaaaaacccccccccaaacccaacaaaccccccccaaaacccccccccaaaaacccaaaaaaahhhhhhhmmmmlsssrrllkfeeeeaaaaacccc
abaaaccaaaaccccccaaaaaacccccccccaaaaaaaaaaaaaacccccaaaaacccccccccaaaaacccaaaaaaachhhhhgggmllsssrrllkffeaaaaaaacccc
abaacccaaaaaacccaaaaaaaacccccaaaaaaaaaaaaaaaaacccccaacaaacccccccccccccccaaaaaacccccchggggglllllllllfffaaaaaaaacccc
abaaccccaaaacccaaaaaaaaaaccccaaaaaaaaacaaaaaaaccaccaccaaacccccccccccccccaaaaaacccccccccgggglllllllffffaaaaaacccccc
abcccccaaaaacccaaaaaaaaaacccccaaaaaaaccaaaaacccaaaccccccccccccccccccccccccccaacccccccccagggglllllffffccccaaacccccc
abcccccaacaaccccccaaaaacaccaacccaaaaaaaaaaaaaccaaacccccccccccccccccccccccccccccccccccccaagggggffffffcccccccccccccc
abcccccccccccaaaaaaaaacccccaaccaaaaaaaccaaaaacaaaaccccccccccccccccccccccccccccccccccccaaaacgggfffffccccccccccccccc
abcccccccccccaaaaacaacccaaaaaaaaaaccaacccaaaaaaaacccaaccccccccccccccccccccccccccccccccccccccggfffccccccccccccaaaca
abccccccccccaaaaaaccccccaaaaaaaaacccccccccaaaaaaaaaaaacccccccccccccaaaccccccccccccccccccccccaaaccccccccccccccaaaaa
abccccccccccaaaaaaccccccccaaaacccccccccccccaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccaaaccccccccccccccaaaa
abcccccccccccaaaaacccccccaaaaaaccccccccccaaaaaaaaaaaaaaccccccccccccaaaaccccccccccccccccccccccccccccccccccccccaaaaa

449
src/Year_2022/files/P13.txt Normal file
View File

@ -0,0 +1,449 @@
[[[0,10]],[7,9,[[2,1],[7]],4,[[5,0,5,7,8],0,0,[10,3,3,2]]],[[1,[3,8,8,6,8],6,[1,3,7,9],[9,1,1,7]],[],[[1,0,4,10],8,5]],[]]
[[10,3,[[4],0,8]],[7,6,[]]]
[[[5,[10,4,3,10,1]],1],[[[3,1,4,6,2],[3,9,3,9],[0,0],[8,10,2,6,6],9]],[10,[[]],5,5],[8,[9,2,4,7]],[4,4]]
[[[[]],[[8],[],[5,1]],4,1]]
[[8,9,[[],8,10]],[[4,[0,7,9,5,5],[8,3,4,6],9,6],4,[7,[2,1,7,4,10]],3,4],[7,4,[[3],5,[0,9]],10],[4,[],4],[2,2]]
[[3,[8,[1,8,3],[0,10],7],[[8,6,2],[10,7,6,7],4,[1,9,4,6,9]],[[10,5,10],4,[4,1,2,2,8]],[4]],[],[6,6,[[7,6],[5,6,7,5,7]]],[[[0,1,5],0,0,6],[]],[]]
[[0,7,[]],[],[[],[6,3,[4,8,4,2,1]],[[5,8,9],[],[4,10,1],[],6],3],[8],[5]]
[[0,3],[0,9]]
[[],[8,[],5],[]]
[[9]]
[[],[[10,[10],[8,3,3,5,1],[4]]],[5,5],[],[[[3,9,1],7,5,5],8,[[],[0,7,7,2],2]]]
[[6,8],[[],2,[[],10,6,[8,4],9]],[[],7,[[0,0,3]],4,9],[5,[],[[2,3,5,10],7,[2],[0,2],[7,10]],7,[[7],4,[5,2,10],10]],[[[1,2,5,1,0],[10,0]],[[7,6,8,6],[],3,6],[[6,2,2,4],5,[8,4,3,6,5],4,[3,0,8]],[],0]]
[[9,0,[[9],1,7,[3,8,0,1]]],[[],[1,[0,8,10]],7,6],[7,10,[1]],[[[8,4],0],1],[5,[[],6,[6,9,8]]]]
[[[[],3,[0,1,6,0]]],[1,[[6],10]],[[[],1,[2,8]]],[[[10,9,10,2],[1,2,10],[9,7,7,6,5],[5,9,2,4]],[[5,10]]]]
[[],[1,3],[9,[[1]],5,5],[[[4],[2],7],8],[[[],[2,6],[9,3,4,8,6],2,[9,8,7,9,8]],10]]
[[7,[3],[[3,0],[4,0,0,5,5],[10,7,2,10],5,[2,4]]],[[5,1,2,9],[[8,4],[3]],9],[]]
[[10,[]]]
[[[4],[3,4,2]],[3,[[],[6,5],6,4,[8,4,5]],[],[3,[],4,[0]],3],[7,[[0]],[[],[5,9,5],4,[2,3]]]]
[[10,2,4],[],[]]
[[4,[7,0,9]]]
[[[6,8],4,[]],[[[7,4,6],[1],[0,1,0],[],3],[2],6,[[2,10],4],4],[[8,[0,1,5,10,1],8],10]]
[[8,[4,8,[2,9,3]]]]
[[4,1,4],[[[3],8],0],[],[],[[[2,3,0],0],8]]
[[5,8,4,[6],4],[7,[[4,5,2,8],4,[9,1],9,9]],[]]
[[7,3],[2,[],[],[5,8,[],[]]]]
[[1,[2,[],9,[2,9,3]]]]
[[8,2,5,5,7]]
[[],[10,5,6],[7,[],0],[9,[[7,9],[5,4,10],[9,8],1,3],7,10,[]]]
[[2,7],[],[6,[5,1,[2,5,1],[6,7,3,4,4],9]],[0,[1,6,[5,3,1],[5,3,8],5],7]]
[[[],[]],[]]
[[[3,[4,1],8,10],[[2,7,6,0]],5,0],[7,[[2,5,7],[0,8,8],[]],0,9],[[3,[3,7,2,1]],0,[10],3,[]],[]]
[[8,[1],8,0],[9,[[10,1,9],[],0,[8,5,7,0,0]],0,[1,[6],6]],[[1],[1,[]],[8,4,[8,5,6,4,7],[9,2],8],2,[0,[9,2,7]]],[[9,[4,1,8,7,0],5],6,8,0,2],[[2,0],10,[[4,6,2,0]],[[]],[[]]]]
[[[[10],[],[],[0,4,8,0]],4,1,1],[[[2,3],[],[7,7,2,10],2]],[1,10],[[[6,10,7,6,2],[0]],4,5,[1,5,[6],5,[10]],[7,[3],0]]]
[[[],[3,1,[7],3],[[7,8,7,1,10],[7],2],3,[7,4]],[10,[9],3,[8,[8,5,10,2,8]],2],[[[5,2,10]]]]
[[10,[1,[5,3],[4],3,0],[[3,2,1,0,0],[]]]]
[[5,5],[0,8]]
[[[]],[[8,[8]],[[],[2,8,10],[7,5,10,0,3]]],[[[1],[5]],2,[[9,5,8,2,0],2,7,6],[[8,5,0,3,8],[9,1,3,7],[5,7,7,8,3],[]]],[[1,0,[5,6,8,2],6],[9,1,[4,7,7,5],3,[]],[6,0,[8],4]],[[3,10,[6,10,7],8]]]
[[0,7],[0,1,[8,[9],[4,10]],[[8,7,3,2,9],4,7,[],6]],[[[5,8],[1,5,5]],7,9,6],[],[8,[[8,0,2,6],1,[],3],3,1,5]]
[[[],[5]],[3,6,[],5],[[[2,7,5,0],[0,7]]],[[10,10,[1]]]]
[[0,[5,8,[10,2,9,0,1],[3,1,7],7],[[6],2],5]]
[[[[9,4,9,10,5],7,2],8,0,[]],[],[9,7]]
[[8,[2,[9,0,9,0],2,[6,10,8,10,5],8],1,9,6],[4,9],[0,4,7,[0],[1,[7,1],[],5]]]
[[4,[],7],[]]
[[[4,5],[[5,1],4,[],0,[9,9]],2,7,3]]
[[[[6,7,2]],[3,9],5,[[1],[0],[6],[7],[]]],[[2]],[10,[8,[6,3,5],2],1]]
[[[[6,5,6,9],10],[7,2,2,7,[7,6,10]],9,3],[6,[3,5,8,[10,4,6,1,1],2]]]
[[[10,[2,10]]],[[[6,3,5,8]],[[10,2,10,1],9,5,7]],[]]
[[1,0,[[7,1,8,1],6],3]]
[[],[],[1,[9,6,4,7],4,[]],[[],0,3,[[2,10,9,2],2,7,[],[1]],[2,[],8,8]]]
[[7,3],[],[2,8,[[],7,[8,7],[8,1,2]],8],[]]
[[],[],[[[],[1],3,[10,6,0,8],[10,4,6,9,0]],[],1,1]]
[[6,10,0]]
[[10,[5,[3,0,1,2],[5],2],[[3,1,0,2,7],5],5],[8,[[10,7]],[[10,2,10,10,8],[]]],[3,[6],5,[[6,10],[6,2,5,9,4]]]]
[[[1,[1,3,1],0,[4]],[],8],[[5],[[7,8,9],[],[]]],[[5,[1,6,6,1,0]],6,6,[[10,10,8,3],[9,8,7],[10,0,2,5,3]],4]]
[[[],7],[[[3,0,8,8,2],7,9,8]]]
[[[1],[7,3,[8,4,2,7,3],[0,1],10],1]]
[[8],[9,[4,[5,1],[6,6,9,7],2,[4,7]],2],[9,6]]
[[[[2,10],2],4,7],[[7,[],[10,7,10,6,4],[3,2,7,9]],0,6,[4,1,[4]]],[[6,1,10,4]]]
[[[[1],[3,8,3,1]],[0,[1,1],0],3],[],[],[[[]],[],[[0,7,0,0,1]],[]],[7,[9,10,[3,4,6,4,8]],[3,7]]]
[[[2],10,6,[2,2,[4]],[1,[4,9,8],2]],[[8],1],[4,10],[10,[8,[]],3,8,[]]]
[[[[4]],[5],[[2,9,0],8],[]],[[],4,3,[[2,3,6]],[[2],3,[],[9,0],[9,7,1]]],[[10,[]],[],5,[[3],[4,4,8,8,2],[0,6,6,10]]]]
[[[[4,8,0,9]],[1,1],2,8,[[10,5],[4,7,7,7]]],[[9,10,8],[],[[0,2,10,0,6]]],[2],[]]
[[6,8]]
[[9,9,[[9,8,4],[6,1,1,7],8]]]
[[],[[0],7,[[5,10],3,[],10,[]],2],[4]]
[[],[7],[[9,7,9,8,4],6,9,1,[]],[[10,[9,2,7,6],[2]]],[[2,[6,2,0,8,3],[3],[6,10,7]],[2],5]]
[[6,3,[7,3,3,4,4],[],[10,0,3,7,6]],[7,[[2,3,10,3,0],[],0,3,9],[[4],6],0,2],[]]
[[10,0,[[9,1,5],4,10,[2,3]],2,[]],[]]
[[[[10,1,5,4],9,[6],[10]]],[[[6,7],5,[4]]]]
[[7,[0,[]],6,3,10],[[7,0],9],[10,[1],[3,[],3,1]]]
[[0,0,3,[],[3]],[],[10,[2],[[5],4],[[6,0],8,5,[]]],[]]
[[],[[[4,5]]],[]]
[[[[3,0,4,3,2],7]],[4,10,1,[7,2,5,7,3],2],[],[[5,[8,1,2],[6],[0,6,6,5],[4,9,4,5,8]],7,0,9],[]]
[[[[7,10]],[[10,0],[1,9],1,3]],[2],[[2],5],[[4,[],6,9]]]
[[[0]],[],[[[],[5,1,6,10]],[],[1],2],[0,[3,1,1],8]]
[[[1,[4],1],3,[9],2],[],[1,[],[],1,[10,5,0,[]]],[[[10,3,5,2,6],8,10,[10,4,10,10]]]]
[[1,[2,[10,8,2,1,1]],0]]
[[[1]],[[[2,4,10,2],[]],3,8],[9,3,[5,[3,0],[0],[4]],6,[[9,8,3,7],4,[10,10,8],10,[6,6]]],[[[3],7,[],[10,5]],0],[5,[[3,9,0,2,1],0,[4,5,2],[6]]]]
[[[]],[[[8,9,10,8],[6,5,4,10,10],[8,10,0,2,0],[1,7,1],[]],[[]],7]]
[[],[],[8,10]]
[[],[8],[]]
[[[10],[0,[]],[3,[]],[[5,6,2,0]],3]]
[[5,7,1,3]]
[[[],[[],[4]],5,[7,[8,5]]],[[],8],[7],[9,[],1,[[7,1,6,7,10],[7,4,6],[10],7,[10,5,4,6,4]],6]]
[[2,[[0,6,1],2,[4],5],[8,[0,4,0,0]],10]]
[[[],[],10,6,[6,[3,6,2]]],[[10,10,[10,0],[3,6,2]],6],[[[5],5,1,[10,6,10,10,10]],9],[[2,0,[6,1,6]],[]],[[5,[3,0,0,6],0,7,[6,5,10,7]],3,[[0],6,[2,8,2,8],[7,2,5,8,0],8]]]
[[[5,[4,2,2,1],[0],[2,3,6,6]],2],[[1,3,1,6,[2,4,3,4,6]],2,2],[4,3,1,2],[[],[9,[5],1,9]],[[],0,5]]
[[],[]]
[[[10,4],[],0,2],[3,9],[]]
[[[],[10,[3,5,10],[2,9],6,[8,4,7,5]],[[5,8,9,2],[0],[7]],6,6],[],[3,[[5,7,8,7,1]],5],[]]
[[[0,0,[0,4,3,9,3],7,8]],[],[[[6,3,9],5,1,[7,4],7]],[6,9],[[[3,2],8,[3,0]]]]
[[5,1,[],[4,9,[],[0,5,7,6]],6],[4,[5,0,[],7],[],[0,[1,6,6,2,2],[8,1,0]]],[7,7,8,6],[0,3,7,[],0]]
[[],[[[0,1,10,0,2],[],[],10,[1,8,4,7]],2]]
[[[5]],[9,8,[[],0,[1,9,4,5],1,2]],[4],[4],[]]
[[6,[[8,0,6,1]],4,6,4],[7],[3]]
[[[[3,8],[10,2],10],[],[6,1]],[[10,[9,8],[5],[6]]],[[0,4,4,9],[3],9,4],[2,5,9,[6]],[[[],[7,6,0,7],[4,6,2,1]]]]
[[[2,[5,4,2],[8,10,9,7],[8,1,4]],[6,10,[3,1,10]],[[],[1,7,1,4,4],[8,4],[]]],[[[3,3,9,6],[0,3,9],1,[7,9,1,7]],[]]]
[[3,[[7,0,5,8],[],[7],3,[9,1,0,10]]]]
[[[9,9,1],[7],[1,8,[9,3,10,3],[2]]]]
[[[[4,5]],1,[8,[4,5,6,9]],[6,4,[4,4],[]],[8,6,2]],[1],[]]
[[[],1,[[9,2,5,2],2]],[[6,3,[10,9,2,9],3],[1,4,[3],3],3],[9,5]]
[[[0,3,3,0,[5,3,8,10,9]]],[[],[],3],[[[5],1,[4,6,7],[6]],6,[[2,5],6,7,7,0]]]
[[[],1,[5,[6,5,9,8],7,2,[6,10,5]],[[],4,9]],[[10]]]
[[[7,4,[7,6,0,3]],0,9,10,6],[[],[0,[],[0],10,[0,5,4,0,7]]]]
[[[[6]],[],[],[[],1,[2,0,9,6]],[[1,9],0]],[]]
[[],[],[[8],3],[10,2,[],[]],[[],[[]],5]]
[[8,2],[[[7,4,2,8],10,10,6,6]],[],[[[6,7],[5,4,0,6,3]],[],9,0]]
[[[1,[]],6],[7,[[0,3,4,4,5],[8,0,6,10],0,[5],0],10,[[1],9],[]],[2]]
[[[]],[[7,6,[5,10,5,3,7],8],[0,[0,8,10,4],[2,3],[8,1,2,9,4],9],[],0,[[2,1,10,2,0],[8,4,10,0],[0,1],3]]]
[[2,[[1,5,9,4],7],10,1,9]]
[[4,[3,5,[8],5],[[0]],[],6],[6,[[7,2],7,[10,5,9]],5,[7]]]
[[[6],[8,[6,6]],6],[],[[6,4,5],[6,3],[1,2,[0,9],1,0],5],[[[2,3,2,0,5]],[[8,2],[2,8,10,6]],6,[[7,5,9,5,4]]],[]]
[[10],[[],[[2],5,[2,5,3],[],[6]],1,9,9]]
[[[[4,3,5]],[[4,8],[0,7,4,10]],[[4]],4],[4,[[9,4,10,5,2],[]]],[0],[]]
[[8,[9],3,[5]],[],[[9,[],8,4,4]],[[[10]],[[],4,[5,9,10,8]],4,[1,4,[10,5,4,3,9],[3,2],[0,0,4,4]],1],[[[4,4,6,2,6],[9,4,4],[],[9,2,2,2]],9,[]]]
[[9,[4,[3],4,[8,5,1]],[[2,6,1]]],[],[[1,3,5,6],8,10,[[1,6,0,6],[1,5,1,7,6],5,4,9],8],[[[7,8],[9,6,8,9,9],3],2,6],[6,5,[[4,3,8],6,[2,9,3,9],[]],9]]
[[[],1],[[[0,0],[2,5,0],8,[10],10],[[7,7],[],4]],[[[10,2],[],10,9],[9,8,2],0],[]]
[[],[0,9],[[]],[]]
[[[[10,7],7],[4,[4,4,4,0,9],[],4,[8,3,2,7]],[],[[7,7,7,9,2],[2]]],[[]],[2,2,0,7],[[[9]],4,1,1],[[1,9,[0,4],[0,7]],3,6,5]]
[[],[],[[7,1,2]]]
[10,7,10,9,7]
[10,7,10,9]
[[],[4,[],3,[10],[4,6,8,[10,1]]]]
[[7,[[5,5],7,[],9]],[],[]]
[[],[[0,2,9,[3],5],7,[[4,8,0,0],5,1,1,6]]]
[[[1,3,[3,5,5,4,5],[1],[9,8,4,9]],2]]
[[],[6,[4,9,6,[6,9,10,5],10],[5,1,2],[0,[]]],[[[0,1]],[7],9,4],[[4,[8,3,6,9]]]]
[[[[0,2,5,5],[10,7,6,9,3],5],[[0]],6,[[3,0,1,8],[10,0,8,10],[8,10,4,6,10],8,[3,9]],0]]
[[8,[[1,6,8,4],[],[5,0],8],9],[3,6],[[5,6,6,7],5,3,9,[]],[9,5,9],[3,[8,0],[[2,9,5,7],[0,4,4],6,[9,5,10,6,6]]]]
[[[1,[]]],[2]]
[[3,[8,[7,4,1,6],9,[4,5,9,3,4]]],[[[5],5],10]]
[[1,[],[[4,3,0,3,4],[3,9,4,0]],[1,[1,6,10],10,[10,10,7,6]],[[4,0,3,3],[2,1,3],6,[6,10,3,8,4]]]]
[[[4,10,[5,6,4]],[[7,5,5,6,4],[],1,1],3,[5]]]
[[[1,[10,8],1,5,8],2,[[3,5,3]],8,5],[[[],[2]],0],[10,[[0,3,1,9],6,8,3,[1]],1,[5,4,[6,8,10],9]],[1,[9,3],8,5],[[[1,3,7]],[5,7]]]
[[[3],[2],6,[[1,6,4,7,8],[4,3,4,3,4],[0]],2],[[7],6,9,0,[[1,4,3,1]]],[2,1,[9,[4],[]]],[[[5,10],[7,2,6,5],[4,4,9,7,6],[8,8,6,7,1],[]],[],3,[],[[2,3,2],7]]]
[[6,[]],[0,7,10],[[6,[0,0,4,7],[5,3,6],[0,8,3,5,8]],[[],1,[10,0,3,8]]],[7,[[],1],[9,[10,6]],[[1,3,8,0],[6,0,7,10,5],[3,9],[0,2],1]],[10,4,[1,2,0,5,[10,10,8,9,7]],[10,[9,7],[6]]]]
[[1,[8,[3,0,7,4],4,[]]],[],[[],[[1,10,1,9,10],[10],[],10],[2,[10,6,1,1,7],6],[],5]]
[[10,3,8,[6,[8]],[[]]],[2,2,[3]]]
[[],[[2,[7,5],[0,2],3,9],[[7,3],[5,0,7]],[0,[1,3,5,5,6],10],7],[4,5,[3],[3,10,6,[10,1]],9],[6],[[8,[7]],5,5]]
[[[[5],8,3],6,1,4],[[[3],[9]],[9,[2],[0,0,9,9,2]]]]
[[0,[6],[7,5,0,[1,8,0,7,6],10],[4,10,[6,5],9],[5,[],[10,6,9,5],[9,1,5,10]]],[[[10,0,0,4,2],4,6],[[0,5,10,7,2],[],[4,0],6],[10],7],[[6],5,2,10],[[[1],[7],[2,0,1,2],[8,10,4,1],[2,8,8]],[1,0],3,[5,10,[6,10,6,6]]]]
[[[10,1,[],[10,9,1,8,3],[10,10]]],[2],[6,[9,[2,10,8,0],10,0]],[[1,6],[4,10,[7,4,6],[7,6,7]]]]
[[7,10,[10,[4],[1,1],10],7,[2,[7],[8,9,3,0,8],[6,4,4,3],[6,6,5]]],[[3,1,2],10,[5,9,[3,6,6,7,5],2,[4,2,3,8,9]],[2,[1,3]],0],[[5,9,9,[8,5,8],[2,4,8,9,7]],9,[]],[[1,[],0,1,4],9,[],[8,8,[10,9,9]],[7,5,[4]]]]
[[[],[[8,4]],[[1,3,0,10],[2]]],[3,1],[[[],[8,1,8],[4,3,7],[10,0,10,2,0]]],[8]]
[[0],[[],[[9,10,2,5,2],[],[10,4]],8,[9,6,[7],[],[7,0,1,1,9]]],[[1,8,7]],[10,[4,[0,7,7,7,2],4,[9]],[[4,0,7,1],0,[4,0],3,10],[]]]
[[3,1,[[8,1,0,3]]],[[0,1]],[[[4],2]]]
[[2,[[3],0]],[],[[],[],4,6,7],[[],2,[1,5],3]]
[[[[4,2,8],1],[[9,9,3,7],[2,6,5,6],4,1,[10,7,7,6]],5],[]]
[[[5,[6,8,8,1]],6,9,[0],5],[[[6,5,6],[5,1,9]],0,[5],[[3,4,6,8],9,[7],5,[8,1]],7],[[1],[],[]],[5,[[5,5,4,3,6],8,0,[1,7,8],[1,6]],[],[[4,7,2,7],[7,0,4,9,9]],[2,[8,3,4]]],[[[5,8,1,9],[0,7],3],[0],8,[[8],4,4,[10,6,2],[8,5,5,7,3]],3]]
[[[4,[0,8,10],[7,10,2,8],[],0],7,[[3,2,3],[9,6,0],8,[],10]],[[6,[3],[]],[1,[1,9,9],[4,5,9,1],[]],[2,6],[[8],[6],3,[6],[10,3]],[0,[0,4,3,3],[1,3],10]],[7,9]]
[[[9,[6],3,[],[0]]],[[[7,6,9,8],7],[1]],[[[8],6,[0,1,7],0],[9,10,4],[[6,3,3,1,6]],8,8],[5,[[4,2,9,3]]]]
[[],[2,3,4],[8,[7,[],3],[[2,10,5,10]]]]
[[],[[[],5,[0,3,0,4,5]]],[[7],[],[6,[],[1,10,7,4]]]]
[[[[],[4,7,3,0],[10,4,1],0],9,[7,[10,4,7,4],4]],[10,[[0,3,9,8],[10,4,8],6,[7,6,8,3,5]],[1,10],[[]]]]
[[6,[1,[7,10,4]]],[[[9,4,0],3],[],9,6],[10,[[0,9,1]]],[9],[]]
[[[[8],[5],[8,9],[8],10]],[[8,0,1,5],7],[5,4,[8,[1,1,7]]]]
[[],[3,8,0],[[[3,1,10,1,9],8],2,[],10,10],[2,[1,2],2]]
[[1,[]],[[4,2],9,[5,8,7,9],[2]],[10,[],6,[10,[]]],[[[9,10,0],2,6,2],7],[[10,1,[1,2]],[3],2,[6]]]
[[[],[],6,10,[8,6,[7,0,7],[0,1,0,8],[6,6]]]]
[[1,0,2,[7,2]],[[1,[10,6,1],0,2],[10,[9,9,8,6],10,[6,2,8,1]]],[[[1,0,3,1],4,2,3],[[8,7],1],1,[[],[3,4,5],[]],[[6,5,3,10],[8]]],[2],[0,3]]
[[6,[[],1,8]],[4]]
[[1],[],[4,[[5,10,2,3,4],[3,2,10,0,2],[]],[[],[]],[]],[[],[[0,6,9,6,5]],[]]]
[[0],[[[3,1,6],4,7,0,8],[6,[9,9,10],[1,1]],[9],6],[]]
[[[],[]],[2,0],[4,8,2],[[[0,3,6]]]]
[[[[1],[9],2,[5,10,8,3],4],9],[[],[[1,6,8,9],2,[5,5,7],[0],8],[[1,6],[10]],[7,[]]],[],[5],[2,[],[2,[10,3,2,8],[3,8],[]]]]
[[[8,7,[7],[9]],5,5,0],[[[5,0],[],1,10],[0,[10,6,8,2],[8,6,5,8],3],6],[[[],[4,6,8],[9,3,2,2]]],[],[8,[],[10,7,8],9]]
[[2,4,6,[[8,4],[3,7,10,10,9]],[[],9,[],[2,8,10,1,5],6]],[[[10,8,10,10,7],8,6,[7,4,3,9]],[]],[1,[2,[9,3,7,9,8]],7],[0,0,[[1],[10,10]]]]
[[[[1,2],[0],[0,1,5,6,3]],[[7,1,8],[4],6,[4,10,1,7],[7,1,6,3]]]]
[[[[6,9,1,10],[10,10,4,7]],9,9,[3],7],[]]
[[[10,[8],10,1],[[8,2,6,8],[6,3,2],0,3]],[[[5,10],[9],6],[[5,5,3],[],[10,0,4],2],[[],10,4,8],[],6],[10,[],0,[[],[2]],[7,8,2,[5,0,10]]],[5,[4,[6,0],[0,2,8,3],4,[4,9,4]],2,[[6,2],[3,2,0,3],[],8,10]]]
[[],[8],[8,3],[]]
[[],[2,[4,3,6]],[8]]
[[5,[7,0,[6],9],4],[[[1,7,2],[4,4,1,10,9],[8,2,0,7],9]],[[[6,3,1,3],[7,7,4,7],[],[1],10],8],[[],[1,6],6]]
[[],[10,3,7,3,[1]],[[3,9,[9,7,5,7]],3,[0,[0],4],4,[8]],[0]]
[[8,[],5],[[[4,6,0,3,7],2],10]]
[[[[8,4],8,[1,8,0,4,7]],[[1,8,3,7,8]],[0,4,[7,9,8,5,5]]],[[7],[3,[0,6],1,7,[9,6,1]]],[6,2],[0,9,[[7,8,2,4],4,3,8,5],6]]
[[10,[3,[4,0,8,3],[2],[5,6]]],[6,[4,[6,3],5,[8,10,7]],[[],[5]]]]
[[[[],[3]],0,[],5]]
[[],[5,10]]
[[8,[[1,9,3,8],2],[[5,3,3,4,4],[3,4,9],[8,3,6,2,6],4],0,5],[1,1,[[8,2,5]]],[2,[[5,8,0,1],8,10,[1,5,5,2]],[[],[]],[]]]
[[[8,[1,2,9,8],4]],[[[9,3,1,7,7],5,[6,7,5]],6,[[1,0,10,5,2]]],[2,[5,9,5]]]
[[10],[5],[2]]
[[8,[2,[1,3],8],[4]],[6,[[1,8,1,10,8],2,[9,7],[]],9,7],[3,[4]]]
[[[[9],[5,4,10,3],[3,4,7,2],[7]],4,4,8,4],[9,4,[[2,7,5,3]],[2,1,5],2],[],[[5,9]]]
[[[],10],[3,[[4,6,10],[7,9],10,5,0],[0,7,[],0,[1,2,6]],[0],1]]
[[[[7,8,6,9,3],3,[1]]]]
[[[[2,0,2,2],[7,5,3,0],[5,7,1,9]],6,9],[10,1,[[6,7,0,5,9],2,3],[]],[[[10,10,8,8],[],[],[2,4],[6,6,3,3]]],[8,[[4,2,3,7],5,0],[10,2],[[7],[10,8,0],0],0]]
[[[[2,10],2,[0,7,1],6],4,[[6],6,[2,9,2]]],[[[1,4,8],9,[1,0,6],[8,9,0,10,2],7],8,[[7,4,4],[10,1,6,1],5,10],5],[[],6,[[7,1],4],5],[[[2,1,4,9],[5],[8,8],[0,3,9,0,3],[9,0]],4,[1,[9,10,1],[],[3,1,3],[6,8,3,9]],6,1],[[[1],[6,5,10]],[3,0,[3,2,10],2]]]
[[[[0,8,1,10,10]]],[10,[]],[[7,[3,9,5],[2,7,0],0]],[],[]]
[[],[0,9,3,7],[],[2,8]]
[[10,2,6],[[[9,7,10,6,2],7,[3,7,2]],3,3,[0,[1,1,0,9]],0],[8,5],[[6,[],4,6]]]
[[[8,[],2,[],[6,4,8,1]],[6,7,4,[0,6],7],[],6,[9]]]
[[[[0],[10],10]],[2,[[5],0,[7,3],6],[[4,9],7,4,[]],[[3,2,4,0],[],[],[3,4,7,7,1],[7,9]]],[],[[]],[[[],10,[],9],7,1]]
[[[[3,4]],1,2,[3,[9],1,5,[3]]],[[4,[10,6,4]],10,[[7,0,3,10],9,2,[8,10,3],10],[7,3,[7,3,4],0,10],[[],[0,3],2]],[],[2,[[7,3,4],[],3,[6,1,0],2]],[[],9,[[4,8],[3,10,0]],2]]
[[6,2,8,[[],7]],[],[[1],[[3,6],9,[],[6,7,8,1]],8,[[2],[0,9],9,5]],[]]
[[[[7,7],[]],[],6],[[10,0,3,[9,6,2,4,8],[]],10,3,[[1],[7,5,8],0,[9,10,2],[0]]],[8,[[9]],1],[5,[4,2,5],9]]
[[[6,[4,5,9],7,2],6],[4,2,[[9],[],[],[0,9]],2,[[0,5,4,0],6]],[],[9,3,[1],7,[2,[],4,0,3]]]
[[8,1,[6]],[[7,7,3,[1]],1,[2,8,10,8,3],5],[[[1,9,9],2],[[7,8,6,9,5],[7,6,1],[2]],5],[3,[5,3,[10]]]]
[[],[3,[[],6,[3,8,1],2,5],3,[[0,0,5],10,[]]],[]]
[[],[[],3],[[],[]],[[[7,8,9,1],2],[[0,1,10,3,8],7]],[[[0],[],[],[4,10,3,6]],[],10,[1,[],10,[9,5,3]]]]
[[],[3,[[],[0,8,1]]],[[[9,5,5],9,[10],[4],[9,1]]]]
[[6,[[5,5,3,0],[2,7,5,5,4]]],[[8,[0,7,5,6],[7]]]]
[[[5],7,[3,9,[8,0,10]]],[],[7,5],[5]]
[[[],[],4],[0,10,[[4,4,5,6,5]],3,3]]
[[3]]
[[1,[2,8,2,4],[8,[],[8,3,9]]],[[0,[0,10,3,4,4],7,6,[]],[],9],[[7,9],[[]],1,10]]
[[[[7],0],10,5,2,4],[[10,[],2],[[5,2],0,[10,6,5]],1,9]]
[[5,7,[[10,8,2,10,8],[8,6],8,[5,1,4,5]],[],[10,[1,9]]],[[2,[5,3,2,10,6],[5,2,0,3],[6,10]],[[5,5,1,5],5,[9,3,10,6]]],[[0],7,3,[[],[],8,1,3],[10,[2,8],4,4,2]],[6],[4,3,4,[8],5]]
[[[[2,6]],0,0]]
[[[0],9,1,7]]
[[8,2,10,3,2],[7,2],[[[4,9,8,3],[],[10,3],1],5,[5,[3],[4,9,4],[2,6,6,2],[5,4,10,3]]]]
[[0,6,[3,[]]]]
[[[[7,10],7],8,[],10,8],[3],[],[9,4],[[[10,5],[7,2],[6,3,8,5,8]],8,6,3]]
[[4,0,[[10],[7],[],10,3]],[],[[[6,7],5,9,[3,3,4]],3,[],[4,10,6,2],4],[[2],[[7],[3],[3,2,10,9]],[2,6]]]
[[[[9,0,2,9,6],[9],[10,3],6,[1,10,5]],[[4],5,[4,9,6,7,4]]],[[]],[1,5,[]],[5,7,9,[[],[],7],[[8,7],[0,8,4],[6,6,4,7]]],[[4,[],1],2]]
[[3,[[8,7,3,4,7],[7],[9,6,0,2]],[4,8,[0,0,5,5],[]]],[],[7,[[0,10,2,9,2],[10],[0,1,7,9,4],10,[6,7,8,4,8]]],[]]
[[],[3]]
[[],[],[[[1],[8,8,10,9],[1,7,6]],7,[[7,5,8]],[[8,5,7,0],5,[6]]]]
[[5,8],[7,5,9,10,[[8,7],8,[],4,[2]]]]
[[],[[10,8,6,[6,9],[7,7]],[9,[5,5],2],5,[[10]]],[]]
[[[[],[1,2]],[[],[9,5,5],7,8],0,3],[4,[3,1],0]]
[[10,[[8,3,9],10]]]
[[[[4,10,3,8],7,9],[],[2,1,[5,0],[4,10],3],5],[8,[[3],2,9,6],6],[],[[],[6,3,[9,10,5,8,10],5,[10,4]]]]
[[[[],7,3]],[],[[10,[10,4],10],3]]
[[[[7,6],[5,6,0,5,2],[7],1,8],6,[[10]]],[],[1,7,6,1,5],[0,[[0,5],3,[1,4],[],7],[[9,0,3]],[[9]],[[1]]]]
[[4,[],[],[5]],[[[],[1,3,0],[10,3,5,2],2,[4,2,0,8,9]],[0,[4],[],[2,3,3]],9],[3,[1],10,5],[[],[7,5,[10,9,7],3,[]],10,[8,[]]]]
[[8],[[8,[4,3],0,[2,4,10]],4,8,8],[[[2,1],9,[],[7,3,5,3,8]],6,9,10]]
[[[[0,4,0,6]],5,[10],[[4,4,9,9],[1],[2,4,0,0]]]]
[7,7,7,8]
[7,7,7,8,9]
[[[[7],[2,5],[4,1,10,9]],[[],[6,0,2,1],[0],[7,0],9],8,[6],9],[4,[],[]],[2]]
[[7],[[6,6]]]
[[10,0],[6,2,10],[[[9],7,[6,7,9,1],9,[5]],[6,3,4],[],[[7,1,4,3,9],7,[5,3]],4]]
[[8,[],6,[7,[],[9],[8,9,5,0]]]]
[[0,[5,[4,1,0,4,8],[7,5,0,4]]],[8,2],[]]
[[[[7,4,0,6],2],[[1,0,5],5,6],[6,9,7,7,1],8],[9,[[7,3,0,10],[3,10,1,7,0],[7,9],[],[4,2]]],[2,6]]
[[1,5,0],[1,[]]]
[[],[[2]]]
[[1,2],[0,[[5,9,5,0,0],10,3],7,[[10,5,5],[10,6,9,3,10],0]],[[[9,1,10],5,[0,7,5,2,10],[0,1,2,5],[2,2,6,2,9]],6,[[6,10,1,1,5],[6],4,6],1,7]]
[[[[4,4,7]],2,[[],[0,8,3],1,7,[]],2,[2,8,[],[1],5]]]
[[[],4,[7,[8,0,6,0],[1,2,6,5],[8,10,8,3,3]]],[],[[0,6,3,8,[]],9,9,1]]
[[[],[[9,2,1],4,[]],[6,[4,10,4,3,8],[10,1,4]]],[[[1,5,7,2,0],3,[3,5,5,1],[]],3,[],2]]
[[0,1]]
[[],[[]],[9]]
[[[8,[],[4,5,10,6]],[],[[7],[10],10]],[9,3,[[4,1,0,9],[0,9,8]],[6,0,8],10],[],[]]
[[[[9,9,0,5],1,4,6,[4,9,6,10]]]]
[[[1],[3,10,[3,6]],[5]],[[[],[10],[7,9,5],[],0],4,[[],10,[],2],10,[[7,1,9],7,[0,6,8],[10,4,6,9],[0]]]]
[[[],[[],[10,9,8],[3,6,1,0],[0]],[8],[[],[8,8,7]]],[[]],[]]
[[0],[[[],10,6,9,[7,8]],2,[]],[[[8,3],[6,4],[],[5,9,5,5],[2,10]],[7,4,[],8,[9,5,10]],5,[5,[6]],[]],[3,6,[[10,0,0,10],9],2,1]]
[[0,[9,[1,0],[0,3,4,10],4,[8,1,1,8]]],[[[9,1],[0,5],[2,3,0,7]],[8,[10,9,9,4]],[[]]]]
[[[[10],4],0,9,7,7]]
[[],[[10,2,[2,2,2],5],1],[[[3],[7,3,9],9],1]]
[[3,2,[[7]],2],[6,1,7,[5,[6],2,9]],[[0,[6]],[[0,4,1,7,0],[8,4,9,7,8],[],8,[3]],1],[],[]]
[[1]]
[[],[[[8,5,0,6],3],[[],[3,10],[7,1,1,9,6]]],[],[[[5,9],[2,7],[4],10,6],[7,[0,7,10,9,1],[3,0,9,2,10],8,[6,4]]],[[6,[],[0,3,8,0],2,9]]]
[[[[7]],0,2,10,[[10,2,9]]],[1,[[],10,[8],0,[5,3,8,9,1]],[10,8,[0,9,3],1],2,[4,9]],[],[3,[[9,3,5,4],[],3,[2],[4,6]]]]
[[7,5],[],[8,[[7,9,0,2,9],10,[0,8],[1,6]],5,2],[4,10,8,3],[6,8,[[8,5,7,5,1],[],[5,8]]]]
[[],[[],[],[4,[8,9,5,8,1]],5],[[[6,4,10],[7,4,7,0]],10,1,[[0,8],5],[10,[1,1,8],2,[4,4,1],6]],[]]
[[[[2,4],[9,4,8],10,5],2],[2,[[4,6,7,1],6,4,[10,8,4,2],10]],[],[[[5,0]],[[],0,[1,8,8,9,3]],9,[[10,9,2,6]]]]
[[3,2]]
[[[0,[10,1]],[[],[4,8,8,8,9]],7,[2,0,[2,6]]],[],[3,9,3],[[4],2,[[1,3,9,5,10],[6,0,5],0],[6],[2,0,[]]]]
[[0,9]]
[[10,9,[[0,10],[]],10,2],[3,2,[7,[7,4,7]],[9,[1,10],1,[7,8],[7,7,3,9,2]],8],[[[9,6,1],7,2],10],[],[[2,6,[5,0,3,7],[8,4],1],[5],[3,[8,8,1,6,1]]]]
[[8,[1,[10]],10,[10,[],1,3],[6,3,1]],[[],5,[0,3,[9],[0,4],[3,5,10,2]]],[4],[[[1],4,[6,7],0],[[],2,[9,8,0,5]]],[[[0,4],1,[6,0,6,8],[3,1,0,6],7],[10,[7,6,1,0,10],4,[9,7,1,7,0],[]],8,1,5]]
[[[[],[],[10,1],[1],[3]],[[5,5,4,3],6]],[2],[[[10,9,2,6],[4,2],1,[5,10,8,3]]],[]]
[[[[5]],[6,[5,8]],[[2,10,6,10,2],2]],[[[5,2],4],[7,[9,10,6,8],[],10],[[4,6,4,9,1],[1,8],5,6,[7,8,0,4,7]],[],[4,7,[6,10],[4,10],[9,0,2,6,2]]]]
[[],[7,[[9,10,9],0,[]]],[2,[[3,0,10,7],8,4,5],1,10,[]],[[4,1,7],[[],[],[5],[9]],[0,5,[5,1],4,[]],[[],10,1,10]],[5,[4]]]
[[[5,0],[2,0,[],[10,6,3,0,2],[1,2,7,9]],10,0],[[[5,4],6,3],5,3,[[6,10,8,7,8],[7,6,0,3]]]]
[[10,[6,[],[3],4,[7,4,0]],[[],[2,1,1]],5,5],[8,2,8,4],[[1,2,[3,3]],[[],[10,2,8]]],[2,[],2,[5,[]],7]]
[[[[7]],2,1,[1,1,[7]]],[[7,[],[3,3,10]],[6,3,[2,0,10],[3,1,10],5],3,10],[6,9],[[[9,5],[1,8,8,7,2],10],[9,[5,3,9],[9,2,4,6]],[7,[6,9,9,0],7],10,[10,[],6]]]
[[]]
[[],[[10,[],[10,8,1],[0]]],[1],[[]],[[[4],[7,2]]]]
[[[]],[7,[[10,4]],[],[8]],[[6],[[4,7],9],[7,1,7,[7,1]],8,5]]
[[5,9],[[],6,10,1,3],[3,[8,2,[],[],[0]],7,5,5]]
[[[7,10,0,[3],[]],[]],[[[3,9],[]],[[2,3,7,4]],3,[8,1,[6,6,9],[6,7,6,9,5]]],[[[5,3],9,[],3,9],[9,7],[[],[1],[],8,10],9]]
[[6],[[[8,8,10,4,5],4,[2,5,7,2],0,[1,6]],0,[[0],3,[3,10,7,4,7],8,[5,3,2,3]],8]]
[[0,[],10],[[[4,10,3,10,8],6,9,[9,8,1,4],[0]]],[[[0],[]],9,[[2,10],6]],[]]
[[10,1,[[4,8,2,10]],10],[[],[],10,[]],[[[0],[5,1],1]]]
[[],[7,[[],[3,3,1],7,[2,4,10],[]],5,6],[2],[2,1],[]]
[[[],10,7,5,6],[],[[[7,1,10],6,2,[4],4],4,[[0,4,2]]]]
[[4,[8,6],2,4],[[[9],[10,8],10]],[[[8],5,[9,7,3,1,1]],[3,9],[10,3,[],10,5]],[8]]
[]
[[[[1],[9,6],[8,0,7,9,1],[2,2,0,7]],[[7,5,0,9],8,7,[]]],[],[[[4,6,8,5,6],[],[]],[4,[8,5,6,3],5],[7,[],2,0],9],[2,9,[[0],[1],[5],[8]],8]]
[[9,[[],2],1],[],[2,8,[10,8,0],6,3]]
[[[[1,6,3,10]],4,0,4],[],[0,[],5],[],[[[2,10,8],[4,2,4,10,2],1],4,[[4,2,1,0]]]]
[[[],[],[[0,5,1],5,[0,4,1,3],[9,7,1]],3,10],[[[0]]],[1]]
[[5],[[3,10,[7,10,0],5],4],[2,[[8,10,0]],[[9,0,4],6],[]],[6,10,2,0,2]]
[[[0,9,[7,10,9],[6],6],8,[1,[],[],[9,5,5],4],[6,[9,6,6,7]]]]
[[1,8,4,2],[10,8,[9,[8,4,1,1,8],10]],[],[2,9,[5,[1,5,3],[9,3,5],8,[]],8]]
[[6,5],[[[4,6,10,5,9],10,[10,7],5],[[8],[3,0,7,8],[10,8,5,7],[7,6,4],4],[5,10,[],6]],[7],[]]
[[[[4,10,8,5],[0],8,[0],9]]]
[[8,0,[[5,0,6,3,10]],7],[9],[[],3,0,10]]
[[],[6]]
[[8,1]]
[[],[9,4]]
[[],[[5,4,1],7],[[],4],[],[3,1,[[1],3,4,2]]]
[[[[8],[6,0],0,1],4,[3,[6],1],1,1],[[[2],[3],[]],[[1,6,6,8],8,[8,6,7],[1],10],4,1,7],[[2,[4],[8],10,[10,2,7,1,9]],3,6,[4,3,[1,10,8]],[]],[[1,[9,9]],10],[8,2,[4,[8,10,5,5,2],0,[8,7,0,9]]]]
[[[[9,8],[2,9,8,6,6]],[],[6,[0],[8,10]],5,2]]
[[[1,5,[3,1],1]],[],[[9],1],[[[5,10],[]],[0,9,0]]]
[[[9,[8,6,7,0,8],9,[4,5,3],[10,0,5]],10,[]],[]]

134
src/Year_2022/files/P14.txt Normal file
View File

@ -0,0 +1,134 @@
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
494,16 -> 499,16
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
492,52 -> 496,52
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
510,123 -> 515,123
492,48 -> 496,48
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
501,54 -> 505,54
513,120 -> 518,120
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
483,54 -> 487,54
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
532,129 -> 537,129
501,16 -> 506,16
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
520,120 -> 525,120
489,50 -> 493,50
498,19 -> 503,19
505,151 -> 505,152 -> 518,152 -> 518,151
510,73 -> 514,73
516,77 -> 520,77
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
511,129 -> 516,129
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
524,123 -> 529,123
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
507,75 -> 511,75
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
514,149 -> 524,149 -> 524,148
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
504,129 -> 509,129
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
504,77 -> 508,77
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
516,117 -> 521,117
514,149 -> 524,149 -> 524,148
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
507,126 -> 512,126
513,75 -> 517,75
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
505,151 -> 505,152 -> 518,152 -> 518,151
510,77 -> 514,77
528,126 -> 533,126
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
518,129 -> 523,129
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
491,19 -> 496,19
505,19 -> 510,19
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
506,135 -> 517,135 -> 517,134
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
506,135 -> 517,135 -> 517,134
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
497,13 -> 502,13
489,54 -> 493,54
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
505,69 -> 505,70 -> 511,70 -> 511,69
487,45 -> 487,38 -> 487,45 -> 489,45 -> 489,42 -> 489,45 -> 491,45 -> 491,39 -> 491,45 -> 493,45 -> 493,39 -> 493,45
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
525,129 -> 530,129
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
505,151 -> 505,152 -> 518,152 -> 518,151
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
521,126 -> 526,126
512,106 -> 512,108 -> 505,108 -> 505,114 -> 518,114 -> 518,108 -> 516,108 -> 516,106
495,50 -> 499,50
495,54 -> 499,54
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
508,103 -> 508,93 -> 508,103 -> 510,103 -> 510,101 -> 510,103 -> 512,103 -> 512,96 -> 512,103
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
498,52 -> 502,52
517,123 -> 522,123
514,126 -> 519,126
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
495,22 -> 495,25 -> 492,25 -> 492,32 -> 501,32 -> 501,25 -> 499,25 -> 499,22
505,69 -> 505,70 -> 511,70 -> 511,69
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
512,90 -> 512,87 -> 512,90 -> 514,90 -> 514,86 -> 514,90 -> 516,90 -> 516,87 -> 516,90 -> 518,90 -> 518,82 -> 518,90 -> 520,90 -> 520,81 -> 520,90 -> 522,90 -> 522,86 -> 522,90 -> 524,90 -> 524,84 -> 524,90 -> 526,90 -> 526,82 -> 526,90 -> 528,90 -> 528,82 -> 528,90
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
520,165 -> 520,160 -> 520,165 -> 522,165 -> 522,163 -> 522,165 -> 524,165 -> 524,159 -> 524,165 -> 526,165 -> 526,159 -> 526,165 -> 528,165 -> 528,155 -> 528,165
505,69 -> 505,70 -> 511,70 -> 511,69
505,57 -> 505,59 -> 498,59 -> 498,66 -> 509,66 -> 509,59 -> 507,59 -> 507,57
502,138 -> 502,141 -> 498,141 -> 498,145 -> 514,145 -> 514,141 -> 507,141 -> 507,138
486,52 -> 490,52

View File

@ -0,0 +1,35 @@
Sensor at x=545406, y=2945484: closest beacon is at x=772918, y=2626448
Sensor at x=80179, y=3385522: closest beacon is at x=772918, y=2626448
Sensor at x=2381966, y=3154542: closest beacon is at x=2475123, y=3089709
Sensor at x=2607868, y=1728571: closest beacon is at x=2715626, y=2000000
Sensor at x=746476, y=2796469: closest beacon is at x=772918, y=2626448
Sensor at x=911114, y=2487289: closest beacon is at x=772918, y=2626448
Sensor at x=2806673, y=3051666: closest beacon is at x=2475123, y=3089709
Sensor at x=1335361, y=3887240: closest beacon is at x=2505629, y=4282497
Sensor at x=2432913, y=3069935: closest beacon is at x=2475123, y=3089709
Sensor at x=1333433, y=35725: closest beacon is at x=1929144, y=529341
Sensor at x=2289207, y=1556729: closest beacon is at x=2715626, y=2000000
Sensor at x=2455525, y=3113066: closest beacon is at x=2475123, y=3089709
Sensor at x=3546858, y=3085529: closest beacon is at x=3629407, y=2984857
Sensor at x=3542939, y=2742086: closest beacon is at x=3629407, y=2984857
Sensor at x=2010918, y=2389107: closest beacon is at x=2715626, y=2000000
Sensor at x=3734968, y=3024964: closest beacon is at x=3629407, y=2984857
Sensor at x=2219206, y=337159: closest beacon is at x=1929144, y=529341
Sensor at x=1969253, y=890542: closest beacon is at x=1929144, y=529341
Sensor at x=3522991, y=3257032: closest beacon is at x=3629407, y=2984857
Sensor at x=2303155, y=3239124: closest beacon is at x=2475123, y=3089709
Sensor at x=2574308, y=111701: closest beacon is at x=1929144, y=529341
Sensor at x=14826, y=2490395: closest beacon is at x=772918, y=2626448
Sensor at x=3050752, y=2366125: closest beacon is at x=2715626, y=2000000
Sensor at x=3171811, y=2935106: closest beacon is at x=3629407, y=2984857
Sensor at x=3909938, y=1033557: closest beacon is at x=3493189, y=-546524
Sensor at x=1955751, y=452168: closest beacon is at x=1929144, y=529341
Sensor at x=2159272, y=614653: closest beacon is at x=1929144, y=529341
Sensor at x=3700981, y=2930103: closest beacon is at x=3629407, y=2984857
Sensor at x=3236266, y=3676457: closest beacon is at x=3373823, y=4223689
Sensor at x=3980003, y=3819278: closest beacon is at x=3373823, y=4223689
Sensor at x=1914391, y=723058: closest beacon is at x=1929144, y=529341
Sensor at x=474503, y=1200604: closest beacon is at x=-802154, y=776650
Sensor at x=2650714, y=3674470: closest beacon is at x=2505629, y=4282497
Sensor at x=1696740, y=586715: closest beacon is at x=1929144, y=529341
Sensor at x=3818789, y=2961752: closest beacon is at x=3629407, y=2984857

2500
src/Year_2022/files/P2.txt Normal file

File diff suppressed because it is too large Load Diff

300
src/Year_2022/files/P3.txt Normal file
View File

@ -0,0 +1,300 @@
NLBLfrNNLvqwbMfDqSjSzzSJjjggcdVs
lTRGPPZnRRHszcsZdSsccZ
CFTTFtFHTtCtDDzrmBtrBD
BJldgBWnRgWNWtllSlWShMcLcVSvVjbVVVvDVVVL
HFGFwqQPQGwHrTFpwmThMbDDVcVmLvvshj
HrpHrGPZZCQrfqlNdtMlzfMltlgn
hQLhBtBtQNQjBjNLvtLjzLJpWbjJdppSwjpCCplllJdj
FGFsmccSPTVPfVVHpJJgwlJwwWJWpCmR
sFPfPFHZTHScnzBttqzvQzqZ
MNTGMTnGWvTwwwnZhNZnWDPPdSjqsSPWjmBCSBWS
RJrtVfRlLrfHgblHJVBjqqFmjCdBJjDmJdSD
tgRftftRcRLftrpHpflHlctVwNNvZNcTwZnznQzwTzmhQwQh
sQPpQpQhnlNsJpJSQphHcZffLfgLHSfHVHHFZZ
zBCvrrWzTwqzcbtbqCbrCCwWLMfVVmmHVfqHFHFgGHLZGmVG
rvvjBzTjrwQRcpjNsRss
RrnNWJJNrplbLJBBWWZstVpmtZftptfmfsMM
GHjnwndzGcqjGgqtfMsvfsMmMvZZ
cQgwHTPjPwGwjdHHTjwccQBDLlWNrLJLNrnWrBRBlS
BBBQJGQslJtcGqfgHpPnfftwqw
RDMLDWLNTLTTNjNgvdqbqRnwqbfwPRzbVHHV
mgdNgdTSMWmSQsQsBQcFSQJr
RqQhRpsdqnvdlPBfzdVlVJPM
SSZsDmSmssGZbJVwPBSzBBMfCf
LFFNGLgLHFWrWHFmLWrLWLrsQshqQnspNcRTjnpTtjRRjh
DshNcgmDVClpCfRs
TnZjTWrtrqtWnGTrbqqTTZZwMpSVRSflRMflMjRCSfpJMSJl
wHbGHrWHWrbnbFtTZcLzLgHzzgcmpNzzzz
hfWQdhQHmPWhqdhQqpdQqWtzvwtCMCRvNCwNzMtNsHsz
lBLnJZLlFBlZjGFbVjjlJRSMzzSszzpGpstSpvMNtN
rVZVgZVgLnjFVlVQDDfhcfmWrQdTfp
zqTrVZvDLGdMMLtcpR
bClsCmQbjFtjljllntsGjGWPdcRWhMppPcpddR
mbggmBtQtlVqVzgrzDzv
LtpnGnGNFtbGntbbQPhTlRpRTzDlcClPCl
mSZHgZMhZVmWPHccllzPzcCP
sZhWvSsBqmBSqmgMqWZjQjfjrLbvGbtNFjvLtb
TvMZMTTzWHNNFPsNbvDG
dhVmwfhcnhRnRfdlGsDNNGqNLFNNTGdq
JTcVVTlThmfmrrWQZHMrpZtJ
zGMBMzPNDNcNZLBzcmLvbHltDbWjbthhqvvHtg
rdJSQSTfQrRnsRfJJQHhWgbhtQblgHWgWH
nTrlpVfSpswsrsTSdnRsfnJJPBZmMBcBZZGmZBmBMmcCNzpC
nfzcnSlRJJScTZTzJZnsNjNrHQqrWBjsBRdWBr
LgHwDLwmMDCphttsqDjNNssBGNsGQB
hvwgwvghPbpggLtmmbCmSfzFfVSlZnncJTPZHSnF
DbsnzDCsBPHDQHFD
GGcWWnrGSjBMrMlhfr
GNpqddqWLqdScWqcVnCswmzJRVzVVbJp
NzPpPBppzjbpCrrQhggqvwwqRwrwQl
SDddnLcDLncghQBWvvgR
tfSLLBmmmDJGFDLJmMMsZZssZzPTzjTpzZzP
RRCrJbSfNrRQjvvHppmpbZvv
llhVGGGMPVTMlTdVzcPVHZmvqpvqZFhHFqmjFrHF
ccGlzPMVwBGfBrLCDJrDLf
VcVGZZVMlncjTqcjsWWf
hzJRtRphQJtBRhzFpdrfrqrFsqswWrmsTmFr
LJHzBQJRhPHpzQWBRzphHRQSMZlnbGMVMVnLMGbDvvbMVl
sVdHFFmhPGVTdFmVFsgPdBBtBZjSpGSvtpBztpGjzt
HCHwlncHfpnjSSpBzz
wWQwlWWlfWcQMfCrfwTRDrHsDmPDgFVTRVsV
qllqNlmglNNdzLDddGGNSHScMHMWPcPSqptQSSHJ
bhhbChVsRjwGRCbZCcSZPpPMMWJSPMtPpW
BhTVBsbrhCTrhfbrCTTTRRfngzrnnLvdzgGvNzdzLNvrLm
nNwNPnjzPsNRHpFDHLLsLVHF
MSBMgMZmWqScCFGWWDFGVvwW
JBghBwTrgchrTbQRjztQPQbfhQ
PPBpBHGfBHGpRRPDLMmnscRLdnzmdw
bMFVTNVTVjbbrCWCsndsDwjDzwmwsnms
QQbJrCCMWCVCVMShHGPQlHhghGlt
dBQMdJQHbWMWHZLRRsmPVJmppJqG
FSrzFnPnGNrlsGps
FvwTnCzDznTwzhtHjZvbdbjQfZgPMv
gJjVQzLgLvPJdMrsDsQtdQrw
hBpmWfSfHCWNfmSppMrDDMwwMbDMlMcbcB
fhphGpfNCpNSNRhGhqPVvjvjjjTzVRPzLr
TsnznnrZsNwGNrbWbSvVgWzVSbgv
mBBFBFQFBhSHggVnmvfW
BJFcRLFFBhLpMNcdNCscZNnqld
vqwQGZNSwNQHQQZNSwvpwMdlnMfBClZBTzBnTfTJCB
sbcrjscccmPmrtFRrtcsPssmVJBfTCldnJJdVzMlBnBJTBlR
tbDmhtdDrPjbDcrDWSHGqQqvHpWSgNHh
VVWSwCpWTVWWwVbbvPJDwvDtwtMttLtH
nfNLcNsfZNnGggZNNqGlMPPDDrlvGHHrtPJMHP
fhgqfznczcjpVRjFLSLz
pvcBCrPrcPBpTccGjrQhQdwMsqdGQddswqhS
FggLnnFzzNFNmstlShMVwQtsgq
RnbzHmNfRHmmnLzRnLDRZHRrCPJBvCWWpcjvJpwWfjwvrc
HfdzzrGfRrQqrGVnznQvgjcjhhlMTlFjchFMVL
swwWWBPNwPwZbvPMFTLjTlgP
BJBJJDZtSrJqnFFfFJ
lqqMSMBMttLMjtHjqjrdBnSfcpfwCTGbCffwCcwbSfTcJf
gVFhVRZgVzJshFZVTbbFfvpcwCTCfbcG
hRWZzRVVZmsWJVRQsQmqqndQrnqnQLqnQqtBlr
SgPhCGGzczlCDVDWrlTL
jvdvFvjqwfdrNfNDlzLzRW
jzjFHnvdtdnmHZttqmbFdFqFsSBJspcgcSPQpsQPBPgpgmSG
qqmQFmrbbWWrtqTVVrgLJTzzNzrJ
nCjMGncHMJvzmmHmVV
DpjPDGwnmDhbwQqZtqqW
JlTTLLMRqlMlJMJgBLLnnCZCFrrrdTGrjPjGFr
vwVpHVHVwvHmQVsFFPZQrjrrrZPNdn
wtvmtwvpmbwVvssPflSBlRBqLMlLJBzSLb
rtrTtBwTsfjZrnqJQplNTcqqlvQT
sHzdWFzSzmGDDRVGVDGHWVhvcLLpNpqJCQqLhClhlcvqpC
VRbmRmRHGdsnggbPMMftZB
LMhtCSSftfTzdCdMhSCdMsQGQbGnbGQQMQggDNgR
FjFHWJwJjRNvQggwnDsm
plBVRRqWRHVHWFTdTthTLCfzflzh
VjVdrHFWPmTjRGSRGq
DMWMZDncQDcfpQzmTQTSQRGTGqNz
WMnsCZJCffDnfCfvnZCPhwVrHBVrBlVHrhswLh
TCZltglCZWQsMhqRHhsrHC
vbbNBbGBmNLzczNmNjrRVbhqHMsVqwHVRwqH
mzBSmzDLvPDPzcLPvGzWWSnsJstWlSsSlddWZJ
nlFJZTlBbFBVZldFnlZlCQvQrsMQzzsCdCLszvLD
hPwgVqSwmRcgSRmWgSwmsfrLPssLvQQfDPDvfMfD
htSwtWHWVRNtWmwgtnJplnbFpBbNTnBTFN
vnhBfSSvRttPJnlctl
frHVDHFwfDLVzVlJMNTHllJHMNlZ
bGGFFbqVLVVbzrFwGfdgFdwvhpCqmBpRqWpBpQpSSpSQSm
RMBMMZBBmmmhZmPjTZhZRPnNQvwWfcSvDfQWBSfdQSNdDc
LHzlVGHqVGzHGzsbCbqglbJddCcvJNDDvdDCJSQvWfwf
HlzrHHgsqbHsVGHqbsGsbbsqFmmjnTTFmnjmRQRPFTFPZtrj
LSLWRMLrLHqqwCBJqCstsG
vbQfPjndQnbcQfmndRwttBNZRsGdsCBJ
bmcnTfbvvPRRRFcmfhjHgzMrSrSMSLzSWgVhML
cqWNtsdsWdlsnBsDJwZJSzFFBZ
RhfvggPfffbVbfPmpMvRRFrZDFFbzDDZZrHwJDbwzb
QhRgvpTVpPgJVGTWWNcTtqNLtG
nppPsSPtPZtFdSWdvFvSnnPscRjjHRTLLjCmRLTmCCscrRcc
wwGqDqfMrGqlhllqhhNwzGNTjCRTmRLTHzJjzBmmRmjCLc
qrblfrVwGwbhwqghfqVhNMhtWSvFdPdQtQdgtWpvWPQWQv
cLJvcccHNcLDwCdRDvjdDR
ttPChbqhZmtWGCtZQwBdsQPQdwwsddQF
WnqbbgGVZCZnnlWhCVtbtVgMMrJLLJNrNcHMJNJTJNMp
vLvWghFhBWqGsVTV
JdpdmbrBmsQGGlVqdw
CJZMHPMZJHmzCnZHHrMjSvcDLDccNSBCDDFDjj
mDgnmRVmqgCSScsVllCj
HLTTMTHZQjZzTzprTGPwtcdlLcllWllWtCSwld
QMHHPzNrQBQGNHzQqbjnBbBbmbfjbqjb
tgPNgzzsSPhjSgbPztSbpDJZRJDTRLTTpRHpNRHZ
crlfGGFlBGBrBcrnFlrFFFCrLpHHJTcLRJJVJvDHtHZRDDRR
tFFtrdmGffnndmzhbWPgzPdsWQPW
JHhvgvzJhBGSLHhgBBSBHzdBflDfllTqLlwLqflfMcctCcfl
RjWQWrnjpjjdNQmmNNWZWpCZtqtDtMwwwcwtcDqcTDqC
PpNPjQspmWpPWRWnVQQpQsWVvvggJBvBSGGdJVhJSJBFdb
FrPTcrCGbcTCChrwNMRDMRvWRdHvzVRVTR
LJmQSmQfJnssmjsHSRFHSHzdVzSFHV
nQtgssgfstjLnmplttgFLLPPpGBrcrchBhCbhhqwPPCC
qFtZtFzstvvPvqttNrCJFWJRFCJFRRWR
ffBBfjQdmdQBfQfmLVQRPRpNNCgPNNRThdWPrr
fQVQlHnBQjBLjlvDqsvPqHMsctSb
rqhJnTTJqTchnTdhncmmgMVqtSBsBspgBtHLLWsBBWpWBHSH
bPldNljGZjNCbFCbwwGDWtBDDtsDtLwt
NjvlvvzQFFQhQqdQnMTM
DJHGghhFhHgsGgThrtrQWBPPJWWCzzzP
lTpffNTdZfrcwlCwCrWz
dmvdvffSSpjTLjFhFMRRbnRbjj
LfSqfmvfWPBPdljNNFVFzVJLNjJz
QZQnQcpMhwhZchQnwbvCCDNDCNpzpFsJpsRsRj
rchgQnvHHhQgvnwHGTffdmdTddTGfWHW
SzZGtmTjgzQCpJwpVqrVzz
NWddPllPDvdbccgcHJLCpClFLLVpFLLVLV
bbdRRWDNdPfgfWPWhdccNddRmBQTSGTTTZnmBQZjmsmnhGst
LgvFffmfVFczCWWmWCSh
MbwbTBDwbZtwBDMhSCGhscWSwVCsSw
QMtdQbqtbZTjVbMtZDMgffnFnJpFvrvFprgvgq
pztdqqzCrpvFqpJQwCvWBRGRWLWcWNBsNNQcNR
HdbjSbVhfhcRscRmNm
MDPffbjbjgFgzCZdFdgt
BmDQZbmmfbmbvhvhbgCsCl
GqVqMHwpGTLHLzwqJlCgsgShhvGvJgGS
LTpzpLFprpfmNrBBlfQP
RjRhBqZbwBbjcwgjPmRtZjZfWFfFznWQNVzQFQQnFzWmMN
vpTPDCdpPSpTSSMzNHzMvFQNNWNM
PDCpLGlGPdrlqRqbqbBhRLqR
PmHZWmJzzzppHfHdHfddDMDLhRbMRgRMNNnPgNMM
TCwBCSSjwqwVqQldTSQTtjVhtbbhbgLLbLLbMggMbDRttc
QBrwFlqCfdzHdvzF
GvgGvgfvlzlHGQWRjGMpjZLjZpGW
DVsqJtnDsJTsTqjpLTdcmWWLpTMp
NNqVhsPrrhqnJNnJNzgBvvjHCCPSjCvQQQ
pqnswpqrrtqrnMsMPMqzVfgGzHBVGVftfBGzGG
QWFQhhmDhJDmJJhhJLcTcfHVvTlTFTfVvgzG
ZDZLddWWSgDCggChRSMPspMjpnqjMPjj
MGwMFLFfssfffcGcDrnCllZtnHQCnDCZWD
dbTvTThtvVVVNWVHClWQzzlQ
TjbgBqTBvBvjRvbqvRmPGMcwSPJPfstSsfMBMf
VtCjjqgwvhCCQdSPJJdGnwwLTT
brrBsmNWlzBpSDcpSWLcWD
SSFsrrrBrCqHVVQFjj
LQQNLgvNDnNPHPDQjtGjnmjttBjVhSmJ
sbWfsMFwdCpdCdwWJVVSltVJlLSlLSft
TFcdMTbpdbwdwgTDQLgDNNrTNz
gfgSsnmnWnhhctcJ
ljjMfwwRTNbRqNlzVzjbtDvPvchvPCccChtJtPVW
GjwpwMpbjMbRMNwqzwpQgQQBfdHfSFrBmQBg
FmcmmTTMdPTGHjtGGnctcN
DgqzTqCgDgpZTrqhSbSpzZfpnHjHlnbtbHBGnGjtQHnlNGWt
zppLhfZTfDqsLMPdMVRwwM
RtsMZJSFRWbRsJbFnFzVBpBqgdRdGzGBpDDj
cTmvrlMQLHLllrhwlmfdQqBpdVpDqGdVpjVzBq
wvTfcHhhmHlhTNLFCnFnNnFnFnMFZJ
grjsjJhhNscgJFgPBnbHwLsRHzHfRLbH
ldMMSSvqtSMGmSSMqLRnlRwbrLlRLRRWwL
VtvDdTGGGCvMDMDTvdjhQjZppPNrJVpZPVFg
wctlscwwBTDnJcLNLHDN
bhhMnhqjzFRjjjPdNDDSvLdJ
MWzMzbrZZZmWQzhWbMhwlspstmnswswllBCgpG
rzmddBcmgFjRzSHHDR
vqpgbnGpqwgbpHtbtRjHTjTfFH
WWqCwvCqCJvCJvwpqvMvnvJMdPgZQQdZcWhBBBrPlLlmdQdm
ZdHTtNPNPSRBbFjjTTsr
WmDhGggmgWWJcZmMhVllzjJCrbjFzbsFFRCj
MMGDmMGGgDGgnWGWpNnvSHStLnwffZtHnw
ddZqRdqjvjZdndlfjwZQQCzmqcHLzzTTHTHzchHTmT
BPVPBBWVLbFFrWgJLpNHcPSHCPSCSCChcCPHTH
VFNbBJrGGJVZGGLwQGnjQL
NllFnzNNnNnNzmrHmDFGLGcccRGjGwHChGwwGh
StMZgPdBgbbBLLvCwCvgGwwj
PsfPtBJMtPZMJPbZVVPPMMDnjDlNlmrnmWnmqzpqmVFm
mGGCppgGWWgmGBzMVzBBBbBS
HnrRdvZvTMtSBtbZ
rHwRrjlrRwrnJrCsCDlLWCqcmCMM
zHhDNmDMNNJHfMNJzjsdvvsvbvjGdCGW
tVwttwwVVFBSFSZqSLjsqLdLCWCvGWcdLs
ZwZgwgpBFGlHgNQmGM
TNqhqvqFNWFrlqFqtDTrhTSTbLfjmjzbwMmMbjzLPDwGLPPP
scVRRQHVQVVHcRHpVgJJCRHMMZGMzCwwLZPZGMMCzLGwZw
dHsnQdHHdnBHspJRsVppFlNTSGGNBWBtTShNTFvG
hdZthMghfbbHCgQgBp
mLjTTjWrTrSCbZsLSbCS
VVPJrjqcWVmrjcmWRWTZTPcWldMNqvhnhMFdvdMhfNdldGNM
sFlsgtZFLFZzSZzpnQrJ
DjRbcjRdBrpRQpMJMJ
jNcfDqqfcDBbmqDFggpFCTpgCNhWWG
LMGGbbpLcpVVbfcpcpdvPVQPmZzJZjqSjSjgZgzqZgzTmm
BrRnBWrtRlhBjmqZCnqJgCSM
FDWWrBHHBBDHhFHttrWFttNpfLppbfcGGsfcGsFfccpcMd
jzHqjHLVqQQlHfzqlbbzqHQscvNsVrvnNZTtvNvvvcrGtv
gJCSRwRpJRtNNSTstnTT
wCMnFgnpCMPnJgpDQbqdQdQQLbzqDHfH
MpqJWmqlNNHmmwwBLLvL
QzFDFfdfQTtSGzTDVMdSFQDwHLBhHLjHjbTbHvLggccwHb
VQfsSDfGftfsdGSDSSQSFssZJCCMlMWWZPWPJMZlRp
lcqqhSsgTMgcqBBZnqZTBJJpdGpGVdRNMJHNGjRJdd
VbfCmPbtttfwwWHdGGrjHPdrRrHN
CffFFmwmDWmtCtvQbSVnTlBSDsqZhVBBSc
gPZTgmwvcnqPzhnW
GJVbDhpjsbWzjfNNNNMj
DFCbrBJsFJpBhbVFJCtvTgmtRTtQQltmwm
BLZgTJPqZzFgCGgCFlFF
ljfcDvNDtHcftNdMCQnCRnhnGjCChG
mVvSdDNDHlmHfNVlSWcSDmtpbpTzppwLPPLPPJLwTwBLPS
FHRzMqvQHvndJnFlNdhZ
fcjWWsjsSmmrgsGgjGcGWsPsnhZddffRdTtNDnZlnDnDThhT
WSPcPsGPSRGCmLcGgpHCzBVqzbQBVpqwwQ
PJzwjrVHzLPrZJHgSsNWbNbmNQtnLSSs
hGhqpTBRRGFFpMpBqGpSNlQQmWlntDbmTQSsml
MpcvMqBRhpFRNCcjwZwPZwJfwjHz
QWJsVCQDbVWbprrWSZWFcmrS
wMwvjRftMLhHfjhdMhRhjtMZrmrmZqBSpBSprvSpTzBTSF
dLNNjhhhVDlNDspN
MNmmtzlQPQmlttlQlHBGFFsHsPnGnFGWgs
CwhhwVZcRVRcCRDWLDFHWWFGss
hwdwdCwCZVSwZcrvhVwCJtbtQtpzmzQHvtpzQmmmpp
CccMdVLJcnCVhCfmjGjlfwwwMwWG
HDSbggDTNbRDHtTgrDpwmnGFfpGgfWfBFmlm
HbDzvQNzHbQLnQddZCcn
jWlqRjWwsqjHHqRDDPMPgpMLpgSMnggC
VQvFfFbdTcfhbcvCpvPrnZgLLpSgLp
PNQVbNTTcbdbfQdbmdVVGfbhBJlHWqGljJqBlqJJlsJJwqqR
WFGnWBTrvtgnjBWsFWggTPlhSfmRSRhZMcSfhZZpRmtZ
CdswHJHNsCbHLVVcZclphwcchfphZZ
LdDCLHsHzbNNNQDsJLNGgPPBvFzjggPrPTrrFB
pGFwwLTPjDcSCPpSdsqtMRMDdVQdVVQz
JBJjZgWgJHvHJgJJbBhNJvgZzsQVRqzdfQQQMMBszRzRzRfV
nlNZWZlJngbvNjgZhNvHhJvprcTclFCcTPSlTCcSpFcLrG
PdHJVCbSJmSVHdLdHbsbsqRwnlDWhZnZccWqDwqDVw
NvMFlGrQTvgpggFNwZhwWWhhqRWRhTqz
gMjvtMpNMrfFrvlffgmdjLLjCmmLHBddLJBS
zNrlzhJGdlHGHplCJQQVbLhRFRbccDSbVDLqRb
WwmwnWjvjmjZPPFFFRDZqVbqqJBS
tmjMJstnWnjvnsTnQMfrQMldrGlCrGfl
MqWfZlpjMPBgffgPNNQnVnnqRsNVLVmR
TcwGCTSvthpzCCTNVnsQVSnRnRQnNn
TbrpDvvCvCwTGDzvzhpzDzljHBZbHWZgHPZJZjJJHfPf
DWNNQQHRpsRWDQPQqHqqgJBCsjjsFFFngBzgjJzl
tMhMwTrTDLMdmMLtMMrbmVbZhJJnnFCCjnlJjjjjBzFBgZ
ttTtDmbfqWcWfqPp
QhvTQqggFsmvjsFTmqZrzzwZrHnwpnplpZ
WCJVGCSLtDPPtHDbHDbdpnrMnMrrpwlZrwpznLpl
VVJbbVfStVHJJVtGmvsfjvssFFTvvsQj
pBCqCqhWjpnWCnffJDjfWzJBZdcvwcPdvJvJcgcrdGdvggrv
tlhbHbmNTbQgbGRvbZGrcg
tVFLQNVlmTmQLQhpzMCBzCpzjjFMnz
qhWHwNqLHrLJjqgHddFchMdnnGnRhMcR
pTzTPVfZQPffNVtVVZfptRGsRbbbbcDsMMZsMZMdRn
CfzPVzCfPBzPBqvWqgBwjNLjjS

1000
src/Year_2022/files/P4.txt Normal file

File diff suppressed because it is too large Load Diff

511
src/Year_2022/files/P5.txt Normal file
View File

@ -0,0 +1,511 @@
[N] [R] [C]
[T] [J] [S] [J] [N]
[B] [Z] [H] [M] [Z] [D]
[S] [P] [G] [L] [H] [Z] [T]
[Q] [D] [F] [D] [V] [L] [S] [M]
[H] [F] [V] [J] [C] [W] [P] [W] [L]
[G] [S] [H] [Z] [Z] [T] [F] [V] [H]
[R] [H] [Z] [M] [T] [M] [T] [Q] [W]
1 2 3 4 5 6 7 8 9
move 3 from 9 to 7
move 4 from 4 to 5
move 2 from 4 to 6
move 4 from 7 to 5
move 3 from 7 to 3
move 2 from 5 to 9
move 5 from 6 to 3
move 5 from 9 to 1
move 3 from 8 to 4
move 3 from 4 to 6
move 8 from 1 to 8
move 1 from 8 to 6
move 2 from 8 to 2
move 5 from 8 to 4
move 1 from 8 to 1
move 6 from 6 to 4
move 1 from 7 to 9
move 5 from 1 to 7
move 1 from 1 to 2
move 2 from 9 to 8
move 6 from 4 to 9
move 1 from 6 to 8
move 3 from 2 to 7
move 4 from 2 to 8
move 4 from 9 to 3
move 6 from 5 to 4
move 7 from 8 to 1
move 10 from 4 to 1
move 12 from 1 to 5
move 1 from 4 to 9
move 1 from 2 to 3
move 2 from 9 to 1
move 1 from 9 to 3
move 1 from 6 to 7
move 1 from 9 to 1
move 3 from 1 to 3
move 9 from 5 to 9
move 2 from 2 to 7
move 2 from 7 to 4
move 3 from 9 to 4
move 7 from 5 to 7
move 5 from 1 to 3
move 2 from 4 to 5
move 1 from 4 to 6
move 1 from 6 to 9
move 4 from 9 to 2
move 12 from 7 to 9
move 2 from 4 to 9
move 6 from 5 to 9
move 3 from 7 to 6
move 12 from 9 to 6
move 5 from 9 to 1
move 1 from 7 to 6
move 14 from 6 to 1
move 20 from 3 to 5
move 5 from 9 to 5
move 3 from 2 to 8
move 1 from 6 to 4
move 1 from 9 to 2
move 1 from 4 to 6
move 1 from 2 to 6
move 16 from 1 to 5
move 1 from 2 to 1
move 12 from 5 to 6
move 1 from 8 to 4
move 29 from 5 to 1
move 5 from 6 to 9
move 20 from 1 to 3
move 4 from 1 to 3
move 11 from 3 to 8
move 1 from 4 to 3
move 4 from 9 to 8
move 7 from 1 to 8
move 2 from 3 to 2
move 2 from 6 to 7
move 1 from 9 to 8
move 10 from 3 to 5
move 1 from 6 to 1
move 1 from 7 to 2
move 3 from 1 to 2
move 6 from 2 to 4
move 2 from 6 to 3
move 4 from 6 to 5
move 1 from 6 to 2
move 1 from 2 to 9
move 6 from 5 to 2
move 1 from 9 to 3
move 24 from 8 to 7
move 1 from 4 to 8
move 5 from 5 to 4
move 1 from 4 to 8
move 1 from 8 to 7
move 2 from 8 to 9
move 1 from 9 to 7
move 6 from 2 to 4
move 10 from 3 to 7
move 3 from 5 to 3
move 1 from 9 to 8
move 3 from 3 to 8
move 4 from 8 to 7
move 1 from 4 to 6
move 1 from 6 to 4
move 13 from 4 to 3
move 17 from 7 to 6
move 1 from 6 to 3
move 2 from 4 to 8
move 3 from 7 to 5
move 14 from 6 to 7
move 1 from 5 to 9
move 1 from 5 to 9
move 2 from 6 to 7
move 1 from 5 to 1
move 1 from 1 to 6
move 1 from 9 to 3
move 29 from 7 to 4
move 10 from 4 to 3
move 6 from 7 to 5
move 1 from 6 to 5
move 1 from 9 to 7
move 1 from 7 to 2
move 4 from 3 to 2
move 1 from 2 to 9
move 1 from 8 to 5
move 11 from 3 to 4
move 24 from 4 to 7
move 2 from 2 to 5
move 10 from 3 to 2
move 6 from 2 to 1
move 5 from 4 to 7
move 1 from 9 to 2
move 3 from 5 to 1
move 1 from 4 to 6
move 4 from 2 to 3
move 5 from 5 to 7
move 2 from 5 to 3
move 32 from 7 to 5
move 16 from 5 to 1
move 1 from 1 to 2
move 3 from 2 to 9
move 1 from 8 to 6
move 3 from 7 to 6
move 1 from 2 to 4
move 5 from 6 to 8
move 5 from 8 to 6
move 2 from 9 to 3
move 1 from 7 to 5
move 9 from 5 to 4
move 1 from 9 to 1
move 2 from 3 to 1
move 4 from 3 to 6
move 1 from 3 to 8
move 6 from 4 to 6
move 6 from 5 to 9
move 1 from 9 to 6
move 1 from 5 to 1
move 1 from 5 to 4
move 1 from 3 to 6
move 1 from 8 to 3
move 1 from 4 to 2
move 1 from 2 to 3
move 17 from 6 to 4
move 4 from 1 to 8
move 3 from 9 to 6
move 1 from 8 to 4
move 1 from 9 to 7
move 2 from 6 to 2
move 1 from 7 to 8
move 12 from 1 to 9
move 8 from 9 to 2
move 1 from 6 to 9
move 6 from 2 to 8
move 2 from 8 to 3
move 18 from 4 to 9
move 2 from 1 to 6
move 1 from 6 to 5
move 3 from 4 to 3
move 7 from 3 to 8
move 4 from 2 to 7
move 1 from 4 to 6
move 2 from 6 to 4
move 13 from 9 to 6
move 1 from 5 to 2
move 5 from 9 to 3
move 9 from 1 to 2
move 1 from 1 to 8
move 1 from 2 to 6
move 3 from 7 to 6
move 2 from 2 to 6
move 9 from 8 to 6
move 1 from 7 to 8
move 1 from 8 to 7
move 2 from 4 to 6
move 5 from 3 to 6
move 17 from 6 to 9
move 7 from 8 to 4
move 4 from 2 to 3
move 17 from 6 to 2
move 1 from 6 to 4
move 1 from 7 to 8
move 1 from 8 to 9
move 24 from 9 to 6
move 4 from 3 to 1
move 1 from 1 to 5
move 20 from 6 to 4
move 4 from 6 to 9
move 1 from 5 to 7
move 2 from 4 to 2
move 1 from 9 to 7
move 25 from 4 to 3
move 1 from 4 to 2
move 2 from 1 to 6
move 3 from 9 to 4
move 2 from 4 to 7
move 2 from 7 to 5
move 1 from 4 to 2
move 1 from 6 to 3
move 1 from 1 to 5
move 5 from 3 to 9
move 1 from 5 to 6
move 10 from 2 to 8
move 9 from 2 to 5
move 21 from 3 to 6
move 1 from 7 to 6
move 2 from 6 to 5
move 5 from 9 to 7
move 6 from 7 to 8
move 19 from 6 to 9
move 1 from 6 to 1
move 8 from 8 to 1
move 1 from 6 to 1
move 2 from 8 to 5
move 5 from 9 to 2
move 6 from 8 to 2
move 2 from 9 to 7
move 9 from 9 to 4
move 7 from 2 to 4
move 1 from 6 to 4
move 14 from 5 to 9
move 1 from 1 to 8
move 1 from 7 to 9
move 4 from 2 to 9
move 16 from 4 to 6
move 3 from 2 to 8
move 1 from 6 to 2
move 2 from 8 to 9
move 1 from 8 to 7
move 1 from 8 to 3
move 3 from 2 to 7
move 1 from 3 to 9
move 8 from 9 to 3
move 4 from 7 to 8
move 1 from 5 to 4
move 4 from 6 to 3
move 1 from 4 to 2
move 9 from 3 to 8
move 10 from 9 to 5
move 8 from 6 to 7
move 13 from 8 to 4
move 8 from 5 to 2
move 3 from 6 to 3
move 7 from 9 to 6
move 7 from 7 to 2
move 2 from 4 to 6
move 5 from 6 to 2
move 3 from 1 to 5
move 5 from 5 to 8
move 4 from 6 to 2
move 4 from 1 to 8
move 15 from 2 to 6
move 11 from 4 to 9
move 12 from 6 to 8
move 1 from 6 to 9
move 5 from 3 to 7
move 2 from 2 to 6
move 6 from 7 to 1
move 3 from 1 to 3
move 1 from 4 to 1
move 1 from 3 to 9
move 1 from 3 to 9
move 1 from 7 to 6
move 1 from 3 to 2
move 4 from 2 to 6
move 4 from 2 to 7
move 1 from 2 to 6
move 4 from 1 to 6
move 12 from 6 to 7
move 2 from 6 to 1
move 8 from 9 to 6
move 1 from 7 to 4
move 14 from 8 to 1
move 8 from 1 to 5
move 1 from 3 to 9
move 5 from 9 to 5
move 1 from 8 to 9
move 1 from 9 to 2
move 1 from 9 to 3
move 5 from 8 to 3
move 12 from 5 to 4
move 1 from 9 to 2
move 6 from 7 to 3
move 7 from 3 to 2
move 1 from 5 to 1
move 1 from 8 to 3
move 2 from 1 to 3
move 2 from 6 to 9
move 5 from 6 to 5
move 5 from 1 to 7
move 4 from 4 to 1
move 7 from 2 to 8
move 4 from 3 to 8
move 1 from 9 to 3
move 1 from 9 to 5
move 4 from 1 to 8
move 10 from 7 to 9
move 1 from 6 to 7
move 2 from 8 to 6
move 6 from 4 to 2
move 5 from 3 to 1
move 2 from 6 to 3
move 2 from 7 to 1
move 5 from 2 to 5
move 2 from 7 to 1
move 7 from 5 to 7
move 2 from 5 to 6
move 2 from 5 to 3
move 3 from 2 to 9
move 9 from 9 to 3
move 1 from 6 to 4
move 3 from 3 to 1
move 9 from 8 to 2
move 6 from 3 to 6
move 8 from 7 to 9
move 4 from 9 to 8
move 14 from 1 to 5
move 1 from 9 to 2
move 1 from 1 to 5
move 2 from 3 to 6
move 12 from 5 to 3
move 2 from 2 to 8
move 7 from 6 to 2
move 12 from 2 to 8
move 2 from 6 to 2
move 6 from 9 to 6
move 1 from 1 to 2
move 1 from 9 to 3
move 2 from 5 to 9
move 1 from 9 to 2
move 1 from 9 to 4
move 1 from 3 to 2
move 2 from 6 to 7
move 2 from 6 to 9
move 5 from 4 to 2
move 14 from 3 to 9
move 15 from 9 to 4
move 1 from 7 to 4
move 10 from 8 to 6
move 1 from 5 to 9
move 2 from 9 to 5
move 10 from 8 to 1
move 1 from 7 to 4
move 5 from 1 to 2
move 2 from 1 to 5
move 3 from 4 to 6
move 4 from 5 to 8
move 5 from 8 to 6
move 14 from 2 to 9
move 2 from 6 to 7
move 3 from 2 to 9
move 3 from 1 to 7
move 1 from 7 to 3
move 3 from 7 to 1
move 1 from 3 to 6
move 1 from 7 to 6
move 1 from 8 to 9
move 2 from 1 to 4
move 1 from 1 to 2
move 16 from 9 to 4
move 7 from 4 to 8
move 5 from 8 to 1
move 2 from 8 to 3
move 2 from 1 to 7
move 13 from 6 to 7
move 2 from 2 to 3
move 4 from 7 to 4
move 6 from 4 to 5
move 4 from 7 to 6
move 3 from 1 to 2
move 2 from 2 to 6
move 3 from 3 to 8
move 5 from 5 to 3
move 2 from 9 to 6
move 3 from 3 to 7
move 1 from 8 to 1
move 22 from 4 to 8
move 1 from 4 to 3
move 9 from 6 to 3
move 1 from 2 to 1
move 4 from 3 to 4
move 2 from 4 to 5
move 1 from 1 to 7
move 4 from 3 to 7
move 2 from 6 to 1
move 1 from 6 to 7
move 18 from 8 to 7
move 2 from 6 to 5
move 2 from 3 to 4
move 1 from 5 to 4
move 30 from 7 to 6
move 2 from 1 to 3
move 18 from 6 to 8
move 12 from 6 to 4
move 13 from 4 to 9
move 2 from 3 to 8
move 1 from 6 to 2
move 3 from 7 to 2
move 1 from 1 to 2
move 2 from 5 to 9
move 8 from 8 to 1
move 1 from 7 to 8
move 7 from 1 to 3
move 2 from 4 to 9
move 1 from 1 to 6
move 4 from 2 to 1
move 16 from 8 to 1
move 1 from 2 to 6
move 2 from 4 to 8
move 2 from 5 to 1
move 4 from 3 to 7
move 3 from 7 to 1
move 1 from 6 to 8
move 1 from 8 to 9
move 1 from 7 to 3
move 6 from 3 to 5
move 1 from 3 to 8
move 1 from 6 to 9
move 16 from 9 to 5
move 4 from 5 to 3
move 15 from 5 to 1
move 1 from 5 to 8
move 3 from 9 to 8
move 9 from 8 to 5
move 6 from 5 to 1
move 4 from 5 to 6
move 2 from 6 to 4
move 1 from 6 to 4
move 1 from 8 to 4
move 3 from 3 to 6
move 3 from 6 to 8
move 1 from 6 to 8
move 21 from 1 to 9
move 4 from 8 to 5
move 3 from 5 to 7
move 2 from 5 to 1
move 2 from 4 to 8
move 2 from 8 to 2
move 2 from 7 to 8
move 1 from 7 to 9
move 1 from 8 to 7
move 5 from 1 to 8
move 1 from 7 to 8
move 4 from 8 to 4
move 2 from 4 to 5
move 1 from 2 to 7
move 1 from 2 to 7
move 2 from 7 to 6
move 2 from 6 to 9
move 1 from 4 to 9
move 1 from 3 to 4
move 16 from 1 to 5
move 16 from 5 to 7
move 2 from 5 to 4
move 14 from 9 to 6
move 5 from 4 to 3
move 3 from 3 to 6
move 5 from 1 to 4
move 2 from 4 to 7
move 7 from 9 to 4
move 2 from 9 to 7
move 10 from 6 to 9
move 8 from 4 to 6
move 1 from 8 to 4
move 1 from 1 to 9
move 14 from 6 to 3
move 10 from 3 to 2
move 3 from 7 to 8
move 6 from 3 to 1
move 2 from 7 to 9
move 5 from 7 to 9
move 10 from 9 to 1
move 2 from 4 to 3
move 1 from 2 to 1
move 16 from 1 to 4
move 1 from 6 to 1
move 2 from 3 to 9
move 3 from 8 to 5
move 8 from 7 to 1
move 3 from 5 to 9
move 7 from 4 to 6
move 7 from 1 to 5
move 2 from 8 to 3
move 1 from 7 to 8

View File

@ -0,0 +1 @@
stftmtvvtvqqczqqnjnwwlqqdzdnnsvnsswbbwsstvvssfjsjbjfjmjpjzpplpppjzjqqdzzhqqqqtcccbzzzwzrrrdqdldpdsppmqmmnwwjddnqqscclncllvhllqpllchhbccfcbcgbcgcfcncsnstsddldzldlmljjfbjbzbccmrmrppqmqsswbwqwdwwcnwwhrhppfsfvsvrrfllhglhlggjpggzjgzggnvvqfvvhffpwpmwpmmwvmvrmrbmbzmzbbvgbbcfbcfbfppnzpzrrszzqgzgjgddmdwmwrmwmzznqzqhqhvvsslppsrrljjfpfcpfpbbrjjwjmjpmpfmfzfvzfftptzzbmzmddpvdddqmmzjzbbhmmwqmmmbgmmttrhrqrvqvzvdvzdvvmsvmmqlmmtddvlvttrtvtvcttvssnwwbccqmmgbbqrqlqjllmslsmslltrtffzfpfzpffvwvffsllgvgtgwtwnttfzznzqzztfzfvzznnwzzcvcqvvdwwsnsvnnthhnphpssmjmfmhfmhmgmllmsmrsrrmmhsswjwqqdbbghhpsptsswvsvfvcffqcchlhfhvhjhdjhddvjjpmmsrsqrrngrrmvmsvsllrmlrlprpggqzqmmvlvvwrwnrwwzztrzrbrdbrdbbhlhchjchhtthpthphplhhlphpjjsddtppvbpbbmnmgnmmqbbrhhfrfpfjpjgjljcctwtmwtwvvvmsvmmnjmnjmnmqmvvggtzzctzttszsvvjwjqjmjbjvbbshbhghlghhpvpnvvqmmgjmmggqvqtvqtvqtvvmlljbbhdhshnnwqwbbrnnwswmwfmfttjztjzjsjzjdjbdjjzfzdzgzhghgpgqqdzdhhnwnjnnhrnrqqjsqsllbzzzcnzzmjmvmrvrgrfgrrqmrmpmpzmzqqfwqfwfjjhphgpptzzwmmfjjvbjvbbqsbsbcbppjzpjjzpjpvjjzdjjgcgppvrvjrjpjspjppntpnnjlnlrnrdndjnnsbnnppvspprbrddjrdrmrfmmtmtbtntftjjsscvcbvvcnccnbnrbbmlmddhpdptddmrmmjddnjjtztctqqhhttqctqtbbnfnwnmndnzzljlgltgltljtjllwjjbrjbrbpbgppmzpmpggdnnmznnhhmfhhssgtgvvlsljltlppdqqbtbvbsvsswbsbhsbsmmwswbbbbhvbvcbvvsvcsvvmfmlmgmjgmmbqbrbsrrgrsggldlmlttpbpmmtptctqcqvccnhnmnssmvsmmddlclpccfwfdfqfvqfvfqqwmmwrmmbzznpnllfttgcttnbtnnsswttfppnddpdpsphhpttnrtrlrsrmrnmmzhmhnmnwwddmhdhqqhbqqdcclnlfnnzfnzzqfqddczcqcrrjsrrswslltfltffjhhqqfcchqcqpplbltbblbcbncnpccdffcwwqzwqqlwwtjjpbbjvvljvjgvvrsszfsfcssqsvvwsvvdfvdfdpffztzrtzthzhhmwmzwzssjlsldsldsldlvvjdvvnbvnvmvmccvfcvcfcbchhzqqhgqqcbbhdbdpddwcdwwzszsfszzgbgdgzgvgsgnssfqsqjssrppsgppmmpzmppglgqlqqpzpqqfzzzrnzrnrqqzzfwzzffjfzzmnznpznpprhhvcvvvfddcrdrsscnnsznzszbznntwntnrnbnzzrnnlwlggnzzwppmbmrrncnlclzltlblhhlvhvphhsdhsdsqddgzgvvshvvzzbvbrrlplqpptplljcljlvjlvlqvvndnsdddmvddzhzjjgpjpddppzllwtwfwgfgpffmhhzllsttmqqhjhhpvpgpfjsgscnwjmwmtmptwlpfjljwgpgntrlpjfgbjqmcpzgfhrwmznqnsbpptbdrzmdtvvtdqjgrjzlphndhmlchvddglqnqsjqrfqslprsvlqjwqnsmsznptsstpvdntpttslpmqqbsdlqwpjqnzmpblgqmjrvqwsncnzdszgfsghddlnwhwzpgtddgstttvrjfjwwfrgsdjjngljqlqcrzlgsmwngbzvmjwtnqdqcgwmfhsztgrtvvfzbtstmdbqpntdpsszjthqvpbdwswfzvmrcpbgbgdmldfhvdpfsmdzfhwsrpcglsztdwqgbqszcqtqjhgntzvttldqsffftzmllptzhmhpmfsgcchfrnrchnsgcfjbgrqmvrmmhnmlnwtgwhznqfgwnlrqlpjrvfrgzcjwncvlwhpclfzngbgvmrmlzngmqlvvwhbpjzlclgrcnnvnlppqhvlrnpzvmtsbdpfbwgffgzfwvltcfvfdcnfhwvcvclwwbmshhmpgrzgltwjmqczpqzdwfjpqhmwqhvvgnpgtwrjrgwvhthtdrdpnwpbmwstgblwmbfvlwflqmfbcsgwstwvncwfcsmrpcfrrvmlbqhdtdswswfnzhgzlngwsrtlzfcgdppmjnghfrgbdqhqmslhcqddjvsslsjwqqznttqjzdlghnsvqqtwrpfbzjgwnrhhvlnbqmnvcpblzgbzltnrhzpdwvbqbtmctbzgsdjfzswrbqbzgvwjlwtmgcllnmnwcljbhbplpvtgpgjftfrbgpgmhghnjcgjfqmsbqhbgtzbfzgwmfdsgfgmgzsbgdrszfhjttbvcqjzjgbqfgswlmrrhnmnfrptvjtlnvplgznsljzfzmhghlsccnqzflfnmbhshfprhclmtfptcmtnhrjgnngnqnczvcgzzlntftjsbgpgwzbnrhzzfqmznqnzfrvjzsmtpjbswzjlbgpfftzrzbfgdblpwscbqjfrfmfnhhlhjprtlzzvwnwzsnqhnmgwsdprnrblgbclzhthftqzdljspwdzwmwhfmdzmlvqsngppdfsjdprbrhffcvcvzztjjqcffwbrvpzvzfzhjvsfvsnrmjvqmjtrjbmbqsdtjgvtbbzzfmnmrrflgcdtljpmpvqvdbzgbmhjgccgdtplllctzqpfqnsztbwdbmqgfzrcddtmwrgmwsghcfpgqssdjrtqhtjfbpjvjdnzgvpzrhbrhrhcmpbglbbrvdltdpsrwjbjzftccwgnqmnlqlpjwrfdvmlgvgqznlvsmpzsmgjstvqbqpprzlsdndpfbmqcrfgvcfvlfhmpfnnqlcqlnbbgcrrrhbtzwnwmfrnrzvgmqlmqnmnzbwflwzcmncphjqztlrzvpztqhptmfsrppvvlzcfnlrwptgccsjjjscjcwnzssmbcvtzhnscgsbrchbqbrtdzllfvmqfwznfzpzmbfwcdsfhdlddnfbdgqbqjqzdtppshwcvvcjqstdgtgbhmlqlrfrhbvfsszsmbldmwfnfgnjptdslnzwcjgmvbnqcfzjmrslrlllplbhpjcnvzmvrfzwqhmbnrvpqnvcfncgfwqlvcwpwwljssfmswctcmhgtphvjdpfnnzznfbdjcsndrczlgdjhrnrltsgbtqmqcbwlthwcgsbvqbnntcznczpmlmblwdrlmzqdztwsgjthjwtfcpgwbczmdmhttzcwvdzhdfldmwnbnfdcjgvjhrfltjnjhqhzmzrlbncwdnlgshmqhpgsdwbvmvjsfgvgqzqjqdzqzmfmrncfdgrqfrnstvpqwtltnhgrmhgmmnwvlnsfmmbjrdmrnlgfgpqncdpqgvjltpghbgffdppdcfhdqhtvrdnfvcttlrqppfnqtmzpfgsnmjqfrgtbbdzzrccsrzgfjndlrnzqmjjtgldglcpzcrhwfplvdndjtzbpfbbbpfljqnlvrdzbrvczzwdrvzlmslbjsqgqdrltmhwcdpldqldlpctcbjmsvdwlfspzlpgrhdrvjtprcwrmszvzwmmjgvsbfcztmrdgrgshgtggpzszgqhwmhdzjmzsgqsfmqvcgqqwgprgvvqlbfhpwsfbjdqtcfnfhsgzthzhbpwggbnscqbnvcdprsbgllsrdcclqggfgfdrpqlqljfwpmzdhthpczcsqrrm

1013
src/Year_2022/files/P7.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,99 @@
121212011303121030310342042402330124244111344151215543452341031241241020400101112013333020112100012
021211021113201200034023433130134132413414155334115143443355322133444324121312404302011201132211211
112100131112221303204244242431121003451531135255455445141455432541312201002214304203010313110102221
020110213013113103013204332232423553543445433222155153431441144442133012114241240204113022033210212
220211123123023221431120203212535513244235435131233452411353515142141342420233430124211033211103201
201022331320201202140104411413522115413213345254535252552153334555534422544330002102424023033322310
002011111302111311312434241323154521232411313453434133354341132333115133343011222312043111232231222
013200323000441302142430153512351514554144243134335236231323244242514241141543000044010321332222320
030100102011023442422335322343425254455155645352466333266624622411411531253414114432034034311131222
322030202043440231214443243242233422366246622362565344565233563555324325333511154331042320111021203
213003300414441314312513553152343433222235343463444622556454453564615122442121152433110144401122122
021322211313341320225244345212526464422556233255442242524636654565546141313334241514223301121200020
200002004321134302434442521521345336526234552642236565226243663554552342241443523255344432431132112
112123334441323144345534151556562252635233363355224653254253523344642442351332145221300143332241010
022320131410010151254142156636463345252452625423376754343432433653322245664252425413321040141302232
213010110022111155333545424663525462442454635436533755536636426266424643655512213435531304111222000
130321001200011144555214565543554643256537345337535434444635673532262633225653144544344432301332432
022001420212325411453144445434236254466446337636634543774555355374353662522435224132353244034031000
002330010431341554551434253422254276654743665367455334457473364473622344254456352551331135411240234
312302212143534422423465564263334474566667447435655556674563544344656444223542363235332253222404014
212121032141343134355434224534464675674454653637667644577377433543363445523354433252255211144312024
032232100153554252235624563224356655547365457745734763767533657435437475664325434442351433444413432
110200301524124453246544643533747547556475446575748877586377673774564455425343566541443431232401214
401423221442241424632554334447574565754568668848564545648588775376576657452244522662354432522131430
104434155511311263462424433673653733578444556668584487456756485643337355375433336556353432343531212
232312213322425552554325453754633766755865457774587845874856686753435335647736522565231415412413211
431001313425254645265623577666433748788645854658656747656847848685876376476452325453225544433534043
313010515252544635324244436374454465476587445778467648477556767674587735374763224263634154351324340
144012455355126524425677566774755774557844864767878874787745686455847654436466543454462444251355032
000424311444526324323553475355554746544864774656675767558855668566488767334344352635356531552442234
013342542545525235236366465754548568775676857795999885788785445466456855736374463562353442551411143
311242111152354425663445553378875855775477957697697578856798848566484877333477545525362635425135332
341433232336543522273555566685786646768568869658667859787755556468565557473633366352553433511511241
200113144455442526465477677487545446885795579597859665775997897975488858867346567332543224253422254
321322215536436463377577768487764477789778877885995868965678966676487767568444576663626645634432310
443312521324223555545636634855747678676887796567769797975557659998448677554734374642453342212431515
411525331432266364737736458775755877785596969568668977556998758996667657677735543737262252641333145
442522353464222643737346685584745598686858597889698887876897967879654657446543634637433266563152432
454243531252525455465534878756559675878866666799676687797788596788597656655885633463554433643143535
254423532244235655655733654475546977569587699768887776679688866766759778548883343347646235554115351
314314544653622563457635588785666699859596886897989897689788798876985987846687577376763532335135532
412142442632445563355677548756466696866899796677677889898887669778596858564457554576762226623533152
332242122354466554535565547487598955988896787986776867776877888955599984888475443433742663453323444
144151346544425765674636457564767658869896996679899997667979896767868998474585737643642635544533421
314415255322554774543648464765966788579669799899779987788989898667968687447844667337662354653241144
531151535525325346676758455659698557997896686798987988779868698785888786564857433665336664523341524
433523552663344344473467546666588759889896677787898898779776878975758958484784434645376646243431411
515135226664626774436754686667956875999777879798898978998697788977889685548778857447736246224344422
145435565465625543633666766675858858766886989979799999899997668785989599567745864566755645326525215
451353163534546735577664785687859598879898988887899889888777867978579599658876447575744455463535421
224133454534644344357668774586679766688667987978788777787978767996768679587486553753676234444243145
212224343354636435353376785568986575788667679879987787799996968667996977844764744747546562653555311
533215146234664535345776886669575768966898869977999998888778799896585966878485433376437563225631352
511524423463344353364385568455757877769888788888799787979869867976859678654676857776376644445445215
351234256625356736743655474675867598588879869899999799789878697766889955677655765744675453466515352
334415234234535577366766846485775897899678799797988789798686779975797678558486666454465242325255315
141341534526526535446644587564577966676787678799988989799997999875957694554787466435645653653555414
313324416232534373476357468674589657599899799798689797986786698995665798657574376535655252364222345
311221544446655446757777886865788857567967696689867999769799886898598995658847463557355652223224412
455533545356434343353337767878785976765769968899769879969687867689997585485648456367636362352431235
344444353536223353357778884687469798765676998669777968698779855796996985778555675367324552333255445
051125313425464566733636456767476978655987889896897676668688798768558878654457367667555264222423551
353542241453466263566466444568785959568996966999897988769675557699898764775776773566735422341532411
022324211323442654554445655776687576866866899996988868898585669578658688644533765553546656434125445
114453323344233423677473675646888489555668785777968786767598875656578848476447533734652563225415414
114422544242345362734473678567647667869987569695895789896698699557445648854544743436662644341252531
121342551166453322745565437644747478898555998668897895775999796995587786474657764352544656531442143
303141113253266635447343344867888466769679588758558756866968688847688674876656737744543462242255453
211553143135554522563734546548487876869685667557688879976567575866584774455433565742656362424324221
124145331431636546255374743445654474455696878969759677857655988487587487353655433225556322453333301
212244412131664532653366547437778778757756559965879758976787487565565586665457556563646654415332511
011305211242465446332773543655556877674464555978676866698775787766666456756644432225665434112311020
004241221433546245432264563633447545674557677448454476555877787756767637433767625564453222213212214
310343115521416426645326746575333484685764464876676658588877654688747777476753344453622354123212043
140122345414213664253233365647757664866655755465564678758484884488574665556644653435636451242442431
244102135324345326634353374375547456884585456867666677454868468687435553747753654545544441144303342
432104041214342544334655425474547463448788757857558655488554466655536543533544446366314241124214112
323340324334354443354245236535677365643457874448486874757456574363667673472262365365211122323243114
430330302152115233222436253333446747553365334585488745577537474744744537762432632263215224143034311
311442302225213454546466432534566554436677736533674654344734776664563675555452243452512224320440414
012223322322424155255455565223573376357653457774454463735446656766537352553544256234512225223230043
301040234123443123232563623663643633535443553744547733637676336764634633454454353153253554114310123
133230222202333125332643444534665265775555366656333664577746375536432522432632352414133321233403141
130131122340253113451232453334526422447633735643377464757575366556545326434445112532143151333444233
123141143123235144241534634442646462453347557645744747744444465243533265534335312135141342344141402
003321424141234554211325444625623263425263674757674335463664556352656232255214521252351130300034201
112312001424231145115555432333342644223335545625473535264242623526263634466325543223334324011234121
000221124024240324421331531356324362422542263363234455442425223655564222213351113145440100221140111
033311243403013332514242224522366666224344244563634356355445532225333344231213331535121420140433130
303323104303402340514525522211134233445565565244563523544534354246644545425131313341424434300003032
011323012002420122421144112234234535335555456426433464426356545662531135434153435334430024313303120
031202221220044224202355531555315433255252442366562265422542236431311515541243440113402324302332130
201100001202303212021041315334534534143533633663456666642564224231354441333414120340321342200233132
221201212012302142404132243444141351134325452546423522255432534112215145442242342110400232302021322
220223222003322321422133444521333545342441534125321334411524122521525135453342042001304403200303321
222220302103313411301404030054314141423224422211413131115533525334423132133412232211310121021132101
122003101321113124242202433422213424522545354542323525531511234344125550023302132204220012211210020
000112201313122024204100421340022524132134142432553221315323551243135131212431102431311323201221002
020202200133011113024021012122001204231413324533351552454535514252231001424310042133312311233022121

2000
src/Year_2022/files/P9.txt Normal file

File diff suppressed because it is too large Load Diff