diff --git a/5/input.txt b/5/input.txt new file mode 100644 index 0000000..ed53a66 --- /dev/null +++ b/5/input.txt @@ -0,0 +1,867 @@ +FFBFFFBLLL +BFBFBBFRLR +FFFBFFBLLL +FFBFBBBRRL +BFFFBBFLRR +BFBFBFBLLL +BFFFBFFLLL +FFFFFBFLLR +FBFBFFBRLL +BBFFBFBLRL +FFFBBBBLRL +BFFFFFFRLL +FBBBBFFRLL +FBFBFBFLLL +BBFFBFFLRR +BFBBFFBLRL +FBFFFBBLLR +BFFFFFBLRL +BBFBFBBLLL +FFFBBBBLRR +FBFFBFFLRR +BFFBFBFLRL +BFBBFFFLRR +FBFFBBBRLR +FBFFBBBRRR +BBFBFBFLRR +BFFBBFFLLL +BFFBBFBRRL +FFFBFFBLRR +FBBBBBBLLL +FFBFFFFRRL +BBFBFBBRLR +BFFBFFFLRR +BBFFFFBLRL +BBFFBFBLLL +BBFFFFFRLR +BFBFBBFLRL +FFFBFFBRLR +FFFFBFFLLL +FFBBFBFRLL +BFFBBFBRLL +BFFFBFFRLL +BFFFBBFRLR +BFFFFFBRRR +BFBBBFFRRL +FFBFBFFRRL +FBBFBBBRRR +FFFBBBBRLR +FBFBFBFRLR +FFBFFFFLLL +FBBFFFBLRR +BFBFFBBLLR +FBFFBBBRLL +FBFFBBFRRL +FBBBFFBLRL +BBFBFBFLLL +BFFBFBBLLL +BBFFBFBRRR +FFBBFFFLRL +BFFBBBBLRL +FFFBBFFLRL +FFBBBBBLRR +FBFFFBBRLR +BBFBFFFRLL +FFBFFBFLRL +FFBFBFFLLR +FBBBBFBRRR +FBFBFBFRRR +FBBFBBBLRL +BBFFFBBLRL +BFFBFBBLLR +FBFBBFFLRR +FFBBFFFRLR +FFFFBBFLLR +FBFFBFBRRR +FFFBFFFRLR +FBFFBFBLRL +FBBFFFFRRR +BFFFBFBLLR +FFFBBFFRLL +FFBFBFBLLL +FFBFBBFRLL +BFFBBBBRRR +BFFBFFFLRL +FFFFFFBRRL +FFBBFBBRRR +FFBFBFFRLR +FBBFFBBLRR +BFFBFFBRLR +BBFBFFFLRL +BFBFBFFLRR +BFFBBFFRLL +FFBFBBFLLR +BBFBFFFLRR +FFFFBBBLRL +FFFBFBFRLR +BFBFFFBLRL +BFFFBBFLRL +FFFFBFFRRL +BFBBBFBRLL +BFBBBFFRRR +BFFFBFBLRL +BFFBFFBRRL +FBBBFBFLLL +FBBFBBBRLR +FFBBBFBRLR +FFFBBFBLLL +BFFFFFBRLL +FBFBFFBLRR +FBFFFBFLLR +FBBFFBFRRL +BFFFFFFRLR +FFBFBBBRLL +BFFFFFBLLR +FFFBFBBLRL +FBBBFFBLRR +FBBFFBFRLR +FBBFBBFRRR +FFBFFBFLLL +BFBBBFBLRL +FBFBBBBRRR +FBBBFBFRRL +FBBFBBBRRL +BBFBFFFRLR +BFBFBBBRLL +FFBBFFFLLR +FBFFFFFRRR +BFBBFFBRRR +FBBBBFBLRL +BFBBBFBLLR +FBFBFBFLRR +FBBBFBBLLR +BFFFBFFRRR +BBFBFBFRLR +BBFFBFBRRL +FFBBBFFRRL +FBFFBFBLRR +BBFFBBBRLL +FBFFBFFLLR +FFFBFBFLLL +FFBBBFBLLL +BFBFFBFRRR +FBFBBFBLLR +BBFFFFFLLR +BBFBBFFRLL +FFFFBFBLLR +BBFFBBBLRL +FBBFFFBRLR +BFFFFBFLRL +FFBBFFBRRR +BBFFFBFLLR +BBFFFBBRRR +FBBFFBFRLL +BFFBFFBLRR +FFFBBFBRLL +FBBFFBBRLL +BFFFBFBRRR +FBFBFFFLRL +BFBBFBBRRR +FBBBFFBLLL +FBBFFBFRRR +FBFBFFFRRR +FBFFFFFRLR +FBBBFBBLLL +FFFFBFFLRR +BBFFFFBLLR +FFBFBBFLRL +FBFFFFFLRR +BFFBBFBLLL +FFBBFFFLRR +BFFFFFFLRL +BFBFBBBLRL +BBFBFFBRLL +FFBFBFBRLL +FFFFBBBLLL +FFBBBFFLRR +BFFBBBBLLR +FFFBFFBLRL +FBBBFBFRLR +FFBBFBFLLL +BBFFFBBLRR +BFBBFFFRRL +FFBBFFFRRL +BFBBFFFLRL +FBBFFFFLLL +BBFFFFBRRL +FFBFBFFLRL +FFBBFFBLLR +BFFFFBFRLR +BBFFBBBRLR +FBFBBBFRRR +FBFBFFFRRL +BBFBBFFRLR +FBFBBBFLLR +BFBFBBBRLR +BFBBBBFLRR +BFBBBBBLRL +FBFFFFFRLL +BFBBFBBLLR +BFFBFFBLRL +FBBFBBFRLR +FBBBFFBRRL +BFFFFFBLRR +BBFFFBFRRR +BFBFFFFLRR +BFBFBFFRRL +BFBBBFBRRL +FFFFFBFLLL +FBBFFBFLLR +FFBFBFBLLR +FBFFBBFLLL +BFFBFFFLLL +FFBFBFBRRR +FBBFBFBLRL +FBFFFFFRRL +FFFBBFBRLR +BBFBFFBLLL +FFBFFFBLRL +FFBBBBFLRL +FFBFFBFRRL +FBFFFFBLRR +FBBBBBBRRR +FFFFFBBLLL +FBFBFBBLRR +FBFFBBBRRL +FFBFBBBLRR +BFBFFBBRRL +BFBFFFBRLL +FFBBBFFRRR +BFFFFBBRRR +FFFBBBBLLR +BFBFBFBRRR +FFFBBFFLRR +FFFBFBFRRR +FBBBBFFLLL +BBFBFBBLRR +BBFBFBFRRL +BBFFFBBRLL +FBBBBFBLRR +FBBFBBBLLL +FFBBBFBLRL +FBBFBFFRRL +FBFFFFBRRL +BFFFFFFLRR +BBFFFBFLLL +FFFFBBFRLR +FBFFBFFLLL +FFBFBFBLRR +FFBBBFBLRR +FFFFBFBLRR +BBFBFFBLRR +BBFFFFFRRR +FBBBFFBRLL +FBBFBBFRRL +FFBFBBBRRR +BFFBFBBRLR +FFFBFFFRRL +BFBFFFFRLR +FFBFFFFRLL +FBFBBFFRLL +FBFBBBBLLL +BBFFBBFRRL +FFFFFBBLRR +FFBBFBBLLL +FFFBBBBRLL +FFFBFBBRLL +BFBFFBFRLR +FBBBFBBRLR +FFFBFBFLRR +BFFFBBBRLR +FFBBFBBLRR +FFBFBBFRLR +FFFFFBFRLL +FBBFBFFLLR +FFFFBFBRLL +BFFBBFFLLR +BFBBBBBLRR +FBFBBFBRRL +FBFBBFFRRL +BBFFBBBLLL +BFFBBBBRRL +FBBBFBBRRL +BBFBBFFRRL +FBBFBFBRRL +FBFFBFFRRR +FFFFBBBRRL +FFFBBBBRRL +BFBBFFFRRR +FBBBFBBRLL +FFBFFBFRRR +FFFFBFBLLL +FFBFFBBLLR +FBBBFBFLRL +FFFFBBFRLL +BFFFFBFLLL +FFBBFBFLRL +FBFBFBBRLL +FFBBBFFLLR +FFFBFFBRRR +FBFFBBBLLR +FFFBBFBLLR +BFBBBFFLLL +FFFFBFBRRL +BFFFBBBLRR +FFFBBBBRRR +BBFBFBBLRL +FBFFBFFRLL +FBFBBBBRRL +FBBBBBBRLR +FFFBFBFLLR +FFFFBBFRRR +BFBFBFBRRL +FFFBFFBRLL +FFBBBBFRRR +BFFBBBFRRL +FBBFFBBRRR +FBFFBBFLRR +FBFFFFBLRL +FBBBFBBLRR +BBFBFBBRRL +FBBBFFBLLR +FBFBBBFRRL +BFFFBFBRLL +BFFBBFFRRL +FFBBBBFLRR +FFBBFBBLRL +FFBFFFFLRR +FBBFBFFRLL +FFBBBBFLLL +FFBFFFBRRL +BFFBFFFLLR +BBFFFBBRLR +FFBFBFFRLL +FBFBFBBRRL +FBBBFBBLRL +FBFBFFBRLR +FBFFBBFRRR +FBFBFBBLLR +FBBBBBFLRL +FBFBBFFRRR +FBFFBBBLRR +BFFBBFFLRL +FBFBFFBRRR +FFFFBFBRRR +BFBFBFBLLR +BFFFFFBRLR +BFBBBBBLLL +FFBBFBFLRR +BFBBBFFLRR +FFBBBFFLLL +FBBFFFFLRL +BFBFBFFRLR +FFFBFBBRRL +FBFFBBBLRL +FBFBFBBRRR +FBFFFBFLLL +BFFBFFFRRL +BFFBBBBRLR +FFFFFBFRRR +FBBBFFFLRL +BFFFBFBRRL +FFFBBBFLLL +FFBFFFBLRR +FBFBBFFLLL +FBBBBFBRLR +FFFBFFBLLR +FFBFFBBRLR +BFFFBBFRRR +BBFFFFFLRL +FBFFFFBRLR +BFBFBBBLLL +FBFBFBFLLR +BFFFFFBLLL +BFFBFBFRLL +BFFBFBBRRR +BFBBFBBRRL +BBFBBFBRRL +BFBBFFBRLL +BBFBFBBRLL +FFBFFFFLRL +FFBBFBFRLR +FBBFFFFRRL +BFFFFFFRRR +FBBFFBFLLL +BFFBBFBLRR +FBFBFFBLRL +BFBFFFBRLR +BFBFFBFLLL +FFBBBFBRRL +BFFFBFFLLR +FBFBFBBLLL +BBFFFBBLLR +BFBFFBFLRR +FBFFFBBLRL +FBFBBBFRLR +BFFFBFFRLR +BBFFBBFRLR +FBBFBBFLLR +BFFFBBFLLR +FFBFFFBLLR +FBBBBBFRRR +FFFBFFFLLL +BFBFFFBRRL +BFBBBBFRLL +FFBFBBBLLR +BFBBFBFLLR +FBFFBBFLRL +FFFBFFFLLR +BFBFBFBLRL +BBFFBBBRRR +FBFBBFBRLL +FFFFBFFRLR +FBFFBBFRLL +FBFFFBFLRR +FBBFFFBLRL +FBBBBBFLLR +FFFBFBBLLR +BBFFFFBRRR +BFBFFBBRRR +BFFBFBBRRL +BBFFBBFRLL +BFFFFBFRRL +BFFFBBBRRL +FFBBFFFLLL +FFFFBBBLLR +BBFFBBFLLR +FFFBFBBRRR +BBFFFBFRRL +FFBBBBFRLR +FBBFFFBRRR +BFFFBFBLLL +FFBFBFBLRL +FBFFFFBLLR +BBFBFFBRRL +BFBBBFFRLL +FBFBFFFLRR +FBFBFFFLLR +BFBFBBBRRL +FBFFFFFLLR +BFBFFFFLRL +FBBFBBBRLL +BFBFBFFLLL +BFBBFBBLRL +FBFFFBBLLL +BFFFFFFLLL +BBFBFFBLLR +FFBFBBBLLL +FBBBBBBRLL +BFFFBBBLLR +FBFBBBBLRR +FBBFFFBLLL +FFFBFBFRRL +FFFFBBFRRL +FBFFFBFRRL +BBFFFBFRLR +FFFBBFFLLL +FFFFBFFLRL +FBFBBBBLLR +FBBBFFFRRR +FFFBBBFLRR +BFBFBBFRRR +BBFBFFBRLR +BBFBBFBRLL +BFFBBFBLRL +FBFBFBFRRL +BFFFFFFRRL +BBFFFFBRLL +BFFBBFBLLR +BFFBFBFLRR +FBFBFBBRLR +BFBFFBBLRL +FFFBBBFLRL +FBBBFFFLRR +BBFFFFFRRL +FFFBFBBLRR +FFBFFBBRLL +FFBBBBBLLR +BFBBFBBLLL +BBFBFFBRRR +FBFFFFBRRR +FFBBBBBRRR +FBFBBFBLRL +FFFBBBFRLR +BBFFBFFLLR +FFFFFBBRLL +BFFFFFBRRL +FBBBFFFRLL +FFBBBFBRRR +BBFFFBBRRL +FFFBFFFRRR +FFFBBBBLLL +BFBFFBFLRL +BFBBBBFRLR +FBBFBFBLRR +BFBFFFBLRR +FBBBBFFRRR +BFBFBFFRRR +BBFBFBFRRR +FBBFBFBLLR +FFFBBFBRRL +BFFBFFBLLR +BFBFFFFRRR +FBFFBFFRLR +FBFFFBBRLL +FBFFBFFRRL +FBFBFFBLLR +FFFBBFFRRL +FBFBFFFLLL +BFFBFBFLLR +FBBFBBFLRR +BBFFFFBRLR +BFFFBFFLRL +FBBFBFFLRL +FFBFFFFRLR +FFBFFFFLLR +FBBFBFBRLR +FFFFBBFLRL +FFFFBBFLLL +FFFFBBBRLR +BFBFBFFLRL +BFBBFFBRLR +FBFFFFBRLL +BFFFBBFRLL +FBFBFBFRLL +FFFBBFBLRR +FFBFBBBLRL +BFFBFFFRLL +BFBBFFBLLR +BBFFBFBLRR +BFFBBBFLRL +FBBFFFFLRR +BFBBBBBLLR +FFFFFBBLRL +FFBBBBBRLR +FFFFFBBRRR +BFBBBBBRLL +FBBBBBBLRL +BBFFBBBRRL +BFBBFBFLLL +BBFFFBFRLL +FFFBBFFRLR +FFFBFFBRRL +BFFFFBFRLL +BFFBBFFRRR +BFFFBBFRRL +FBBFFFFRLR +BFFBFFBRRR +BFBBFFBRRL +BFFFBFBLRR +BFFBBBBLRR +FBBBFBFLRR +BFBBBFBRLR +FFBBBFFLRL +FFFFBFFLLR +FBBFFBBRLR +BFFBFFBLLL +FBBBBFFLLR +FBBFBFBLLL +BFBFFFFLLL +FBBBFBFRRR +FBFFFBFRLL +FFBBBBBLLL +BBFBBFFLLR +FFBFBBBRLR +BBFBFFFLLL +FFFFFBBRRL +BFFBBBFLLL +BFFBFFFRLR +FFBBBBFRRL +BFBBBBBRLR +BFFBFBFLLL +BFFBBFFLRR +FBBFBBFRLL +BFBFBBFLLR +FBFFFBFRRR +FBFBBBFLRL +BFFBFBBLRL +BBFBBFBLRR +BBFBFFBLRL +BBFBFBBRRR +FBBBBFBRLL +FBFBFBBLRL +BBFBFBFLLR +FBFFBFBRLR +FFBBFFBLRR +FFFBFBFLRL +BFFBFBBRLL +FBBBBFFLRR +BFBBFFFLLR +BFBFFBFRLL +BBFBBFBLLL +FBBBBFFLRL +FBFBFFBLLL +BFFBBFFRLR +FBBFFFBLLR +BFFBFBFRLR +FBBFFBFLRL +FFBFFBFRLL +BFFFBFFRRL +BFBBFBFRRR +FFBBBFFRLL +FBBBBBFLLL +BFBBFFBLRR +FFFFFBBLLR +FFFFFFBRLR +FBBFBBFLRL +BFBFBBFLRR +BBFFBBBLRR +FFFFFBFRRL +BFFFFBFRRR +BFFFBFBRLR +BFFFFBBLLR +FBBBFBFRLL +BFFFBBFLLL +BFBBBFFLLR +BBFFBFFRLR +FBFBFBFLRL +FFBBFFBLRL +BFBBBFBLLL +FFFFBFBRLR +FBFBFFBRRL +BFFFFBFLRR +BFFBBBFRLR +FFFFBBBRLL +FBBBBFFRLR +BFBFBFFRLL +FBBBBBFRLL +BFBFFFBRRR +FBBBBBFRLR +BFFBFFFRRR +FFBBFFBRRL +BFBBBBFLRL +FFFBBBFRRL +FFFFBFFRRR +FFFBBFBRRR +BBFBFFFLLR +BFBBFBBRLL +BFFFFBBLRR +BBFFFBBLLL +FFFBBBFRRR +FFBFBBFRRL +FBFBBBFLRR +FBFFBFBLLL +BFFBFBBLRR +FFBFFFBRLL +FBBBBFFRRL +BBFBFFFRRL +FFBFFBFLRR +BFFBBFBRLR +FFBBBFBLLR +FBBFBFFRLR +BBFBBFBRLR +BFFBFFBRLL +FFBFFFFRRR +BBFFFFFLRR +FFBFBFBRRL +BBFFBFBRLR +FBBBBFBLLL +FBBFFBBLLL +FFBFFBBLLL +BFBFBBFRRL +FBFFFBBLRR +FBFFBFFLRL +BFBBBFFLRL +FBFBBFBLRR +FBFBBBFLLL +FFBBFBBLLR +FFFFBFFRLL +BBFFFFFLLL +FFBBFBFRRL +BFFFBFFLRR +FFBFBBFLRR +FBBFBFBRLL +BFFBBFBRRR +FBFBBFFLLR +BFBBBFFRLR +BBFFBFFRRL +BBFFBBFRRR +BFBBFFBLLL +BFBFBFBRLR +FBFFFBFRLR +FBFBBFBRLR +FFBBBBBLRL +BFFFBBBLLL +FBFFBFBRLL +FBFFFBBRRL +BBFBBFFLLL +BBFFBFBLLR +FBFBBFBRRR +FBFBBBBRLR +FBFBBFFRLR +BFFBBBFLRR +FBBBFFBRLR +BFBBBBFLLL +FFFBFBFRLL +BBFBFBBLLR +FFBFFBBLRL +FBBBFFFRLR +FFBBFBBRRL +BFBFBBBLRR +BBFBBFFRRR +FBBBBBFLRR +BBFBFBFLRL +BFFFFBFLLR +FBFBFFFRLR +FBBBBFBRRL +BFBFFFFLLR +FFBFBFFLRR +BFBFFFBLLR +FFBFBBFLLL +BBFBBFFLRR +BBFFFBFLRR +BFBBFFFRLL +FFFFBBBLRR +BFBFBBFRLL +BFBFFBBRLL +FFBBBBBRLL +BBFFBFFLLL +BFBBBBFRRL +FBBBFFFLLL +FFBFBFFRRR +BFBFFBBRLR +FFFFBFBLRL +FBFFFBBRRR +BFBFFBFRRL +BFBBFBFRLR +FBFBBBBRLL +FFBBFFFRRR +BFBFFFBLLL +FFFBBFFLLR +FFBFBFBRLR +FBBBBBBRRL +FFBBFBBRLL +FFBFFFBRLR +FBBFFFBRLL +FBBBFBBRRR +BFFFBBBRLL +FBBBFBFLLR +BBFFBFFLRL +FBBFBBBLLR +FBBBBBBLRR +BFBBBBBRRR +BFBFBBBRRR +BFBBFFFLLL +FFBBFFBRLL +BBFBBFBLLR +FBFFBBFLLR +FFFFFBFRLR +BBFFFBFLRL +FBBFFBFLRR +FFBFFBFRLR +FBFFBFBLLR +FFFBFBBLLL +BBFFBBFLRR +BBFFBFFRLL +FBBFBFFLLL +BFFFFBBRLL +FFBBFFBLLL +FFBFFBBRRL +BFFBBBFRRR +FBBFBFFRRR +BFFBBBBLLL +FFBBFBBRLR +FFBBFFBRLR +BFFFFBBRRL +FFBBBBBRRL +FBFFBFBRRL +BFFBFBFRRL +BBFBBBFLLL +FBBFFBBLRL +BFBFBFBRLL +FBFFFFFLRL +FFFBFFFLRR +FBBFBBBLRR +FFFFFBFLRR +FBBBBFBLLR +BFFBFBFRRR +BFFFFBBLLL +FFFFBBFLRR +BFBBFBFLRR +FFBFFBBLRR +BBFFFFFRLL +BFBFBFFLLR +BBFBFBFRLL +BBFFBBFLLL +FBFBBBFRLL +FBBFBBFLLL +BFBBFFFRLR +BFBFFBBLLL +FBBBBBFRRL +FFBBFBFRRR +FBFFFFBLLL +FFFFFBBRLR +BFBBFBBRLR +BFBBBBFLLR +BFFBBBFLLR +FFBBFBFLLR +FFBBBFBRLL +FFFFBBBRRR +FBBFFFFRLL +FFBFFFBRRR +FBBFBFBRRR +FFBBBFFRLR +BFBFFFFRLL +FBFFFBFLRL +FFBFFBBRRR +FBFBBFBLLL +BFBFBBFLLL +FFBBBBFLLR +FBFBBBBLRL +BFBBFBFLRL +BFFFBBBLRL +BFBBBBFRRR +FFFBBBFRLL +FFBFBFFLLL +BFBFFFFRRL +FFFBFBBRLR +BFBFBFBLRR +FBFFBBFRLR +BBFFFFBLLL +BFFBBBBRLL +BFFFFBBLRL +BBFBBFBRRR +BFFFFFFLLR +BBFFBBBLLR +FBBFFFFLLR +BBFFBFBRLL +FBBBFFBRRR +FBBFFBBLLR +BBFFFFBLRR +FBFFFFFLLL +FBBFBFFLRR +BFBBFBFRLL +BFBBBFBRRR +FFBFBBFRRR +FBFBFFFRLL +FFFBBFFRRR +FFFFFBFLRL +BFBFFBFLLR +FBBBFFFRRL +FBBBBBBLLR +FBBFFFBRRL +FFBBFFFRLL +BBFBFFFRRR +FFFBBFBLRL +BFFBBBFRLL +FFFFFFBRRR +BFBFFBBLRR +BBFFBBFLRL +FFFBBBFLLR +BFBBBFBLRR +FBBFFBBRRL +FFBFFBFLLR +BBFBBFBLRL +FFFBFFFRLL +BFBFBBBLLR +FFFBFFFLRL +BFFFFBBRLR +BBFFBFFRRR +BFBBFBFRRL +BBFBBFFLRL +FFBBBBFRLL +FBFFBBBLLL +FBFBBFFLRL +BFFFBBBRRR +BFBBBBBRRL +FBBBFFFLLR \ No newline at end of file diff --git a/5/main.go b/5/main.go new file mode 100644 index 0000000..5b8a859 --- /dev/null +++ b/5/main.go @@ -0,0 +1,57 @@ +package main + +import ( + "bufio" + "fmt" + "os" +) + +func main() { + file, _ := os.Open("input.txt") + defer file.Close() + + maxSeat := 0 + seats := [127*8 + 7]bool{} + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + seat := seat(scanner.Text()) + if seat > maxSeat { + maxSeat = seat + } + seats[seat] = true + } + + fmt.Println("Part 1:", maxSeat) + +outerloop: + for i := 1; i < 127; i++ { + for j := 0; j < 8; j++ { + if seat := seatID(i, j); !seats[seat] && seats[seat-1] && seats[seat+1] { + fmt.Println("Part 2:", seat) + break outerloop + } + } + } +} + +func seat(input string) int { + row := partition(input, 0, 127, 'F', 'B') + column := partition(input, 0, 7, 'L', 'R') + return seatID(row, column) +} + +func seatID(row, col int) int { + return row*8 + col +} + +func partition(input string, min, max int, lower, upper rune) int { + for _, c := range input { + if c == lower { + max -= (max - min + 1) / 2 + } else if c == upper { + min += (max - min + 1) / 2 + } + } + return min +}