package main import "core:os" import "core:fmt" import "core:strings" import "core:strconv" Range :: struct { // Inclusive start: int, end: int, } rangeFront :: proc(range: Range) -> Range { return { range.start, range.start + ((range.end - range.start) / 2) }; } rangeBack :: proc(range: Range) -> Range { return { range.start + ((range.end - range.start) / 2) + 1, range.end }; } rangeLower :: rangeFront; rangeUpper :: rangeBack; calculateSeatId :: proc(row, col: int) -> int { return (row * 8) + col; } main :: proc() { input, err := os.read_entire_file("input.txt"); inputStr := string(input); lines := strings.split(inputStr, "\n"); highestSeatId: int; seats: [128 * 8]bool = {}; for line in lines { line := strings.trim_space(line); rowRange := Range { 0, 127 }; colRange := Range { 0, 7 }; index := 0; for c in line { if index <= 6 { switch c { case 'F': rowRange = rangeFront(rowRange); case 'B': rowRange = rangeBack(rowRange); } } else { switch c { case 'L': colRange = rangeLower(colRange); case 'R': colRange = rangeUpper(colRange); } } index += 1; } row := rowRange.start; col := colRange.start; seatId := calculateSeatId(row, col); seats[seatId] = true; if seatId >= highestSeatId do highestSeatId = seatId; } fmt.println(highestSeatId); for i := 1; i < len(seats) - 1; i += 1 { if seats[i - 1] == true && seats[i] == false && seats[i + 1] == true { fmt.println(i + 1); return; } } }