@@ -29,13 +29,13 @@ where
2929-- day17b,
3030-- )
3131
32- import AOC.Prelude hiding ( Finite , modulo , packFinite )
32+ import AOC.Prelude
3333import Control.Monad.Primitive
3434import Control.Monad.ST
3535import Data.Bits
3636import qualified Data.Conduino as C
3737import qualified Data.Conduino.Combinators as C
38- import Data.Finite.Integral hiding (shift )
38+ import Data.Finite hiding (shift )
3939import qualified Data.Graph.Inductive as G
4040import qualified Data.IntMap as IM
4141import qualified Data.IntMap.NonEmpty as IM
@@ -84,25 +84,25 @@ day17a =
8484 }
8585
8686data Combo
87- = CLiteral (Finite Word 4 )
88- | CReg (Finite Word 3 )
87+ = CLiteral (Finite 4 )
88+ | CReg (Finite 3 )
8989 deriving stock (Show , Eq , Ord )
9090
9191data Instr
9292 = ADV Combo
93- | BXL (Finite Word 8 )
93+ | BXL (Finite 8 )
9494 | BST Combo
95- | JNZ (Finite Word 4 )
95+ | JNZ (Finite 4 )
9696 | BXC
9797 | OUT Combo
9898 | BDV Combo
9999 | CDV Combo
100100 deriving stock (Show , Eq , Ord )
101101
102- comboParser :: Finite Word 7 -> Combo
102+ comboParser :: Finite 7 -> Combo
103103comboParser = either CLiteral CReg . separateSum
104104
105- instrParser :: Finite Word 8 -> Finite Word 8 -> Maybe Instr
105+ instrParser :: Finite 8 -> Finite 8 -> Maybe Instr
106106instrParser i =
107107 SV. fromTuple @ _ @ 8
108108 ( fmap (ADV . comboParser) . strengthen
@@ -125,15 +125,12 @@ parseProgram xs = do
125125readComboV3 :: Combo -> V3 Word -> Word
126126readComboV3 = \ case
127127 CLiteral l -> \ _ -> fromIntegral l
128- CReg 0 -> \ (V3 a _ _) -> a
129- CReg 1 -> \ (V3 _ b _) -> b
130- CReg 2 -> \ (V3 _ _ c) -> c
131- _ -> undefined
128+ CReg r -> view (SV. fromTuple (_x, _y, _z) `SV.index` r)
132129
133- stepProg :: SV. Vector 8 Instr -> V3 Word -> [Finite Word 8 ]
130+ stepProg :: SV. Vector 8 Instr -> V3 Word -> [Finite 8 ]
134131stepProg tp = go' 0
135132 where
136- go' :: Finite Word 8 -> V3 Word -> [Finite Word 8 ]
133+ go' :: Finite 8 -> V3 Word -> [Finite 8 ]
137134 go' i v@ (V3 a b c) = case tp `SV.index` fromIntegral i of
138135 ADV r -> withStep $ V3 (a `div` (2 ^ combo r)) b c
139136 BXL l -> withStep $ V3 a (b `xor` fromIntegral l) c
@@ -142,7 +139,7 @@ stepProg tp = go' 0
142139 | a == 0 -> withStep v
143140 | otherwise -> go' (weakenN l) v
144141 BXC -> withStep $ V3 a (b `xor` c) c
145- OUT r -> modulo (combo r) : withStep v
142+ OUT r -> modulo (fromIntegral ( combo r) ) : withStep v
146143 BDV r -> withStep $ V3 a (a `div` (2 ^ combo r)) c
147144 CDV r -> withStep $ V3 a b (a `div` (2 ^ combo r))
148145 where
0 commit comments