Files
kiss-vscode/projects/aoc/src/year2020/Seating.kiss

18 lines
769 B
Plaintext

// Airplane seating
(function search [:Array<String> letters min max rowOrColumn]
(if (= min max)
min
(let [middle (Math.floor (/ (+ min max) 2))]
(case [(letters.shift) rowOrColumn]
(["F" "row"] (search letters min middle rowOrColumn))
(["B" "row"] (search letters (+ 1 middle) max rowOrColumn))
(["L" "column"] (search letters min middle rowOrColumn))
(["R" "column"] (search letters (+ 1 middle) max rowOrColumn))
(otherwise (throw "invalid search call"))))))
(function seatId [:String boardingPass]
(+
(* 8 (search (.split (boardingPass.substr 0 7) "") 0 127 "row"))
(search (.split (boardingPass.substr 7) "") 0 7 "column")))