Skip to content

Commit 92130ab

Browse files
committed
fix
1 parent 1f487d3 commit 92130ab

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

2024/AOC2024/Day17.hs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ where
2929
-- day17b,
3030
-- )
3131

32-
import AOC.Prelude hiding (Finite, modulo, packFinite)
32+
import AOC.Prelude
3333
import Control.Monad.Primitive
3434
import Control.Monad.ST
3535
import Data.Bits
3636
import qualified Data.Conduino as C
3737
import qualified Data.Conduino.Combinators as C
38-
import Data.Finite.Integral hiding (shift)
38+
import Data.Finite hiding (shift)
3939
import qualified Data.Graph.Inductive as G
4040
import qualified Data.IntMap as IM
4141
import qualified Data.IntMap.NonEmpty as IM
@@ -84,25 +84,25 @@ day17a =
8484
}
8585

8686
data 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

9191
data 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
103103
comboParser = either CLiteral CReg . separateSum
104104

105-
instrParser :: Finite Word 8 -> Finite Word 8 -> Maybe Instr
105+
instrParser :: Finite 8 -> Finite 8 -> Maybe Instr
106106
instrParser i =
107107
SV.fromTuple @_ @8
108108
( fmap (ADV . comboParser) . strengthen
@@ -125,15 +125,12 @@ parseProgram xs = do
125125
readComboV3 :: Combo -> V3 Word -> Word
126126
readComboV3 = \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]
134131
stepProg 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

Comments
 (0)