2020 Day 5 Complete
This commit is contained in:
70
2020/day05/main.go
Executable file
70
2020/day05/main.go
Executable file
@@ -0,0 +1,70 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
|
||||
seats := make(map[int]Seat)
|
||||
var topSeat int
|
||||
for k := range inp {
|
||||
row, col, seat := findSeatFromId(inp[k])
|
||||
seats[seat] = Seat{
|
||||
Row: row,
|
||||
Col: col,
|
||||
Seat: seat,
|
||||
}
|
||||
if seat > topSeat {
|
||||
topSeat = seat
|
||||
}
|
||||
}
|
||||
fmt.Println("# Part 1 - Top Seat:", topSeat)
|
||||
for k := range seats {
|
||||
_, tOk := seats[k-1]
|
||||
if !tOk {
|
||||
_, bOk := seats[k-2]
|
||||
if bOk {
|
||||
fmt.Println("# Part 2 - Missing Seat:", k-1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Seat struct {
|
||||
Row int
|
||||
Col int
|
||||
Seat int
|
||||
}
|
||||
|
||||
func findSeatFromId(id string) (int, int, int) {
|
||||
rowBeg := 0
|
||||
rowEnd := 127
|
||||
colBeg := 0
|
||||
colEnd := 7
|
||||
for k := range id {
|
||||
switch id[k] {
|
||||
case 'F', 'B':
|
||||
rowBeg, rowEnd = findChunk(rowBeg, rowEnd, id[k] == 'F')
|
||||
case 'R', 'L':
|
||||
colBeg, colEnd = findChunk(colBeg, colEnd, id[k] == 'L')
|
||||
}
|
||||
}
|
||||
|
||||
return rowBeg, colBeg, (rowBeg * 8) + colBeg
|
||||
}
|
||||
|
||||
func findChunk(beg, end int, front bool) (int, int) {
|
||||
if beg == end {
|
||||
return beg, beg
|
||||
}
|
||||
if front {
|
||||
return beg, beg + (end-beg)/2
|
||||
} else {
|
||||
return beg + (end-beg)/2 + 1, end
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user