day1 done
This commit is contained in:
parent
8d1416daa7
commit
5ce1fcfad1
37
AoC2022.cabal
Normal file
37
AoC2022.cabal
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
cabal-version: 2.4
|
||||||
|
name: AoC2022
|
||||||
|
version: 0.1.0.0
|
||||||
|
|
||||||
|
-- A short (one-line) description of the package.
|
||||||
|
synopsis: Solutions for Advent of Code 2022
|
||||||
|
|
||||||
|
-- A longer description of the package.
|
||||||
|
-- description:
|
||||||
|
|
||||||
|
-- A URL where users can report bugs.
|
||||||
|
-- bug-reports:
|
||||||
|
|
||||||
|
-- The license under which the package is released.
|
||||||
|
license: CC-BY-NC-ND-4.0
|
||||||
|
author: Stefan Dresselhaus
|
||||||
|
maintainer: stefan@dresselhaus.cloud
|
||||||
|
|
||||||
|
-- A copyright notice.
|
||||||
|
-- copyright:
|
||||||
|
-- category:
|
||||||
|
extra-source-files:
|
||||||
|
CHANGELOG.md
|
||||||
|
README.md
|
||||||
|
|
||||||
|
executable Day1
|
||||||
|
main-is: Main.hs
|
||||||
|
|
||||||
|
-- Modules included in this executable, other than Main.
|
||||||
|
-- other-modules:
|
||||||
|
|
||||||
|
-- LANGUAGE extensions used by modules in this package.
|
||||||
|
-- other-extensions:
|
||||||
|
build-depends: base ^>=4.14.3.0
|
||||||
|
, safe
|
||||||
|
hs-source-dirs: day1
|
||||||
|
default-language: Haskell2010
|
5
CHANGELOG.md
Normal file
5
CHANGELOG.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Revision history for AoC2022
|
||||||
|
|
||||||
|
## 0.1.0.0 -- YYYY-mm-dd
|
||||||
|
|
||||||
|
* First version. Released on an unsuspecting world.
|
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
Loading…
Reference in New Issue
Block a user