Solve AOC day 5 part 1
This commit is contained in:
15
projects/aoc/src/year2020/Seating.kiss
Normal file
15
projects/aoc/src/year2020/Seating.kiss
Normal file
@@ -0,0 +1,15 @@
|
||||
(defun 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"))))))
|
||||
|
||||
(defun seatId [:String boardingPass]
|
||||
(+
|
||||
(* 8 (search (.split (boardingPass.substr 0 7) "") 0 127 "row"))
|
||||
(search (.split (boardingPass.substr 7) "") 0 7 "column")))
|
||||
Reference in New Issue
Block a user