Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
102988caed |
11 changed files with 24 additions and 1347 deletions
|
@ -1,22 +0,0 @@
|
||||||
if __name__ == "__main__":
|
|
||||||
elves = []
|
|
||||||
|
|
||||||
with open('input', 'r') as f:
|
|
||||||
sum_ = 0
|
|
||||||
for line in f:
|
|
||||||
if line.strip() == '':
|
|
||||||
elves.append(sum_)
|
|
||||||
sum_ = 0
|
|
||||||
else:
|
|
||||||
sum_ += int(line.strip())
|
|
||||||
|
|
||||||
elves.append(sum_)
|
|
||||||
|
|
||||||
elves.sort(reverse=True)
|
|
||||||
|
|
||||||
largest = elves[0]
|
|
||||||
print(f'Max Value: {largest}')
|
|
||||||
|
|
||||||
top3 = elves[0] + elves[1] + elves[2]
|
|
||||||
|
|
||||||
print(f'Top 3: {top3}')
|
|
36
day1/day1.py
36
day1/day1.py
|
@ -1,24 +1,32 @@
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
elves = []
|
# Initialize empty list to store sums
|
||||||
|
sums = []
|
||||||
|
|
||||||
|
# Open input file
|
||||||
with open('input', 'r') as f:
|
with open('input', 'r') as f:
|
||||||
sum_ = 0
|
# Initialize sum for current group of numbers
|
||||||
|
current_sum = 0
|
||||||
|
|
||||||
|
# Read lines from file
|
||||||
for line in f:
|
for line in f:
|
||||||
|
# If line is empty, append current sum to list and reset sum
|
||||||
if line.strip() == '':
|
if line.strip() == '':
|
||||||
elves.append(sum_)
|
sums.append(current_sum)
|
||||||
sum_ = 0
|
current_sum = 0
|
||||||
else:
|
else:
|
||||||
sum_ += int(line.strip())
|
# Add number from line to current sum
|
||||||
|
current_sum += int(line.strip())
|
||||||
|
|
||||||
elves.append(sum_)
|
# Add last sum to list
|
||||||
|
sums.append(current_sum)
|
||||||
|
|
||||||
largest = max(elves)
|
# Sort sums in descending order
|
||||||
print(f'Max Value: {largest}')
|
sums.sort(reverse=True)
|
||||||
|
|
||||||
top3 = 0
|
# Print index and value of largest group of numbers
|
||||||
for i in range(3):
|
print(f'Index: 0\nValue: {sums[0]}')
|
||||||
largest = max(elves)
|
|
||||||
top3 += largest
|
# Calculate sum of top 3 groups of numbers
|
||||||
elves.remove(largest)
|
top3_sum = sums[0] + sums[1] + sums[2]
|
||||||
|
print(f'Top 3: {top3_sum}')
|
||||||
|
|
||||||
print(f'Top 3: {top3}')
|
|
||||||
|
|
55
day1/input2
55
day1/input2
|
@ -1,55 +0,0 @@
|
||||||
5324
|
|
||||||
5176
|
|
||||||
2197
|
|
||||||
2701
|
|
||||||
6185
|
|
||||||
3901
|
|
||||||
5392
|
|
||||||
2065
|
|
||||||
6467
|
|
||||||
6085
|
|
||||||
5062
|
|
||||||
1841
|
|
||||||
1197
|
|
||||||
1318
|
|
||||||
|
|
||||||
4901
|
|
||||||
3443
|
|
||||||
1403
|
|
||||||
5570
|
|
||||||
4336
|
|
||||||
5672
|
|
||||||
2532
|
|
||||||
5627
|
|
||||||
6038
|
|
||||||
1099
|
|
||||||
4305
|
|
||||||
2317
|
|
||||||
1382
|
|
||||||
3226
|
|
||||||
4427
|
|
||||||
|
|
||||||
2612
|
|
||||||
15638
|
|
||||||
|
|
||||||
4118
|
|
||||||
4687
|
|
||||||
2243
|
|
||||||
3532
|
|
||||||
2089
|
|
||||||
3937
|
|
||||||
1146
|
|
||||||
5069
|
|
||||||
5728
|
|
||||||
2962
|
|
||||||
3099
|
|
||||||
5882
|
|
||||||
5448
|
|
||||||
6064
|
|
||||||
|
|
||||||
2642
|
|
||||||
7996
|
|
||||||
5334
|
|
||||||
10384
|
|
||||||
1106
|
|
||||||
2742
|
|
|
@ -7,7 +7,7 @@ function find_duplicates(first, second)
|
||||||
for i = 1, #first do
|
for i = 1, #first do
|
||||||
local char = string.sub(first, i, i)
|
local char = string.sub(first, i, i)
|
||||||
|
|
||||||
if string.find(second, char) then
|
if string.match(second, char) then
|
||||||
if char == string.upper(char) then
|
if char == string.upper(char) then
|
||||||
return string.byte(char) - string.byte("A") + 27
|
return string.byte(char) - string.byte("A") + 27
|
||||||
elseif char == string.lower(char) then
|
elseif char == string.lower(char) then
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
for i = 1, 1000 do
|
|
||||||
-- Open the file for reading
|
|
||||||
local file = assert(io.open("strings.txt", "r"))
|
|
||||||
|
|
||||||
-- Initialize a variable to store the sum of scores
|
|
||||||
local score = 0
|
|
||||||
|
|
||||||
-- Read each line from the file
|
|
||||||
for line in file:lines() do
|
|
||||||
-- Split the line in half
|
|
||||||
local first_half = line:sub(1, #line / 2)
|
|
||||||
local second_half = line:sub(#line / 2 + 1)
|
|
||||||
|
|
||||||
-- Create a table to store the characters in each half
|
|
||||||
local first_half_chars = {}
|
|
||||||
local second_half_chars = {}
|
|
||||||
|
|
||||||
-- Iterate over each character in each half and store it in the table
|
|
||||||
for i = 1, #first_half do
|
|
||||||
first_half_chars[first_half:sub(i, i)] = true
|
|
||||||
end
|
|
||||||
for i = 1, #second_half do
|
|
||||||
second_half_chars[second_half:sub(i, i)] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create a table to store the characters that have already been counted
|
|
||||||
local counted_chars = {}
|
|
||||||
|
|
||||||
-- Iterate over each character in the first half again
|
|
||||||
-- and check if it exists in the second half
|
|
||||||
for i = 1, #first_half do
|
|
||||||
local char = first_half:sub(i, i)
|
|
||||||
if second_half_chars[char] and not counted_chars[char] then
|
|
||||||
-- If it does and it hasn't been counted yet,
|
|
||||||
-- assign it a score and add it to the sum of scores
|
|
||||||
local score_value = 0
|
|
||||||
if char:lower() == char then
|
|
||||||
-- If the character is lowercase, its score is its ASCII value - 96
|
|
||||||
score_value = string.byte(char) - 96
|
|
||||||
else
|
|
||||||
-- If the character is uppercase, its score is its ASCII value - 64 + 26
|
|
||||||
score_value = string.byte(char) - 64 + 26
|
|
||||||
end
|
|
||||||
score = score + score_value
|
|
||||||
|
|
||||||
-- Add the character to the counted_chars table so it won't be counted again
|
|
||||||
counted_chars[char] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Print the final sum of scores
|
|
||||||
print(score)
|
|
||||||
end
|
|
|
@ -11,7 +11,7 @@ end
|
||||||
function find_duplicates(one, two, three)
|
function find_duplicates(one, two, three)
|
||||||
for i = 1, #one do
|
for i = 1, #one do
|
||||||
local char = string.sub(one, i, i)
|
local char = string.sub(one, i, i)
|
||||||
if string.find(two, char) and string.find(three, char) then
|
if string.match(two, char) and string.match(three, char) then
|
||||||
if char == string.upper(char) then
|
if char == string.upper(char) then
|
||||||
return string.byte(char) - string.byte("A") + 27
|
return string.byte(char) - string.byte("A") + 27
|
||||||
elseif char == string.lower(char) then
|
elseif char == string.lower(char) then
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
This is my solution to the Day 4 puzzle in the 2022 Advent of Code.
|
|
||||||
|
|
||||||
It is written in a language called Expression 2, a scripting language for the Wiremod addon in Garry's Mod.
|
|
||||||
|
|
||||||
Due to the unusual nature of the language, here is an annotated verison of Part 1:
|
|
||||||
```golo
|
|
||||||
@name Advent of Code
|
|
||||||
@inputs
|
|
||||||
@outputs
|
|
||||||
# These variables persist through multiple executions of the script
|
|
||||||
@persist Input:array [I Overlaps]:number
|
|
||||||
@trigger
|
|
||||||
|
|
||||||
# When the file has successfully uploaded, run this script
|
|
||||||
runOnFile(1)
|
|
||||||
|
|
||||||
# Run this script every 100ms
|
|
||||||
interval(100)
|
|
||||||
|
|
||||||
# When you first place the E2 entity down, upload the input dataset to the server
|
|
||||||
if(first()) {
|
|
||||||
fileLoad("input.txt")
|
|
||||||
}
|
|
||||||
|
|
||||||
# If the current reason the script is being executed is the file being uploaded, parse it.
|
|
||||||
if(fileClk()) {
|
|
||||||
Input = fileRead():explode("\n")
|
|
||||||
Input:removeString(Input:count())
|
|
||||||
I = 1
|
|
||||||
Overlaps = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# If the file is fully loaded and the index variable is below the maximum of the array, loop through it.
|
|
||||||
if(fileLoaded() && I <= Input:count()) {
|
|
||||||
#printTable(Input)
|
|
||||||
|
|
||||||
# This function will loop forever until the execution time limit for the current game tick is almost met, then the loop will break and wait until the next time the script is ran to continue
|
|
||||||
while(perf()) {
|
|
||||||
#print(Input[I,string])
|
|
||||||
Thing = Input[I,string]:explode(",")
|
|
||||||
|
|
||||||
Range1 = Thing[1,string]:explode("-")
|
|
||||||
Range2 = Thing[2,string]:explode("-")
|
|
||||||
|
|
||||||
if(Range1[1,string]:toNumber() >= Range2[1,string]:toNumber()
|
|
||||||
&& Range1[2,string]:toNumber() <= Range2[2,string]:toNumber()) {
|
|
||||||
#print(I+": True1")
|
|
||||||
Overlaps++
|
|
||||||
} elseif(Range2[1,string]:toNumber() >= Range1[1,string]:toNumber()
|
|
||||||
&& Range2[2,string]:toNumber() <= Range1[2,string]:toNumber()) {
|
|
||||||
#print(I+": True2")
|
|
||||||
Overlaps++
|
|
||||||
} else {
|
|
||||||
#print(I+": False")
|
|
||||||
}
|
|
||||||
I++
|
|
||||||
if(I > Input:count()) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# If the file is fully loaded and I is above the array size (meaning it is done), print the results
|
|
||||||
if(fileLoaded() && I > Input:count()) {
|
|
||||||
print(Overlaps)
|
|
||||||
print(I)
|
|
||||||
runOnTick(0)
|
|
||||||
stoptimer("interval")
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -1,55 +0,0 @@
|
||||||
@name Advent of Code
|
|
||||||
@inputs
|
|
||||||
@outputs
|
|
||||||
@persist Input:array [I Overlaps]:number
|
|
||||||
@trigger
|
|
||||||
|
|
||||||
runOnFile(1)
|
|
||||||
interval(100)
|
|
||||||
|
|
||||||
if(first()) {
|
|
||||||
fileLoad("input.txt")
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileClk()) {
|
|
||||||
Input = fileRead():explode("\n")
|
|
||||||
Input:removeString(Input:count())
|
|
||||||
I = 1
|
|
||||||
Overlaps = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileLoaded() && I <= Input:count()) {
|
|
||||||
#printTable(Input)
|
|
||||||
|
|
||||||
while(perf()) {
|
|
||||||
#print(Input[I,string])
|
|
||||||
Thing = Input[I,string]:explode(",")
|
|
||||||
|
|
||||||
Range1 = Thing[1,string]:explode("-")
|
|
||||||
Range2 = Thing[2,string]:explode("-")
|
|
||||||
|
|
||||||
if(Range1[1,string]:toNumber() >= Range2[1,string]:toNumber()
|
|
||||||
&& Range1[2,string]:toNumber() <= Range2[2,string]:toNumber()) {
|
|
||||||
#print(I+": True1")
|
|
||||||
Overlaps++
|
|
||||||
} elseif(Range2[1,string]:toNumber() >= Range1[1,string]:toNumber()
|
|
||||||
&& Range2[2,string]:toNumber() <= Range1[2,string]:toNumber()) {
|
|
||||||
#print(I+": True2")
|
|
||||||
Overlaps++
|
|
||||||
} else {
|
|
||||||
#print(I+": False")
|
|
||||||
}
|
|
||||||
I++
|
|
||||||
if(I > Input:count()) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileLoaded() && I > Input:count()) {
|
|
||||||
print(Overlaps)
|
|
||||||
print(I)
|
|
||||||
runOnTick(0)
|
|
||||||
stoptimer("interval")
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
@name Advent of Code Part 2
|
|
||||||
@inputs
|
|
||||||
@outputs
|
|
||||||
@persist Input:array [I Overlaps]:number
|
|
||||||
@trigger
|
|
||||||
|
|
||||||
runOnFile(1)
|
|
||||||
interval(100)
|
|
||||||
|
|
||||||
if(first()) {
|
|
||||||
fileLoad("input.txt")
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileClk()) {
|
|
||||||
Input = fileRead():explode("\n")
|
|
||||||
Input:removeString(Input:count())
|
|
||||||
I = 1
|
|
||||||
Overlaps = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileLoaded() && I <= Input:count()) {
|
|
||||||
#printTable(Input)
|
|
||||||
|
|
||||||
while(perf()) {
|
|
||||||
#print(Input[I,string])
|
|
||||||
Thing = Input[I,string]:explode(",")
|
|
||||||
|
|
||||||
Range1 = Thing[1,string]:explode("-")
|
|
||||||
Range2 = Thing[2,string]:explode("-")
|
|
||||||
|
|
||||||
if(Range2[1,string]:toNumber() <= Range1[2,string]:toNumber()
|
|
||||||
&& Range2[2,string]:toNumber() >= Range1[1,string]:toNumber()) {
|
|
||||||
#print(I+": True1")
|
|
||||||
Overlaps++
|
|
||||||
} elseif (Range1[1,string]:toNumber() <= Range2[2,string]:toNumber()
|
|
||||||
&& Range1[2,string]:toNumber() >= Range2[1,string]:toNumber()) {
|
|
||||||
#print(I+": True2")
|
|
||||||
Overlaps++
|
|
||||||
} else {
|
|
||||||
#print(I+": False")
|
|
||||||
}
|
|
||||||
I++
|
|
||||||
if(I > Input:count()) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fileLoaded() && I > Input:count()) {
|
|
||||||
print(Overlaps)
|
|
||||||
print(I)
|
|
||||||
runOnTick(0)
|
|
||||||
stoptimer("interval")
|
|
||||||
}
|
|
||||||
|
|
1000
day4/input.txt
1000
day4/input.txt
File diff suppressed because it is too large
Load diff
|
@ -1,20 +0,0 @@
|
||||||
51-88,52-87
|
|
||||||
41-55,22-56
|
|
||||||
6-74,74-86
|
|
||||||
51-98,52-86
|
|
||||||
8-77,3-94
|
|
||||||
76-76,77-97
|
|
||||||
29-42,29-35
|
|
||||||
59-97,60-60
|
|
||||||
9-86,27-86
|
|
||||||
58-85,59-85
|
|
||||||
23-41,26-39
|
|
||||||
87-91,74-93
|
|
||||||
13-83,83-84
|
|
||||||
16-82,15-82
|
|
||||||
15-95,14-96
|
|
||||||
1-1,2-93
|
|
||||||
3-87,2-74
|
|
||||||
6-47,7-78
|
|
||||||
47-68,47-92
|
|
||||||
4-64,5-68
|
|
Reference in a new issue