Last active
September 7, 2022 10:47
-
-
Save Mynuddin-dev/9ba416608e6013f07c555221973ab3ec to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Day 1: Report Repair | |
## Part 1 | |
---------------------------- | |
with open("data.txt") as f: | |
numbers = f.readlines() | |
# print(len(numbers)) | |
for i in range(len(numbers)-1): | |
for j in range(i+1,len(numbers)): | |
if int(numbers[i]) + int(numbers[j]) == 2020: | |
print(int(numbers[i]) * int(numbers[j])) | |
break | |
## Part 2 | |
---------------------------- | |
with open("data.txt") as f: | |
numbers = f.readlines() | |
# print(len(numbers)) | |
for i in range(len(numbers)-1): | |
for j in range(i+1,len(numbers)): | |
for k in range(j+1,len(numbers)): | |
if int(numbers[i]) + int(numbers[j]) + int(numbers[k]) == 2020: | |
print(int(numbers[i]) * int(numbers[j]) * int(numbers[k])) | |
break | |
## Day 2: Password Philosophy | |
## Part 1 | |
------------------------------- | |
with open("data.txt") as f: | |
lines = f.readlines() | |
valid_count = 0 | |
for line in lines: | |
words = line.split() | |
num_min,num_max = int(words[0].split("-")[0]),int(words[0].split("-")[1]) | |
character = words[1][0] | |
password = words[2] | |
# print(f"{type(num_min)} {type(num_max)} {character} {password}") | |
count = password.count(character) | |
if count >= num_min and count <= num_max: | |
valid_count += 1 | |
print(valid_count) | |
## Part 2 | |
----------------------------- | |
with open("data.txt") as f: | |
lines = f.readlines() | |
valid_count = 0 | |
for line in lines: | |
words = line.split() | |
num_min,num_max = int(words[0].split("-")[0]),int(words[0].split("-")[1]) | |
character = words[1][0] | |
password = words[2] | |
# print(f"{num_min} {num_max} {character} {password}") | |
count = password.count(character) | |
num_min = num_min - 1 | |
num_max = num_max - 1 | |
if password[num_min]==character and password[num_max]!=character: | |
valid_count += 1 | |
elif password[num_min]!=character and password[num_max]==character: | |
valid_count += 1 | |
print(valid_count) | |
## Day 3: Toboggan Trajectory | |
## Part 1 | |
----------------------------------------- | |
with open("data.txt",encoding="utf-8") as f: | |
lines = f.readlines() | |
for i in range(len(lines)): | |
lines[i]=lines[i].rstrip("\n\r") | |
def TreeCount(): | |
width = len(lines[0]) | |
print(width) | |
tree = 0 | |
col = 0 | |
for row in range(len(lines)): | |
# print(row,col%width) | |
if lines[row][col%width] == '#': | |
tree += 1 | |
print(row,col%width) | |
col += 3 | |
return tree | |
print(TreeCount()) | |
## Part 2 | |
-------------------------------- | |
with open("data.txt",encoding="utf-8") as f: | |
lines = f.readlines() | |
for i in range(len(lines)): | |
lines[i]=lines[i].rstrip("\n\r") | |
def TreeCount(lines , rightmove , downmove): | |
width = len(lines[0]) | |
print(width) | |
tree = 0 | |
col = 0 | |
for row in range(0,len(lines),downmove): | |
# print(row,col%width) | |
if lines[row][col%width] == '#': | |
tree += 1 | |
# print(row,col%width) | |
col += rightmove | |
return tree | |
slopes=[ | |
[1,1], | |
[3,1], | |
[5,1], | |
[7,1], | |
[1,2] | |
] | |
Treecount_multiply = 1 | |
for i in slopes: | |
Treecount_multiply=Treecount_multiply*TreeCount(lines,i[0],i[1]) | |
print(i[0],i[1]) | |
print(Treecount_multiply) | |
##Day 4: Passport Processing | |
## Part 1 | |
------------------------------ | |
with open("data.txt") as data: | |
lines = data.read() | |
passports = lines.split("\n\n") | |
# print(passports[0]) | |
passport_details=[] | |
for details in passports: | |
temporary_list = details.split("\n") or details.split(" ") | |
# print(temporary_list) | |
strings_list=[] | |
for i in range(len(temporary_list)): | |
k = temporary_list[i].split() | |
for j in range(len(k)): | |
strings_list.append(k[j]) | |
passport_details.append(strings_list) | |
first_check = ["byr","iyr","eyr","hgt","hcl","ecl","pid","cid"] | |
second_check = ["byr","iyr","eyr","hgt","hcl","ecl","pid"] | |
first_check.sort() | |
second_check.sort() | |
valid_count = 0 | |
for key_value_list in passport_details: | |
keys=[] | |
for key_value in key_value_list: | |
keys.append(key_value.split(":")[0]) | |
# print(key_value.split(":")[0]) | |
keys.sort() | |
if keys == first_check or keys == second_check: | |
valid_count +=1 | |
print(valid_count) | |
## Part 2 | |
----------------------------- | |
with open("data.txt") as data: | |
lines = data.read() | |
passports = lines.split("\n\n") | |
passport_details=[] | |
for details in passports: | |
temporary_list = details.split("\n") or details.split(" ") | |
strings_list=[] | |
for i in range(len(temporary_list)): | |
k = temporary_list[i].split() | |
for j in range(len(k)): | |
strings_list.append(k[j]) | |
passport_details.append(strings_list) | |
valid_count = 0 | |
for key_value_list in passport_details: | |
check_valid = [] | |
for key_value in key_value_list: | |
keys=key_value.split(":")[0] | |
value = key_value.split(":")[1] | |
# print(keys,value) | |
if keys == "byr": | |
if 1920 <= int(value) <= 2002: | |
check_valid.append(True) | |
elif keys == "iyr": | |
if 2010 <= int(value) <= 2020: | |
check_valid.append(True) | |
elif keys == "eyr": | |
if 2020 <= int(value) <= 2030: | |
check_valid.append(True) | |
elif keys == "hgt": | |
if value[-2:] == "cm": | |
if 150 <= int(value[:-2]) <= 193: | |
check_valid.append(True) | |
elif value[-2:] == "in": | |
if 59 <= int(value[:-2]) <= 76: | |
check_valid.append(True) | |
elif keys == "hcl": | |
if value[0] == "#": | |
if len(value) == 7: | |
check_valid.append(True) | |
elif keys == "ecl": | |
if value in ["amb","blu","brn","gry","grn","hzl","oth"]: | |
check_valid.append(True) | |
elif keys == "pid": | |
if len(value) == 9: | |
check_valid.append(True) | |
if len(check_valid) == 7: | |
valid_count += 1 | |
print(valid_count) | |
## Day5 : BinaryBoarding | |
## Part1 | |
--------------------------- | |
def column(st): | |
# print(st) | |
left = 0 | |
right = 7 | |
for i in st: | |
mid = (left + right) // 2 | |
if i == "R": | |
left = mid + 1 | |
# print(left , right) | |
else: | |
right = mid | |
# print(left , right) | |
if left==right: | |
return left | |
def row(s): | |
# print(s) | |
left = 0 | |
right = 127 | |
for i in s: | |
mid = (left + right) // 2 | |
if i == "B": | |
left = mid + 1 | |
# print(left , right) | |
else: | |
right = mid | |
# print(left , right) | |
if left==right: | |
return left | |
with open("data.txt") as input: | |
data = input.read() | |
data = data.splitlines() | |
seat_ids=[] | |
for i in range(len(data)): | |
row_string= data[i][:7] | |
col_string = data[i][-3:] | |
# print(f"column:{col_string}, row:{row_string}") | |
column_count = column(col_string) | |
row_count = row(row_string) | |
# print(row_count , column_count) | |
seat_id = row_count * 8 + column_count | |
seat_ids.append(seat_id) | |
print(max(seat_ids)) | |
## Part 2 | |
------------------------- | |
for id in seat_ids: | |
if id+1 not in seat_ids and id+2 in seat_ids: | |
missing = id+1 | |
print(f"missing : {missing}") | |
## Just add with part 1 | |
## Day 6 : Custom Customs | |
## Part 1 | |
------------------------------- | |
with open("data.txt") as input: | |
data = input.read() | |
data = data.split("\n\n") | |
counts = 0 | |
for details in data: | |
# print(len(set("".join(details.split("\n")))) , set("".join(details.split("\n")))) | |
counts += len(set("".join(details.split("\n")))) | |
print(counts) | |
## Part 2 | |
-------------------------------- | |
with open("data.txt") as input: | |
data = input.read() | |
data = data.split("\n\n") | |
counts = 0 | |
for details in data: | |
string_list = details.split("\n") | |
counts +=len(set.intersection(*map(set,string_list))) | |
print(counts) | |
## Day 7: Handy Haversacks | |
## Part 1 | |
--------------------------------- | |
with open("data.txt") as input: | |
data = input.read() | |
data = data.split("\n") | |
key_value = {} | |
for line in data: | |
line = line.replace("bags", "bag") | |
# print(line.split("contain")) | |
# print(line.split("contain")[1].split(",")) | |
key_value[line.split("contain")[0]] = line.split("contain")[1].split(",") | |
# print(key_value) | |
count = 0 | |
for key , value in key_value.items(): | |
shiny_gold_contains = [] | |
for str in value: | |
if "shiny gold" in str.strip(): | |
# print(key , value) | |
count += 1 | |
shiny_gold_contains.append(key) | |
print(shiny_gold_contains) | |
# print(key , value) | |
# for str in value: | |
# for l in shiny_gold: | |
# if l in str.strip(): | |
# # print(key , value) | |
# count += 1 | |
# shiny_gold.append(key) | |
# print(shiny_gold) | |
print(count) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment