day1 done
This commit is contained in:
50
day1/Main.hs
Normal file
50
day1/Main.hs
Normal file
@ -0,0 +1,50 @@
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
module Main where
|
||||
|
||||
import Data.List as L
|
||||
import Data.Maybe
|
||||
import Safe
|
||||
|
||||
data InputOptions = Elf1
|
||||
| Elf3
|
||||
| Quit
|
||||
|
||||
|
||||
getInput :: IO InputOptions
|
||||
getInput = do
|
||||
putStrLn "Only get top Elf or sum of top 3 Elf? (1/3/q)"
|
||||
getLine >>= \case
|
||||
"1" -> return Elf1
|
||||
"3" -> return Elf3
|
||||
"q" -> return Quit
|
||||
_ -> putStrLn "not understood" >> getInput
|
||||
main :: IO ()
|
||||
main = getInput >>= \case
|
||||
Quit -> putStrLn "bye!"
|
||||
Elf1 -> interact $
|
||||
(<>"\n")
|
||||
. show
|
||||
. maximum
|
||||
. fmap (sum . mapMaybe (readMay :: String -> Maybe Integer))
|
||||
. splitOn ""
|
||||
. lines
|
||||
Elf3 -> interact $
|
||||
(<>"\n")
|
||||
. show
|
||||
. sum
|
||||
. take 3
|
||||
. sortOn negate
|
||||
. fmap (sum . mapMaybe (readMay :: String -> Maybe Integer))
|
||||
. splitOn ""
|
||||
. lines
|
||||
|
||||
|
||||
-- | Split a list into sublists delimited by the given element.
|
||||
--
|
||||
-- From: https://hackage.haskell.org/package/haskell-gi-0.26.2/docs/src/Data.GI.CodeGen.Util.html#splitOn
|
||||
splitOn :: Eq a => a -> [a] -> [[a]]
|
||||
splitOn x xs = go xs []
|
||||
where go [] acc = [reverse acc]
|
||||
go (y : ys) acc = if x == y
|
||||
then reverse acc : go ys []
|
||||
else go ys (y : acc)
|
2250
day1/input
Normal file
2250
day1/input
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user