1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- {-# LANGUAGE OverloadedStrings #-}
- {-# LANGUAGE QuasiQuotes #-}
-
- module Day11Spec (spec) where
-
- import Data.Foldable (toList)
- import qualified Data.Sequence as S
- import Data.Text (Text)
- import Day11
- import Day11.Parser
- import Test.Hspec
- import Text.Heredoc
- import Data.Int (Int64)
-
- testInput :: Text
- testInput =
- [str|Monkey 0:
- | Starting items: 79, 98
- | Operation: new = old * 19
- | Test: divisible by 23
- | If true: throw to monkey 2
- | If false: throw to monkey 3
- |
- |Monkey 1:
- | Starting items: 54, 65, 75, 74
- | Operation: new = old + 6
- | Test: divisible by 19
- | If true: throw to monkey 2
- | If false: throw to monkey 0
- |
- |Monkey 2:
- | Starting items: 79, 60, 97
- | Operation: new = old * old
- | Test: divisible by 13
- | If true: throw to monkey 1
- | If false: throw to monkey 3
- |
- |Monkey 3:
- | Starting items: 74
- | Operation: new = old + 3
- | Test: divisible by 17
- | If true: throw to monkey 0
- | If false: throw to monkey 1
- |]
-
- exampleMonkeys :: [Monkey]
- exampleMonkeys = parseMonkeys testInput
-
- spec :: Spec
- spec =
- describe "Day11" $ do
- describe "Part1" $ do
- it "parses" $ do
- head exampleMonkeys `shouldBe` Monkey 0 (S.fromList [79, 98]) (Multiply (Fixed 19)) 23 2 3 0
- _items (exampleMonkeys !! 1) `shouldBe` S.fromList [54, 65, 75, 74]
- it "runs part 1 monkey machine for 20 rounds" $ do
- let monkeys = runMonkeyMachine divideBy3 20 exampleMonkeys
- map _inspectionCount monkeys
- `shouldBe` [101, 95, 7, 105]
- map _inspectionCount (mostActiveMonkeys monkeys) `shouldBe` [105, 101]
- map _nr (mostActiveMonkeys monkeys) `shouldBe` [3, 0]
- monkeyBusiness (mostActiveMonkeys monkeys) `shouldBe` 10605
-
- it "runs part 2 monkey machine for 10000 rounds" $ do
- let monkeys = runMonkeyMachine (worryLimit exampleMonkeys) 10000 exampleMonkeys
- map _inspectionCount monkeys
- `shouldBe` [52166, 47830, 1938, 52013]
- monkeyBusiness (mostActiveMonkeys monkeys) `shouldBe` 2713310158
|