Some analysis of code and performance
[advent-of-code-21.git] / advent21 / Main.hs
index 536176f60ce38bce70d3cc36e6dafe4062833b4a..01d23e7017fbf1db0370e9944f94728cc8905b36 100644 (file)
@@ -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