18 lines
769 B
Plaintext
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")))
|