projects
/
advent-of-code-20.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Done day 25
[advent-of-code-20.git]
/
advent22
/
src
/
advent22.hs
diff --git
a/advent22/src/advent22.hs
b/advent22/src/advent22.hs
index ac5162d9eeb1e26fcca1da8ad7bb9b84cbc8fc79..f94bf80a0701d8d5d38143d7449ebe183fe9a604 100644
(file)
--- a/
advent22/src/advent22.hs
+++ b/
advent22/src/advent22.hs
@@
-35,8
+35,8
@@
main =
print $ part1 decks
print $ part2 decks
print $ part1 decks
print $ part2 decks
-part1
decks = score $ winningDeck $ play decks
-part2
decks = score $ snd $ playRecursive decks
M.empty
+part1
game = score $ winningDeck $ play game
+part2
game = score $ snd $ playRecursive game
M.empty
play = until finished playRound
play = until finished playRound
@@
-50,13
+50,12
@@
playRound ((x :<| xs), (y :<| ys))
| x < y = (xs, ys |> y |> x)
| otherwise = (xs |> x |> y, ys)
| x < y = (xs, ys |> y |> x)
| otherwise = (xs |> x |> y, ys)
+winningDeck :: Game -> Deck
winningDeck (Empty, ys) = ys
winningDeck (xs, _) = xs
winningDeck (Empty, ys) = ys
winningDeck (xs, _) = xs
-
score :: Deck -> Int
score :: Deck -> Int
-score = Q.foldrWithIndex (\i c s -> s + (i + 1) * c) 0 . Q.reverse
-
+score = sum . zipWith (*) [1..] . toList . Q.reverse
playRecursive :: Game -> Cache -> (Player, Deck)
playRecursive (Empty, ys) _ = (P2, ys)
playRecursive :: Game -> Cache -> (Player, Deck)
playRecursive (Empty, ys) _ = (P2, ys)
@@
-68,8
+67,8
@@
playRecursive g@(x :<| xs, y :<| ys) seen
where seen' = enCache g seen
(subWinner, _) = playRecursive (Q.take x xs, Q.take y ys) seen'
subG = updateDecks subWinner g
where seen' = enCache g seen
(subWinner, _) = playRecursive (Q.take x xs, Q.take y ys) seen'
subG = updateDecks subWinner g
- compare
Winner
= if x < y then P2 else P1
- compareG = updateDecks compare
Winner
g
+ compare
Tops
= if x < y then P2 else P1
+ compareG = updateDecks compare
Tops
g
updateDecks P1 (x :<| xs, y :<| ys) = (xs |> x |> y, ys)
updateDecks P1 (x :<| xs, y :<| ys) = (xs |> x |> y, ys)