Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ac8a6ef

Browse files
committed
redid 25 using IntSet. merry christmas everyone!
1 parent 869b47b commit ac8a6ef

File tree

1 file changed

+15
-24
lines changed

1 file changed

+15
-24
lines changed

‎src/AOC2017/Day25.hs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
11
module AOC2017.Day25 (day25a, day25b) where
22

3-
import AOC2017.Types (Challenge)
3+
import AOC2017.Types (Challenge)
44
import AOC2017.Util
5-
import AOC2017.Util.Tape
65
import Control.Lens
7-
import Control.Monad.Trans.Maybe
8-
import Control.Monad.Trans.State
9-
import Control.Monad.Trans.Writer
10-
import Data.Foldable
11-
import qualified Data.IntMap as IM
12-
import qualified Data.IntSet as IS
13-
import qualified Data.Map as M
14-
import qualified Data.Set as S
15-
import qualified Text.Megaparsec as P
16-
import qualified Text.Megaparsec.Char as P
6+
import qualified Data.IntSet as IS
177

188
data St = SA | SB | SC | SD | SE | SF
199

2010
data Dir = DL | DR
2111

2212
type Rule = (Bool, Dir, St)
2313

24-
type TapeState = (Tape Bool, St)
25-
14+
type TapeState = (Int, IS.IntSet, St)
2615

2716
rule :: St -> (Rule, Rule)
2817
rule = \case
@@ -34,19 +23,21 @@ rule = \case
3423
SF -> ((True, DR, SA), (False, DL, SE))
3524

3625
step :: TapeState -> TapeState
37-
step (!t0, !st0) = (t1, st1)
26+
step (!i0, !t0, !st0) = (i1, t1, st1)
3827
where
39-
t1 = t0 & tFocus .~ newFoc
40-
& case dirTurn of
41-
DL -> moveLeftD False
42-
DR -> moveRightD False
28+
i1 = case dirTurn of
29+
DL -> i0 - 1
30+
DR -> i0 + 1
31+
t1 = t0 & if newFoc
32+
then IS.insert i0
33+
else IS.delete i0
4334
(newFoc, dirTurn, st1)
44-
| t0 ^. tFocus = snd (rule st0)
45-
| otherwise = fst (rule st0)
35+
| i0 `IS.member` t0 = snd (rule st0)
36+
| otherwise = fst (rule st0)
4637

4738
day25a :: Challenge
48-
day25a _ = show . length.filterid. toList .fst
49-
$ iterate step (Tape[]False[], SA) !!! 12964419
39+
day25a _ = show . IS.size . view _2
40+
$ iterate step (0, IS.empty, SA) !!! 12964419
5041

5142
day25b :: Challenge
52-
day25b =undefined
43+
day25b _ ="Merry Christmas!"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /