Skip to content

Instantly share code, notes, and snippets.

@Mynuddin-dev
Last active September 7, 2022 10:47
Show Gist options
  • Save Mynuddin-dev/9ba416608e6013f07c555221973ab3ec to your computer and use it in GitHub Desktop.
Save Mynuddin-dev/9ba416608e6013f07c555221973ab3ec to your computer and use it in GitHub Desktop.
## 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