main.go (1039B)
1 package main 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 ) 8 9 func readInput(filename string) (res []string) { 10 file, _ := os.Open(filename) 11 defer file.Close() 12 scanner := bufio.NewScanner(file) 13 for scanner.Scan() { 14 res = append(res, scanner.Text()) 15 } 16 return 17 } 18 19 func main() { 20 input := readInput("./input.txt") 21 // 919 22 fmt.Println(part1(input)) 23 // 642 24 fmt.Println(part2(input)) 25 } 26 27 func decodeSeat(line string) int { 28 var row, col int 29 for i := 0; i < 7; i++ { 30 row <<= 1 31 if line[i] == 'B' { 32 row += 1 33 } 34 } 35 for i := 7; i < 10; i++ { 36 col <<= 1 37 if line[i] == 'R' { 38 col += 1 39 } 40 } 41 return row*8 + col 42 } 43 44 func part1(input []string) (max_id int) { 45 for _, line := range input { 46 id := decodeSeat(line) 47 if id > max_id { 48 max_id = id 49 } 50 } 51 return 52 } 53 54 func part2(input []string) int { 55 listed_id := make(map[int]bool) 56 for _, line := range input { 57 listed_id[decodeSeat(line)] = true 58 } 59 max_id := part1(input) 60 for i := 0; i < max_id; i++ { 61 if !listed_id[i] && listed_id[i-1] && listed_id[i+1] { 62 return i 63 } 64 } 65 return 0 66 }