Reorganize imports

This commit is contained in:
ctsk
2023-08-30 09:32:12 +02:00
parent 404d2180af
commit 359aee0f22
10 changed files with 153 additions and 115 deletions

View File

@@ -1,9 +1,8 @@
module Days.D01 where
import Lib (Day, Parser, definitive, parsecDay)
import Parse (number, someLines)
import Common
import Data.List (sortBy)
import Parse
type Intermediate = [[Int]]

View File

@@ -3,10 +3,9 @@
module Days.D02 where
import Lib
import Parse
import Common
import Data.Functor ((<&>))
import Parse
import Text.Megaparsec (oneOf)
import Text.Megaparsec.Char (space)
@@ -18,23 +17,23 @@ type Intermediate = [(Play, Guide)]
parser :: Parser Intermediate
parser = someLines line
where
line :: Parser (Play, Guide)
line = (,) <$> elf <* space <*> guide
where
line :: Parser (Play, Guide)
line = (,) <$> elf <* space <*> guide
elf :: Parser Play
elf =
oneOf "ABC" <&> \case
'A' -> Rock
'B' -> Paper
'C' -> Scissors
elf :: Parser Play
elf =
oneOf "ABC" <&> \case
'A' -> Rock
'B' -> Paper
'C' -> Scissors
guide :: Parser Guide
guide =
oneOf "XYZ" <&> \case
'X' -> X
'Y' -> Y
'Z' -> Z
guide :: Parser Guide
guide =
oneOf "XYZ" <&> \case
'X' -> X
'Y' -> Y
'Z' -> Z
playScore :: Play -> Int
playScore = (1 +) . fromEnum
@@ -47,33 +46,33 @@ convert = toEnum . fromEnum
part1 :: Intermediate -> Int
part1 = sum . map f
where
f (elf, guide) = let us = convert guide in playScore us + winScore (outcome elf us)
where
f (elf, guide) = let us = convert guide in playScore us + winScore (outcome elf us)
outcome :: Play -> Play -> Outcome
outcome Rock Rock = Draw
outcome Rock Paper = Win
outcome Rock Scissors = Loss
outcome Paper Rock = Loss
outcome Paper Paper = Draw
outcome Paper Scissors = Win
outcome Scissors Rock = Win
outcome Scissors Paper = Loss
outcome Scissors Scissors = Draw
outcome :: Play -> Play -> Outcome
outcome Rock Rock = Draw
outcome Rock Paper = Win
outcome Rock Scissors = Loss
outcome Paper Rock = Loss
outcome Paper Paper = Draw
outcome Paper Scissors = Win
outcome Scissors Rock = Win
outcome Scissors Paper = Loss
outcome Scissors Scissors = Draw
part2 :: Intermediate -> Int
part2 = sum . map f
where
f (elf, guide) = let us = convert guide in winScore us + playScore (counter us elf)
where
f (elf, guide) = let us = convert guide in winScore us + playScore (counter us elf)
counter :: Outcome -> Play -> Play
counter Draw e = e
counter Win Rock = Paper
counter Win Paper = Scissors
counter Win Scissors = Rock
counter Loss Rock = Scissors
counter Loss Paper = Rock
counter Loss Scissors = Paper
counter :: Outcome -> Play -> Play
counter Draw e = e
counter Win Rock = Paper
counter Win Paper = Scissors
counter Win Scissors = Rock
counter Loss Rock = Scissors
counter Loss Paper = Rock
counter Loss Scissors = Paper
day :: Day
day = parsecDay parser (definitive . part1, definitive . part2)

View File

@@ -1,11 +1,10 @@
{-# LANGUAGE ImportQualifiedPost #-}
module Days.D03 where
import Common
import Data.Char (ord)
import Data.List (intersect)
import Data.List.Extra (chunksOf)
import Lib (Day (StringDay), definitive)
type Intermediate = [String]