Day 6 - imported only needed functions so that I don't have to Data.* everywhere
This commit is contained in:
parent
cf61ef2a44
commit
40c2d06a8c
16
6.hs
16
6.hs
|
@ -1,10 +1,10 @@
|
|||
import Data.Foldable
|
||||
import Data.HashMap
|
||||
import Data.Sequence
|
||||
import Data.Foldable (toList)
|
||||
import Data.HashMap (Map, member, insert, findWithDefault, empty)
|
||||
import Data.Sequence (Seq, length, update, fromList, foldlWithIndex, mapWithIndex)
|
||||
|
||||
type Bank = Seq Int
|
||||
type HashableBank = [Int]
|
||||
type Config = (Bank, Data.HashMap.Map HashableBank Int)
|
||||
type Config = (Bank, Map HashableBank Int)
|
||||
|
||||
(%) :: Int -> Int -> Int
|
||||
(%) = mod
|
||||
|
@ -20,7 +20,7 @@ nextBank :: Bank -> Bank
|
|||
nextBank bank =
|
||||
let len = Data.Sequence.length bank
|
||||
(index, value) = getMaxMem bank
|
||||
zeroedBank = Data.Sequence.update index 0 bank
|
||||
zeroedBank = update index 0 bank
|
||||
mappedBank = fmap (+ value // len) zeroedBank
|
||||
indicesToUpdate = fmap ((% len) . (+ index)) [1..value % len]
|
||||
in mapWithIndex (\i v -> if i `elem` indicesToUpdate then v + 1 else v) mappedBank
|
||||
|
@ -30,7 +30,7 @@ cycles :: Int -> Config -> (Int, Int)
|
|||
cycles prevCount (prevBank, banks) =
|
||||
let count = prevCount + 1
|
||||
bank = nextBank prevBank
|
||||
hashableBank = Data.Foldable.toList bank
|
||||
hashableBank = toList bank
|
||||
in if member hashableBank banks
|
||||
then (count, count - findWithDefault undefined hashableBank banks)
|
||||
else cycles count (bank, insert hashableBank count banks)
|
||||
|
@ -38,5 +38,5 @@ cycles prevCount (prevBank, banks) =
|
|||
main :: IO ()
|
||||
main = do
|
||||
input <- readFile "6.txt"
|
||||
let bank = Data.Sequence.fromList $ fmap read $ words input :: Bank
|
||||
print $ cycles 0 (bank, Data.HashMap.empty)
|
||||
let bank = fromList $ fmap read $ words input :: Bank
|
||||
print $ cycles 0 (bank, empty)
|
||||
|
|
Loading…
Reference in New Issue