projects
/
advent-of-code-21.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added profiling
[advent-of-code-21.git]
/
advent21
/
Main.hs
diff --git
a/advent21/Main.hs
b/advent21/Main.hs
index 536176f60ce38bce70d3cc36e6dafe4062833b4a..01d23e7017fbf1db0370e9944f94728cc8905b36 100644
(file)
--- a/
advent21/Main.hs
+++ b/
advent21/Main.hs
@@
-1,19
+1,12
@@
--- Writeup at https://work.njae.me.uk/2021/12/23/advent-of-code-2021-day-20/
-
-import Debug.Trace
+-- Writeup at https://work.njae.me.uk/2021/12/26/advent-of-code-2021-day-21/
+-- import Debug.Trace
import Data.Text ()
import qualified Data.Text.IO as TIO
import Data.Attoparsec.Text hiding (take, takeWhile)
import Control.Applicative
import Data.Text ()
import qualified Data.Text.IO as TIO
import Data.Attoparsec.Text hiding (take, takeWhile)
import Control.Applicative
--- import Control.Monad.State.Strict
--- import Control.Monad.Reader
--- import Control.Monad.Writer
--- import Control.Monad.RWS.Strict
--- import Control.Monad.Loops
-
import qualified Data.Map.Strict as M
import Data.Map.Strict ((!))
import Data.List
import qualified Data.Map.Strict as M
import Data.Map.Strict ((!))
import Data.List
@@
-36,9
+29,7
@@
type Games = MS.MultiSet Game
type Dice = MS.MultiSet Int
type Winners = MS.MultiSet Player
type Dice = MS.MultiSet Int
type Winners = MS.MultiSet Player
-
instance Show Game where
instance Show Game where
-
show game = "{" ++ (showPlayer Player1) ++ (showActive) ++ (showPlayer Player2) ++ "}"
where showPlayer p = (show $ position $ (players game) ! p) ++ "," ++ (show $ score $ (players game) ! p)
showActive = if (current game) == Player1 then "<" else ">"
show game = "{" ++ (showPlayer Player1) ++ (showActive) ++ (showPlayer Player2) ++ "}"
where showPlayer p = (show $ position $ (players game) ! p) ++ "," ++ (show $ score $ (players game) ! p)
showActive = if (current game) == Player1 then "<" else ">"
@@
-98,22
+89,16
@@
nonDetGameSimulation winThreshold games0 dice winners0
winners = MS.insertMany Player2 p2Wins $ MS.insertMany Player1 p1Wins winners0
nonDetGameStep :: Games -> Dice -> Games
winners = MS.insertMany Player2 p2Wins $ MS.insertMany Player1 p1Wins winners0
nonDetGameStep :: Games -> Dice -> Games
+-- nonDetGameStep games dice | trace ("G0 >" ++ (show games) ++ "-" ++ (show dice)) False = undefined
nonDetGameStep games dice = MS.foldOccur (nonDetGameStep1 dice) MS.empty games
nonDetGameStep games dice = MS.foldOccur (nonDetGameStep1 dice) MS.empty games
--- nonDetGameStep games dice
- -- | trace ("G0 >" ++ (show games) ++ "-" ++ (show dice)) False = undefined
- -- | otherwise = MS.foldOccur (nonDetGameStep1 games) MS.empty dice
nonDetGameStep1 :: Dice -> Game -> MS.Occur -> Games -> Games
nonDetGameStep1 :: Dice -> Game -> MS.Occur -> Games -> Games
+-- nonDetGameStep1 dice game gnum acc | trace ("G1 >" ++ (show game) ++ "-" ++ (show dice) ++ ": " ++ (show gnum)) False = undefined
nonDetGameStep1 dice game gnum acc = MS.foldOccur (nonDetGameStep2 game gnum) acc dice
nonDetGameStep1 dice game gnum acc = MS.foldOccur (nonDetGameStep2 game gnum) acc dice
--- nonDetGameStep1 game dice dnum acc
- -- | trace ("G1 >" ++ (show game) ++ "-" ++ (show dice) ++ ": " ++ (show gnum)) False = undefined
- -- | otherwise = MS.foldOccur (nonDetGameStep2 dice dnum) acc game
nonDetGameStep2 :: Game -> MS.Occur -> Int -> MS.Occur -> Games -> Games
nonDetGameStep2 :: Game -> MS.Occur -> Int -> MS.Occur -> Games -> Games
+-- nonDetGameStep2 dice dnum game gnum acc | trace ("G2 >" ++ (show game) ++ "-" ++ (show dice) ++ ": " ++ (show gnum) ++ "," ++ (show dnum)) False = undefined
nonDetGameStep2 game gnum roll dnum acc = MS.insertMany game' (gnum * dnum) acc
nonDetGameStep2 game gnum roll dnum acc = MS.insertMany game' (gnum * dnum) acc
--- nonDetGameStep2 dice dnum game gnum acc
- -- | trace ("G2 >" ++ (show game) ++ "-" ++ (show dice) ++ ": " ++ (show gnum) ++ "," ++ (show dnum)) False = undefined
- -- | otherwise = MS.insertMany game' (gnum * dnum) acc
where game' = gameStep game roll
where game' = gameStep game roll