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