adventofcode/2020/day05/main.go

71 lines
1.2 KiB
Go
Raw Normal View History

2020-12-05 15:50:00 +00:00
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
}
}