parent
4210d076ec
commit
60df9b28e8
@ -0,0 +1,117 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
|
||||||
|
from aoc import get_input |
||||||
|
import re |
||||||
|
|
||||||
|
seats = get_input(5).splitlines() |
||||||
|
curSeats = seats |
||||||
|
|
||||||
|
test = "BBFFBBFRLL" |
||||||
|
|
||||||
|
maxRow = 128 |
||||||
|
maxCol = 8 |
||||||
|
|
||||||
|
seatMap = [ [seat for seat in range(0, maxCol)] for seat in range(0, maxRow) ] |
||||||
|
|
||||||
|
def toList(string): |
||||||
|
list = [] |
||||||
|
list[:0] = string |
||||||
|
return list |
||||||
|
|
||||||
|
def splitList(l): |
||||||
|
half = int(len(l) / 2) |
||||||
|
return l[:half], l[half:] |
||||||
|
|
||||||
|
def parseRows(x, row): |
||||||
|
no = None |
||||||
|
for coord in x: |
||||||
|
if(coord == "L"): |
||||||
|
row, no = splitList(row) |
||||||
|
elif(coord == "R"): |
||||||
|
no, row = splitList(row) |
||||||
|
|
||||||
|
return row |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def parseThing(x:str): |
||||||
|
|
||||||
|
regexThing = re.split(r"(R|L)", x) |
||||||
|
|
||||||
|
rowsList = regexThing[1:] |
||||||
|
rows = "" |
||||||
|
for char in rowsList: |
||||||
|
rows += char |
||||||
|
|
||||||
|
rows = toList(rows) |
||||||
|
|
||||||
|
cols = regexThing[0] |
||||||
|
seat = toList(cols) |
||||||
|
|
||||||
|
seats = seatMap |
||||||
|
no = None |
||||||
|
|
||||||
|
curCol = [col for col in range(0, 128)] |
||||||
|
|
||||||
|
for coord in seat: |
||||||
|
if( coord == "F" ): |
||||||
|
seats, no = splitList(seats) |
||||||
|
|
||||||
|
spl = splitList(curCol) |
||||||
|
curCol = spl[0] |
||||||
|
|
||||||
|
elif( coord == "B" ): |
||||||
|
no, seats = splitList(seats) |
||||||
|
|
||||||
|
spl = splitList(curCol) |
||||||
|
curCol = spl[1] |
||||||
|
|
||||||
|
else: |
||||||
|
break |
||||||
|
|
||||||
|
chair = parseRows(rows, seats[0])[0] |
||||||
|
|
||||||
|
return curCol[0], chair |
||||||
|
|
||||||
|
|
||||||
|
def getSeatID(coords): |
||||||
|
return coords[0] * 8 + coords[1] |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Part 1 |
||||||
|
|
||||||
|
high = ((0,0), 0) |
||||||
|
|
||||||
|
usedSeats = seatMap |
||||||
|
|
||||||
|
for seat in seats: |
||||||
|
coord = parseThing(seat) |
||||||
|
|
||||||
|
seatid = getSeatID(coord) |
||||||
|
|
||||||
|
usedSeats[coord[0]][coord[1]] = False |
||||||
|
|
||||||
|
if(seatid > high[1]): |
||||||
|
high = (coord, seatid) |
||||||
|
|
||||||
|
|
||||||
|
# Part 2 |
||||||
|
|
||||||
|
mySeat = None |
||||||
|
|
||||||
|
for s in range(len(usedSeats)): |
||||||
|
for r in range(0, 8): |
||||||
|
if(usedSeats[s][r]): |
||||||
|
if( s in range(1, 126) ): |
||||||
|
#print("(FIRST) None at", s, r) |
||||||
|
mySeat = mySeat or (s, r) |
||||||
|
break |
||||||
|
|
||||||
|
if(mySeat): |
||||||
|
break |
||||||
|
|
||||||
|
|
||||||
|
print("Part1:", high[1]) |
||||||
|
print("Part2:", getSeatID(mySeat)) |
Loading…
Reference in new issue