1
0
Fork 0
advent-of-code/2020/05/day5.hs
Sloane Perrault 4cd13c0129 solve: day 5
- solve: day 5, part 1
 - solve: day 5, part 2
2022-09-21 09:19:52 -04:00

28 lines
867 B
Haskell

module Day5 (BoardingPass(BoardingPass), seatId) where
data BoardingPass = BoardingPass { row :: Int, column :: Int }
deriving (Show)
binaryStringToInt b = binaryStringToInt' (reverse b) 0 0
where
binaryStringToInt' [] _ acc = acc
binaryStringToInt' ('1':bs) m acc = binaryStringToInt' bs (m+1) (acc + 2^m)
binaryStringToInt' ('0':bs) m acc = binaryStringToInt' bs (m+1) acc
charToBinaryDigit 'F' = '0'
charToBinaryDigit 'L' = '0'
charToBinaryDigit 'B' = '1'
charToBinaryDigit 'R' = '1'
stringToInt = binaryStringToInt . map charToBinaryDigit
readBoardingPass str =
let (str', rest) = splitAt 10 str
(rowS, colS) = splitAt 7 str'
in
(BoardingPass (stringToInt rowS) (stringToInt colS), rest)
instance Read BoardingPass where
readsPrec _ str = [readBoardingPass str]
seatId (BoardingPass row column) = row * 8 + column