Fix directory structure
This commit is contained in:
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our totals.
|
|
||||||
increased = 0
|
|
||||||
decreased = 0
|
|
||||||
|
|
||||||
# Read in the input file and make it an array.
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
values = []
|
|
||||||
for line in inputFile:
|
|
||||||
values.append(int(line))
|
|
||||||
|
|
||||||
# Loop through the array skipping the first value.
|
|
||||||
for v in range(0, len(values)):
|
|
||||||
if(v == 0):
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Check each value against the one before it.
|
|
||||||
if(values[v - 1] < values[v]):
|
|
||||||
increased+=1
|
|
||||||
elif(values[v - 1] > values[v]):
|
|
||||||
decreased+=1
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Print the output.
|
|
||||||
print("Decreased: " + str(decreased))
|
|
||||||
print("Increased: " + str(increased))
|
|
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our totals.
|
|
||||||
increased = 0
|
|
||||||
decreased = 0
|
|
||||||
|
|
||||||
# Read in the input file and make it an array.
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
rawValues = []
|
|
||||||
for line in inputFile:
|
|
||||||
rawValues.append(int(line))
|
|
||||||
|
|
||||||
# Sum up numbers in 3's and add them to a new array.
|
|
||||||
values = []
|
|
||||||
for i in range(0, len(rawValues) - 2):
|
|
||||||
values.append(rawValues[i] + rawValues[i+1] + rawValues[i+2])
|
|
||||||
|
|
||||||
# Loop through the array skipping the first value.
|
|
||||||
for v in range(0, len(values)):
|
|
||||||
if(v == 0):
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Check each value against the one before it.
|
|
||||||
if(values[v - 1] < values[v]):
|
|
||||||
increased+=1
|
|
||||||
elif(values[v - 1] > values[v]):
|
|
||||||
decreased+=1
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Print the output.
|
|
||||||
print("Decreased: " + str(decreased))
|
|
||||||
print("Increased: " + str(increased))
|
|
@@ -1,34 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
totalScore = 0
|
|
||||||
|
|
||||||
closers = {
|
|
||||||
'(':')',
|
|
||||||
'{':'}',
|
|
||||||
'[':']',
|
|
||||||
'<':'>'
|
|
||||||
}
|
|
||||||
|
|
||||||
points = {
|
|
||||||
')':3,
|
|
||||||
']':57,
|
|
||||||
'}':1197,
|
|
||||||
'>':25137
|
|
||||||
}
|
|
||||||
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-10/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
line = line.strip('\n')
|
|
||||||
i = 0
|
|
||||||
expecting = []
|
|
||||||
i = 0
|
|
||||||
for char in line:
|
|
||||||
if(char in closers):
|
|
||||||
expecting.insert(0,closers[char])
|
|
||||||
else:
|
|
||||||
if(expecting[i] != char):
|
|
||||||
totalScore += points[char]
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
del expecting[i]
|
|
||||||
print("Our total score was: " + str(totalScore))
|
|
@@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
from statistics import median
|
|
||||||
|
|
||||||
lineScores = []
|
|
||||||
|
|
||||||
closers = {
|
|
||||||
'(':')',
|
|
||||||
'{':'}',
|
|
||||||
'[':']',
|
|
||||||
'<':'>'
|
|
||||||
}
|
|
||||||
|
|
||||||
points = {
|
|
||||||
')':1,
|
|
||||||
']':2,
|
|
||||||
'}':3,
|
|
||||||
'>':4
|
|
||||||
}
|
|
||||||
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-10/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
line = line.strip('\n')
|
|
||||||
expecting = []
|
|
||||||
invalid = False
|
|
||||||
for char in line:
|
|
||||||
if(char in closers):
|
|
||||||
expecting.insert(0,closers[char])
|
|
||||||
else:
|
|
||||||
if(expecting[0] != char):
|
|
||||||
invalid = True
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
del expecting[0]
|
|
||||||
if(invalid):
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
totalScore = 0
|
|
||||||
for e in expecting:
|
|
||||||
totalScore*=5
|
|
||||||
totalScore+=points[e]
|
|
||||||
lineScores.append(totalScore)
|
|
||||||
print("The middle score is: " + str(median(lineScores)))
|
|
@@ -1,24 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our position.
|
|
||||||
x = 0
|
|
||||||
z = 0
|
|
||||||
|
|
||||||
# Read in the input file. Split each line on the space.
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
values = []
|
|
||||||
for line in inputFile:
|
|
||||||
splitLine = line.split()
|
|
||||||
|
|
||||||
# Check the first word of each line to decide what to do.
|
|
||||||
if splitLine[0] == "forward":
|
|
||||||
x = x + int(splitLine[1])
|
|
||||||
elif splitLine [0] == "down":
|
|
||||||
z = z + int(splitLine[1])
|
|
||||||
elif splitLine [0] == "up":
|
|
||||||
z = z - int(splitLine[1])
|
|
||||||
|
|
||||||
# Print our final values.
|
|
||||||
print("X: " + str(x))
|
|
||||||
print("Z: " + str(z))
|
|
||||||
print("X * Z = " + str(x*z))
|
|
@@ -1,26 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our position.
|
|
||||||
x = 0
|
|
||||||
z = 0
|
|
||||||
aim = 0
|
|
||||||
|
|
||||||
# Read in the input file. Split each line on the space.
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
values = []
|
|
||||||
for line in inputFile:
|
|
||||||
splitLine = line.split()
|
|
||||||
|
|
||||||
# Check the first word of each line to decide what to do.
|
|
||||||
if splitLine[0] == "forward":
|
|
||||||
x = x + int(splitLine[1])
|
|
||||||
z = z + (aim * int(splitLine[1]))
|
|
||||||
elif splitLine [0] == "down":
|
|
||||||
aim = aim + int(splitLine[1])
|
|
||||||
elif splitLine [0] == "up":
|
|
||||||
aim = aim - int(splitLine[1])
|
|
||||||
|
|
||||||
# Print our final values.
|
|
||||||
print("X: " + str(x))
|
|
||||||
print("Z: " + str(z))
|
|
||||||
print("X * Z = " + str(x*z))
|
|
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our totals.
|
|
||||||
gamma = ''
|
|
||||||
epsilon = ''
|
|
||||||
|
|
||||||
# Read in the input file. Split the file up into an array.
|
|
||||||
values = []
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
values.append(line.strip('\n'))
|
|
||||||
|
|
||||||
# Add up all the 1 values for each bit, then use the length of the array to calculate the most common bit.
|
|
||||||
for i in range(0, len(values[0])):
|
|
||||||
currentBitCount = 0
|
|
||||||
for value in values:
|
|
||||||
currentBitCount = currentBitCount + int(value[i])
|
|
||||||
|
|
||||||
if((len(values) - currentBitCount) < currentBitCount):
|
|
||||||
gamma = gamma + '1'
|
|
||||||
epsilon = epsilon + '0'
|
|
||||||
elif((len(values) - currentBitCount) > currentBitCount):
|
|
||||||
gamma = gamma + '0'
|
|
||||||
epsilon = epsilon + '1'
|
|
||||||
|
|
||||||
# Convert the binary strings to decimal ints.
|
|
||||||
gammaInt = int(gamma, 2)
|
|
||||||
epsilonInt = int(epsilon, 2)
|
|
||||||
|
|
||||||
# Print results.
|
|
||||||
print("Gamma is " + str(gamma) + " (" + str(gammaInt) + ")")
|
|
||||||
print("Epsilon is " + str(epsilon) + " (" + str(epsilonInt) + ")")
|
|
||||||
print("Gamma multiplied by Epsilon is: " + str(gammaInt * epsilonInt))
|
|
@@ -1,67 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Variables to hold our totals.
|
|
||||||
keptNumbers = []
|
|
||||||
co2 = 0
|
|
||||||
o2 = 0
|
|
||||||
|
|
||||||
# Read in the input file. Split the file up into an array.
|
|
||||||
rawValues = []
|
|
||||||
with open('input.txt', 'r') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
rawValues.append(line.strip('\n'))
|
|
||||||
|
|
||||||
# Loop through twice, collecting the opposite set of results each time.
|
|
||||||
for i in range(0,2):
|
|
||||||
values = rawValues
|
|
||||||
mostPopular=0
|
|
||||||
|
|
||||||
# Determine the most popular bit.
|
|
||||||
for bit in range(0, len(values[0])):
|
|
||||||
currentBitCount = 0
|
|
||||||
for value in values:
|
|
||||||
currentBitCount = currentBitCount + int(value[bit])
|
|
||||||
|
|
||||||
# Keep values which contain the most popular bit.
|
|
||||||
if((len(values) - currentBitCount) < currentBitCount):
|
|
||||||
mostPopular = 1
|
|
||||||
for value in values:
|
|
||||||
if(value[bit] == str(mostPopular) and i == 1):
|
|
||||||
keptNumbers.append(value)
|
|
||||||
elif(value[bit] != str(mostPopular) and i == 0):
|
|
||||||
keptNumbers.append(value)
|
|
||||||
|
|
||||||
elif((len(values) - currentBitCount) > currentBitCount):
|
|
||||||
mostPopular = 0
|
|
||||||
for value in values:
|
|
||||||
if(value[bit] == str(mostPopular) and i == 1):
|
|
||||||
keptNumbers.append(value)
|
|
||||||
elif(value[bit] != str(mostPopular) and i == 0):
|
|
||||||
keptNumbers.append(value)
|
|
||||||
|
|
||||||
elif((len(values) - currentBitCount) == currentBitCount):
|
|
||||||
for value in values:
|
|
||||||
if(value[bit] == str(i)):
|
|
||||||
keptNumbers.append(value)
|
|
||||||
|
|
||||||
values = keptNumbers
|
|
||||||
keptNumbers = []
|
|
||||||
|
|
||||||
# Break if we only have one value left.
|
|
||||||
if(len(values) == 1):
|
|
||||||
break
|
|
||||||
|
|
||||||
# Put the value in the right variable.
|
|
||||||
if(i == 0):
|
|
||||||
co2 = values[0]
|
|
||||||
elif(i == 1):
|
|
||||||
o2 = values[0]
|
|
||||||
|
|
||||||
# Convert the binary numbers to ints.
|
|
||||||
o2Int = int(o2, 2)
|
|
||||||
co2Int = int(co2, 2)
|
|
||||||
|
|
||||||
# Print results.
|
|
||||||
print("O2 Generator reading is " + str(o2) + " (" + str(o2Int) + ")")
|
|
||||||
print("CO2 Scrubber reading is " + str(co2) + " (" + str(co2Int) + ")")
|
|
||||||
print("The readings multipied together is " + str(o2Int * co2Int))
|
|
@@ -1,78 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
numbersDrawn = []
|
|
||||||
boards = []
|
|
||||||
|
|
||||||
# Function to check a given board for completed columns
|
|
||||||
def checkColumns(board):
|
|
||||||
match = False
|
|
||||||
for i in range(0,len(board[0])):
|
|
||||||
for line in board:
|
|
||||||
if(line[i] == '*'):
|
|
||||||
match = True
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
match = False
|
|
||||||
break
|
|
||||||
if(match):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Function to check a given board for completed rows.
|
|
||||||
def checkRows(board):
|
|
||||||
for line in board:
|
|
||||||
match = False
|
|
||||||
for num in line:
|
|
||||||
if(num == '*'):
|
|
||||||
match = True
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
match = False
|
|
||||||
break
|
|
||||||
if(match):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Open the file. Put the numbers to be drawn in one array and the boards in another.
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-4/input.txt', 'r') as inputFile:
|
|
||||||
numbersDrawn = inputFile.readline().split(',')
|
|
||||||
boardsFromFile = inputFile.readlines()[1:]
|
|
||||||
|
|
||||||
currentBoard = []
|
|
||||||
for line in boardsFromFile:
|
|
||||||
currentLine = []
|
|
||||||
|
|
||||||
if(line == '\n'):
|
|
||||||
boards.append(currentBoard)
|
|
||||||
currentBoard = []
|
|
||||||
continue
|
|
||||||
|
|
||||||
currentLine = line.split()
|
|
||||||
currentBoard.append(currentLine)
|
|
||||||
boards.append(currentBoard)
|
|
||||||
|
|
||||||
# Mark off the numbers drawn on the boards.
|
|
||||||
for i in range(0, len(numbersDrawn)):
|
|
||||||
for board in boards:
|
|
||||||
for line in board:
|
|
||||||
for num in range(len(line)):
|
|
||||||
if(line[num] == numbersDrawn[i]):
|
|
||||||
line[num] = '*'
|
|
||||||
|
|
||||||
# Check for a winning board
|
|
||||||
if(checkRows(board) or checkColumns(board)):
|
|
||||||
print("Found winning board: " + str(board))
|
|
||||||
total = 0
|
|
||||||
for line in board:
|
|
||||||
for num in line:
|
|
||||||
if(num != '*'):
|
|
||||||
total = total+int(num)
|
|
||||||
score = total * int(numbersDrawn[i])
|
|
||||||
print("Total score of winning board is: " + str(score))
|
|
||||||
exit()
|
|
||||||
else:
|
|
||||||
continue
|
|
@@ -1,86 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
numbersDrawn = []
|
|
||||||
boards = []
|
|
||||||
winningBoards = []
|
|
||||||
|
|
||||||
# Function to check a given board for completed columns
|
|
||||||
def checkColumns(board):
|
|
||||||
match = False
|
|
||||||
for i in range(0,len(board[0])):
|
|
||||||
for line in board:
|
|
||||||
if(line[i] == '*'):
|
|
||||||
match = True
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
match = False
|
|
||||||
break
|
|
||||||
if(match):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Function to check a given board for completed rows.
|
|
||||||
def checkRows(board):
|
|
||||||
for line in board:
|
|
||||||
match = False
|
|
||||||
for num in line:
|
|
||||||
if(num == '*'):
|
|
||||||
match = True
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
match = False
|
|
||||||
break
|
|
||||||
if(match):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Open the file. Put the numbers to be drawn in one array and the boards in another.
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-4/input.txt', 'r') as inputFile:
|
|
||||||
numbersDrawn = inputFile.readline().split(',')
|
|
||||||
boardsFromFile = inputFile.readlines()[1:]
|
|
||||||
|
|
||||||
currentBoard = []
|
|
||||||
for line in boardsFromFile:
|
|
||||||
currentLine = []
|
|
||||||
|
|
||||||
if(line == '\n'):
|
|
||||||
boards.append(currentBoard)
|
|
||||||
currentBoard = []
|
|
||||||
continue
|
|
||||||
|
|
||||||
currentLine = line.split()
|
|
||||||
currentBoard.append(currentLine)
|
|
||||||
boards.append(currentBoard)
|
|
||||||
|
|
||||||
# Mark off the numbers drawn on the boards.
|
|
||||||
for i in range(0, len(numbersDrawn)):
|
|
||||||
for board in boards:
|
|
||||||
for line in board:
|
|
||||||
for num in range(len(line)):
|
|
||||||
if(line[num] == numbersDrawn[i]):
|
|
||||||
line[num] = '*'
|
|
||||||
|
|
||||||
# Check for a winning board
|
|
||||||
if(checkRows(board) or checkColumns(board)):
|
|
||||||
if(board in winningBoards):
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
winningBoards.append(board)
|
|
||||||
if(len(winningBoards) < len(boards)):
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
print("Found final winning board: " + str(board))
|
|
||||||
total = 0
|
|
||||||
for line in board:
|
|
||||||
for num in line:
|
|
||||||
if(num != '*'):
|
|
||||||
total = total+int(num)
|
|
||||||
score = total * int(numbersDrawn[i])
|
|
||||||
print("Total score of final winning board is: " + str(score))
|
|
||||||
exit()
|
|
||||||
else:
|
|
||||||
continue
|
|
@@ -1,68 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
diagram = []
|
|
||||||
totalPoints = 0
|
|
||||||
|
|
||||||
# Read all the line segments into an array.
|
|
||||||
segments = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-5/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
segment = line.strip('\n').split(' -> ')
|
|
||||||
segments.append(segment)
|
|
||||||
|
|
||||||
# Work out the bounds of our diagram and create an array for it.
|
|
||||||
largestX = 0
|
|
||||||
largestY = 0
|
|
||||||
for segment in segments:
|
|
||||||
if(int(segment[0].split(',')[0]) > largestX):
|
|
||||||
largestX = int(segment[0].split(',')[0])
|
|
||||||
|
|
||||||
if(int(segment[1].split(',')[0]) > largestX):
|
|
||||||
largestX = int(segment[1].split(',')[0])
|
|
||||||
|
|
||||||
if(int(segment[0].split(',')[1]) > largestY):
|
|
||||||
largestY = int(segment[0].split(',')[1])
|
|
||||||
|
|
||||||
if(int(segment[1].split(',')[1]) > largestX):
|
|
||||||
largestY = int(segment[1].split(',')[1])
|
|
||||||
|
|
||||||
|
|
||||||
for i in range(0, largestY+1):
|
|
||||||
diagLine = []
|
|
||||||
for i in range(0,largestX+1):
|
|
||||||
diagLine.append(0)
|
|
||||||
diagram.append(diagLine)
|
|
||||||
|
|
||||||
# Run through the line segments and plot them on the diagram if they are horizontal or vertical.
|
|
||||||
for segment in segments:
|
|
||||||
startingX = int(segment[0].split(',')[0])
|
|
||||||
startingY = int(segment[0].split(',')[1])
|
|
||||||
endingX = int(segment[1].split(',')[0])
|
|
||||||
endingY = int(segment[1].split(',')[1])
|
|
||||||
if((startingX == endingX) or (startingY == endingY)):
|
|
||||||
endX = endingX +1
|
|
||||||
startX = startingX
|
|
||||||
endY = endingY +1
|
|
||||||
startY = startingY
|
|
||||||
|
|
||||||
# Flip the start and end if the end is lower so our for loop will still run.
|
|
||||||
if(startingX > endingX):
|
|
||||||
endX = startingX +1
|
|
||||||
startX = endingX
|
|
||||||
if(startingY > endingY):
|
|
||||||
endY = startingY +1
|
|
||||||
startY = endingY
|
|
||||||
|
|
||||||
for x in range(startX, endX):
|
|
||||||
for y in range(startY, endY):
|
|
||||||
diagram[y][x]+=1
|
|
||||||
|
|
||||||
# Find points where two or more line segments overlap.
|
|
||||||
for line in diagram:
|
|
||||||
for num in line:
|
|
||||||
if(num > 1):
|
|
||||||
totalPoints+=1
|
|
||||||
|
|
||||||
# Print the results
|
|
||||||
print("There are " + str(totalPoints) + " points where two or more lines overlap.")
|
|
||||||
|
|
@@ -1,79 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
diagram = []
|
|
||||||
totalPoints = 0
|
|
||||||
|
|
||||||
# Read all the line segments into an array.
|
|
||||||
segments = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-5/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
segment = line.strip('\n').split(' -> ')
|
|
||||||
segments.append(segment)
|
|
||||||
|
|
||||||
# Work out the bounds of our diagram and create an array for it.
|
|
||||||
largestX = 0
|
|
||||||
largestY = 0
|
|
||||||
for segment in segments:
|
|
||||||
if(int(segment[0].split(',')[0]) > largestX):
|
|
||||||
largestX = int(segment[0].split(',')[0])
|
|
||||||
|
|
||||||
if(int(segment[1].split(',')[0]) > largestX):
|
|
||||||
largestX = int(segment[1].split(',')[0])
|
|
||||||
|
|
||||||
if(int(segment[0].split(',')[1]) > largestY):
|
|
||||||
largestY = int(segment[0].split(',')[1])
|
|
||||||
|
|
||||||
if(int(segment[1].split(',')[1]) > largestX):
|
|
||||||
largestY = int(segment[1].split(',')[1])
|
|
||||||
|
|
||||||
for i in range(0, largestY+1):
|
|
||||||
diagLine = []
|
|
||||||
for i in range(0,largestX+1):
|
|
||||||
diagLine.append(0)
|
|
||||||
diagram.append(diagLine)
|
|
||||||
|
|
||||||
# Run through the line segments and plot them on the diagram.
|
|
||||||
for segment in segments:
|
|
||||||
startingX = int(segment[0].split(',')[0])
|
|
||||||
startingY = int(segment[0].split(',')[1])
|
|
||||||
endingX = int(segment[1].split(',')[0])
|
|
||||||
endingY = int(segment[1].split(',')[1])
|
|
||||||
|
|
||||||
# Create lists for the X and Y points our lines will go through.
|
|
||||||
if(startingX > endingX):
|
|
||||||
xStep = -1
|
|
||||||
endingX-=1
|
|
||||||
else:
|
|
||||||
xStep = 1
|
|
||||||
endingX+=1
|
|
||||||
if(startingY > endingY):
|
|
||||||
yStep = -1
|
|
||||||
endingY-=1
|
|
||||||
else:
|
|
||||||
yStep=1
|
|
||||||
endingY+=1
|
|
||||||
|
|
||||||
xList = list(range(startingX, endingX, xStep))
|
|
||||||
yList = list(range(startingY, endingY, yStep))
|
|
||||||
|
|
||||||
# If the line is horizontal or vertical there will be differing numbers of indexes so we need to loop though them separately.
|
|
||||||
if(len(xList) != len(yList)):
|
|
||||||
for x in xList:
|
|
||||||
for y in yList:
|
|
||||||
diagram[y][x]+=1
|
|
||||||
# Otherwise they will be identical and we need to increment both lists together.
|
|
||||||
else:
|
|
||||||
for i in range(0, len(xList)):
|
|
||||||
currentX = xList[i]
|
|
||||||
currentY = yList[i]
|
|
||||||
diagram[currentY][currentX]+=1
|
|
||||||
|
|
||||||
# Find points where two or more line segments overlap.
|
|
||||||
for line in diagram:
|
|
||||||
for num in line:
|
|
||||||
if(num > 1):
|
|
||||||
totalPoints+=1
|
|
||||||
|
|
||||||
# Print the results.
|
|
||||||
print("There are " + str(totalPoints) + " points where two or more lines overlap.")
|
|
||||||
|
|
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Open the file and read the one line into an array.
|
|
||||||
fish = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-6/input.txt') as inputFile:
|
|
||||||
fish = inputFile.readline().strip('\n').split(',')
|
|
||||||
fish = [ int(x) for x in fish ]
|
|
||||||
|
|
||||||
# Loop over the array decrementing and adding fish as required for 80 days.
|
|
||||||
days = 0
|
|
||||||
while days < 80:
|
|
||||||
for i in range(0, len(fish)):
|
|
||||||
if(fish[i] == 0):
|
|
||||||
fish[i] = 6
|
|
||||||
fish.append(8)
|
|
||||||
else:
|
|
||||||
fish[i] = fish[i] -1
|
|
||||||
days+=1
|
|
||||||
|
|
||||||
# Print the results.
|
|
||||||
print("Total fish afer " + str(days) + " days: " + str(len(fish)))
|
|
@@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Open the file and read the one line into an array.
|
|
||||||
fish = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-6/input.txt') as inputFile:
|
|
||||||
fish = inputFile.readline().strip('\n').split(',')
|
|
||||||
fish = [ int(x) for x in fish ]
|
|
||||||
|
|
||||||
fishFrequency = []
|
|
||||||
for i in range(0, 9):
|
|
||||||
fishFrequency.append(0)
|
|
||||||
|
|
||||||
for f in fish:
|
|
||||||
fishFrequency[f]+=1
|
|
||||||
|
|
||||||
# Loop over the array decrementing and adding fish as required for 80 days.
|
|
||||||
days = 0
|
|
||||||
origFish = []
|
|
||||||
for num in fishFrequency:
|
|
||||||
origFish.append(num)
|
|
||||||
while days < 256:
|
|
||||||
for i in range(1,len(fishFrequency)):
|
|
||||||
fishFrequency[i-1] = origFish[i]
|
|
||||||
fishFrequency[6] += origFish[0]
|
|
||||||
fishFrequency[8] = origFish[0]
|
|
||||||
|
|
||||||
origFish=[]
|
|
||||||
for num in fishFrequency:
|
|
||||||
origFish.append(num)
|
|
||||||
|
|
||||||
days+=1
|
|
||||||
|
|
||||||
totalFish = 0
|
|
||||||
for total in fishFrequency:
|
|
||||||
totalFish += total
|
|
||||||
|
|
||||||
# Print the results.
|
|
||||||
print("Total fish afer " + str(days) + " days: " + str(totalFish))
|
|
@@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Read in the file and split it into an array.
|
|
||||||
crabPositions = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-7/input.txt') as inputFile:
|
|
||||||
crabPositions = inputFile.readline().strip('\n').split(',')
|
|
||||||
crabPositions = [ int(x) for x in crabPositions]
|
|
||||||
|
|
||||||
possiblePositions = list(range(min(crabPositions), max(crabPositions)))
|
|
||||||
fuelForPositions = []
|
|
||||||
|
|
||||||
# Calculate the lowest possible fuel usage.
|
|
||||||
for i in possiblePositions:
|
|
||||||
fuelUsed = 0
|
|
||||||
for crab in crabPositions:
|
|
||||||
fuelUsed += abs(crab - i)
|
|
||||||
fuelForPositions.append(fuelUsed)
|
|
||||||
|
|
||||||
# Print the results.
|
|
||||||
print("Lowest possible fuel usage is " + str(min(fuelForPositions)) + " by moving to position " + str(possiblePositions[fuelForPositions.index(min(fuelForPositions))]))
|
|
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
# Read in the file and split it into an array.
|
|
||||||
crabPositions = []
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-7/input.txt') as inputFile:
|
|
||||||
crabPositions = inputFile.readline().strip('\n').split(',')
|
|
||||||
crabPositions = [ int(x) for x in crabPositions ]
|
|
||||||
|
|
||||||
possiblePositions = list(range(min(crabPositions), max(crabPositions)))
|
|
||||||
fuelForPositions = []
|
|
||||||
|
|
||||||
# Calculate the lowest possible fuel usage.
|
|
||||||
for i in possiblePositions:
|
|
||||||
fuelUsed = 0
|
|
||||||
for crab in crabPositions:
|
|
||||||
postitionsToMove = abs(crab - i)
|
|
||||||
fuelUsed += postitionsToMove/2*(1+postitionsToMove)
|
|
||||||
fuelForPositions.append(int(fuelUsed))
|
|
||||||
|
|
||||||
# Print the results.
|
|
||||||
print("Lowest possible fuel usage is " + str(min(fuelForPositions)) + " by moving to position " + str(possiblePositions[fuelForPositions.index(min(fuelForPositions))]))
|
|
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
totalUnique = 0
|
|
||||||
|
|
||||||
# Read in the input file.
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-8/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
for output in line.strip('\n').split('|')[1].split():
|
|
||||||
if(len(output) in [2,3,4,7]):
|
|
||||||
totalUnique += 1
|
|
||||||
|
|
||||||
print(totalUnique)
|
|
@@ -1,64 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
finalTotal = 0
|
|
||||||
|
|
||||||
# Function to find and return common chars in a string.
|
|
||||||
def findCommon(s1, s2):
|
|
||||||
common = ""
|
|
||||||
for i in s1:
|
|
||||||
if(i in s2):
|
|
||||||
common += i
|
|
||||||
return common
|
|
||||||
|
|
||||||
# Read in the input file. Put the signals and outputs in two
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-8/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
newNums = ['0','0','0','0','0','0','0','0','0','0']
|
|
||||||
out = ""
|
|
||||||
signals = line.strip('\n').split('|')[0].split()
|
|
||||||
output = line.strip('\n').split('|')[1].split()
|
|
||||||
|
|
||||||
for signal in signals:
|
|
||||||
if(len(signal) == 2):
|
|
||||||
newNums[1] = "".join(sorted(signal))
|
|
||||||
elif(len(signal) == 3):
|
|
||||||
newNums[7] = "".join(sorted(signal))
|
|
||||||
elif(len(signal) == 4):
|
|
||||||
newNums[4] = "".join(sorted(signal))
|
|
||||||
elif(len(signal) == 7):
|
|
||||||
newNums[8] = "".join(sorted(signal))
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for signal in signals:
|
|
||||||
sortedSignal = "".join(sorted(signal))
|
|
||||||
if(sortedSignal in newNums):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if(len(signal) == 5):
|
|
||||||
# Check for 2.
|
|
||||||
if(len(findCommon(signal, newNums[4])) == 2 and len(findCommon(signal, newNums[1])) == 1 and len(findCommon(signal, newNums[7])) == 2):
|
|
||||||
newNums[2] = "".join(sorted(signal))
|
|
||||||
# Check for 3.
|
|
||||||
elif(len(findCommon(signal, newNums[7])) == 3 and len(findCommon(signal, newNums[1])) == 2):
|
|
||||||
newNums[3] = "".join(sorted(signal))
|
|
||||||
# Check for 5.
|
|
||||||
elif(len(findCommon(signal, newNums[4])) == 3 and len(findCommon(signal, newNums[1])) == 1):
|
|
||||||
newNums[5] = "".join(sorted(signal))
|
|
||||||
elif(len(signal) == 6):
|
|
||||||
# Check for 6.
|
|
||||||
if(len(findCommon(signal, newNums[1])) == 1 and len(findCommon(signal, newNums[8])) == 6 and len(findCommon(signal, newNums[4])) == 3):
|
|
||||||
newNums[6] = "".join(sorted(signal))
|
|
||||||
# Check for 9.
|
|
||||||
elif(len(findCommon(signal, newNums[7])) == 3 and len(findCommon(signal, newNums[4])) == 4):
|
|
||||||
newNums[9] = "".join(sorted(signal))
|
|
||||||
# Check for 0.
|
|
||||||
elif(len(findCommon(signal, newNums[4])) == 3 and len(findCommon(signal, newNums[8])) == 6 and len(findCommon(signal, newNums[1])) == 2):
|
|
||||||
newNums[0] = "".join(sorted(signal))
|
|
||||||
|
|
||||||
for num in output:
|
|
||||||
sortedNum = "".join(sorted(num))
|
|
||||||
displayedNum = newNums.index(sortedNum)
|
|
||||||
out = str(out) + str(displayedNum)
|
|
||||||
finalTotal += int(out)
|
|
||||||
print(finalTotal)
|
|
@@ -1,31 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
sumOfLowest = 0
|
|
||||||
map = []
|
|
||||||
|
|
||||||
def checkSurrounding(list, x, y):
|
|
||||||
possibleX = [x, x-1, x+1]
|
|
||||||
possibleY = [y, y-1, y+1]
|
|
||||||
|
|
||||||
for newY in possibleY:
|
|
||||||
if(newY < 0 or newY >= len(list)):
|
|
||||||
continue
|
|
||||||
for newX in possibleX:
|
|
||||||
if(newX < 0 or newX >= len(list[0])):
|
|
||||||
continue
|
|
||||||
if(list[y][x] > list[newY][newX]):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
with open('/home/jake/Documents/AoC-2021/Day-9/input.txt') as inputFile:
|
|
||||||
for line in inputFile:
|
|
||||||
lineList = list(line.strip('\n'))
|
|
||||||
lineList = [int(x) for x in lineList]
|
|
||||||
map.append(lineList)
|
|
||||||
|
|
||||||
for x in range(len(map[0])):
|
|
||||||
for y in range(len(map)):
|
|
||||||
if(checkSurrounding(map, x, y)):
|
|
||||||
sumOfLowest += (map[y][x] + 1)
|
|
||||||
|
|
||||||
print("Sum of risk levels is: " + str(sumOfLowest))
|
|
Reference in New Issue
Block a user