38 lines
913 B
Haskell
38 lines
913 B
Haskell
{-# LANGUAGE LambdaCase #-}
|
||
module Main where
|
||
|
||
import Data.Functor
|
||
import Data.List
|
||
import Data.List.Extra
|
||
|
||
data ℜ where
|
||
None :: ℜ
|
||
Num :: Int -> ℜ
|
||
deriving Eq
|
||
|
||
instance Show ℜ where
|
||
show None = show '.'
|
||
show (Num n) = show n
|
||
|
||
parse :: String -> [ℜ]
|
||
parse s = zip [0..] (trim s) >>= \(i,a) -> replicate (read [a]) (if even i then Num (i `div` 2) else None)
|
||
|
||
sort1 :: [ℜ] -> [ℜ]
|
||
sort1 s
|
||
| None `notElem` s = s
|
||
| otherwise = case last s of
|
||
None -> sort1 $ init s
|
||
n -> sort1 $ takeWhile (/= None) s ++ [n] ++ drop 1 (dropWhile (/= None) (init s))
|
||
|
||
sort2 :: [ℜ] -> [ℜ]
|
||
sort2 = undefined
|
||
|
||
solve :: ([ℜ] -> [ℜ]) -> [ℜ] -> Int
|
||
solve f s = let fixed = (\(Num n) -> n) <$> f s in
|
||
sum $ zipWith (*) fixed [0..]
|
||
|
||
main :: IO ()
|
||
main = readFile "inputs/9.example" <&> parse >>= \i ->
|
||
print (solve sort1 i) >>
|
||
print (solve sort2 i)
|