Compare commits
35 commits
Author | SHA1 | Date | |
---|---|---|---|
|
e0ea0a26c8 | ||
|
400d1cdc57 | ||
6aba6f131e | |||
f8d0b6c0da | |||
6ee8b3fafa | |||
7c8cb639cb | |||
f41863a68b | |||
|
2240fd1325 | ||
0e498f3caa | |||
|
47bafe66dc | ||
|
538fba7063 | ||
|
c15d4ee29d | ||
|
3997886348 | ||
d720534eaf | |||
|
a1a4a6fb52 | ||
fec46e87e0 | |||
8d16541413 | |||
0305b145a7 | |||
fa87faaa02 | |||
09ca90be06 | |||
|
4faaf34bf8 | ||
|
f0c7f30103 | ||
2ee9fa16c4 | |||
54ddd70f1d | |||
|
a0ec7f0b63 | ||
|
f173da9ec7 | ||
e387598fd1 | |||
207769dccc | |||
|
b68ac986af | ||
|
629e9767c5 | ||
|
97f5bd536f | ||
b344686716 | |||
f7d651ff92 | |||
19975730a5 | |||
640efa334b |
18 changed files with 7184 additions and 3 deletions
95
day10/input
Normal file
95
day10/input
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
99
|
||||||
|
3
|
||||||
|
1
|
||||||
|
11
|
||||||
|
48
|
||||||
|
113
|
||||||
|
131
|
||||||
|
43
|
||||||
|
82
|
||||||
|
19
|
||||||
|
4
|
||||||
|
153
|
||||||
|
105
|
||||||
|
52
|
||||||
|
56
|
||||||
|
109
|
||||||
|
27
|
||||||
|
119
|
||||||
|
147
|
||||||
|
31
|
||||||
|
34
|
||||||
|
13
|
||||||
|
129
|
||||||
|
17
|
||||||
|
61
|
||||||
|
10
|
||||||
|
29
|
||||||
|
24
|
||||||
|
12
|
||||||
|
104
|
||||||
|
152
|
||||||
|
103
|
||||||
|
80
|
||||||
|
116
|
||||||
|
79
|
||||||
|
73
|
||||||
|
21
|
||||||
|
133
|
||||||
|
44
|
||||||
|
18
|
||||||
|
74
|
||||||
|
112
|
||||||
|
136
|
||||||
|
30
|
||||||
|
146
|
||||||
|
100
|
||||||
|
39
|
||||||
|
130
|
||||||
|
91
|
||||||
|
124
|
||||||
|
70
|
||||||
|
115
|
||||||
|
81
|
||||||
|
28
|
||||||
|
151
|
||||||
|
2
|
||||||
|
122
|
||||||
|
87
|
||||||
|
143
|
||||||
|
62
|
||||||
|
7
|
||||||
|
126
|
||||||
|
95
|
||||||
|
75
|
||||||
|
20
|
||||||
|
123
|
||||||
|
63
|
||||||
|
125
|
||||||
|
53
|
||||||
|
45
|
||||||
|
141
|
||||||
|
14
|
||||||
|
67
|
||||||
|
69
|
||||||
|
60
|
||||||
|
114
|
||||||
|
57
|
||||||
|
142
|
||||||
|
150
|
||||||
|
42
|
||||||
|
78
|
||||||
|
132
|
||||||
|
66
|
||||||
|
88
|
||||||
|
140
|
||||||
|
139
|
||||||
|
106
|
||||||
|
38
|
||||||
|
85
|
||||||
|
37
|
||||||
|
51
|
||||||
|
94
|
||||||
|
98
|
||||||
|
86
|
||||||
|
68
|
92
day10/main.hs
Executable file
92
day10/main.hs
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports -Wno-type-defaults #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Data.List
|
||||||
|
import Data.Monoid
|
||||||
|
import Debug.Trace (trace)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
|
||||||
|
smallExample :: [Int]
|
||||||
|
smallExample = [16,10,15,5,1,11,7,19,6,12,4]
|
||||||
|
|
||||||
|
biggerExample :: [Int]
|
||||||
|
biggerExample = [28,33,18,42,31,14,46,20,48,47,24,23,49,45,19,38,39,11,1,32,25
|
||||||
|
,35,8,17,7,9,4,2,34,10,3]
|
||||||
|
|
||||||
|
solvePart1 :: [Int] -> Int
|
||||||
|
solvePart1 xs = finally
|
||||||
|
$ span (== 1)
|
||||||
|
$ sort
|
||||||
|
$ map (\(x,y) -> y - x)
|
||||||
|
$ zip (0:sorted) (sorted ++ [l+3])
|
||||||
|
where
|
||||||
|
l = last sorted
|
||||||
|
sorted = sort xs
|
||||||
|
finally (x,y) = length x * length y
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
-- 1 -> 1 possibility
|
||||||
|
-- 1 1 -> 2 possibilities
|
||||||
|
-- 1 1 1 -> 4 possibilities
|
||||||
|
-- 1 1 1 1 -> 7 (!) possibilities
|
||||||
|
-- 1 1 1 1 1 -> ? possibilities
|
||||||
|
--
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
cleanup :: [[Int]] -> [[Int]]
|
||||||
|
cleanup = filter (\v -> (any (/= 3) v) && (length v > 1))
|
||||||
|
|
||||||
|
|
||||||
|
-- That is the actual problem right here:
|
||||||
|
-- ··· -> 2^3 - 1 = 7
|
||||||
|
-- ···· -> 2^4 - 1 - 2 = 13
|
||||||
|
-- ····· -> 2^5 - 1 - 2 - 3 = 26
|
||||||
|
combinations :: [Int] -> Int
|
||||||
|
combinations v =
|
||||||
|
(2 ^ n) -- All the ways to take any on/off combination in n
|
||||||
|
- (sum [1..(n-2)]) -- All the ways to take n+ consecutive in n (illegal),
|
||||||
|
-- *except* for n=1 and n=2 which are legal
|
||||||
|
where
|
||||||
|
n = (length v) - 1
|
||||||
|
|
||||||
|
estimatePermutations :: [Int] -> Int
|
||||||
|
estimatePermutations = getProduct
|
||||||
|
. foldMap Product
|
||||||
|
. map combinations
|
||||||
|
. cleanup
|
||||||
|
. group
|
||||||
|
|
||||||
|
distanceMap :: [Int] -> [Int]
|
||||||
|
distanceMap xs = map (\(x,y) -> y - x) $ zip (0:sorted) (sorted ++ [(last sorted)+3])
|
||||||
|
where
|
||||||
|
sorted = sort xs
|
||||||
|
|
||||||
|
solvePart2 :: [Int] -> Int
|
||||||
|
solvePart2 = estimatePermutations . distanceMap
|
||||||
|
where
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
input' <- lines <$> readFile "day10/input"
|
||||||
|
let input = read <$> input'
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
print $ smallExample
|
||||||
|
print $ biggerExample
|
||||||
|
putStrLn ":: Day 10 - Part 1"
|
||||||
|
print $ solvePart1 smallExample
|
||||||
|
print $ solvePart1 biggerExample
|
||||||
|
print $ solvePart1 input
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
|
||||||
|
putStrLn ":: Day 10 - Part 2"
|
||||||
|
print $ distanceMap smallExample
|
||||||
|
print $ solvePart2 smallExample
|
||||||
|
print $ distanceMap biggerExample
|
||||||
|
print $ (map combinations . cleanup . group) $ distanceMap biggerExample
|
||||||
|
print $ solvePart2 biggerExample
|
||||||
|
print $ solvePart2 input
|
786
day12/input
Normal file
786
day12/input
Normal file
|
@ -0,0 +1,786 @@
|
||||||
|
N3
|
||||||
|
F18
|
||||||
|
L180
|
||||||
|
F40
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
N4
|
||||||
|
F24
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
F36
|
||||||
|
R180
|
||||||
|
W3
|
||||||
|
W4
|
||||||
|
F63
|
||||||
|
N4
|
||||||
|
W1
|
||||||
|
N1
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
N2
|
||||||
|
E2
|
||||||
|
S2
|
||||||
|
F39
|
||||||
|
W4
|
||||||
|
S3
|
||||||
|
F93
|
||||||
|
N1
|
||||||
|
F83
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
F53
|
||||||
|
S4
|
||||||
|
F4
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
F83
|
||||||
|
L180
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
F63
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
N3
|
||||||
|
E4
|
||||||
|
F10
|
||||||
|
S3
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
F11
|
||||||
|
L90
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
W2
|
||||||
|
F100
|
||||||
|
W5
|
||||||
|
R270
|
||||||
|
F40
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
L180
|
||||||
|
N5
|
||||||
|
F81
|
||||||
|
N4
|
||||||
|
E4
|
||||||
|
L180
|
||||||
|
F38
|
||||||
|
W2
|
||||||
|
F22
|
||||||
|
W5
|
||||||
|
N5
|
||||||
|
E1
|
||||||
|
N2
|
||||||
|
W4
|
||||||
|
N2
|
||||||
|
F68
|
||||||
|
N1
|
||||||
|
F2
|
||||||
|
S1
|
||||||
|
F47
|
||||||
|
W5
|
||||||
|
F80
|
||||||
|
N3
|
||||||
|
E3
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
F87
|
||||||
|
L180
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
S3
|
||||||
|
L180
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
N4
|
||||||
|
F21
|
||||||
|
S4
|
||||||
|
W5
|
||||||
|
F70
|
||||||
|
F4
|
||||||
|
N2
|
||||||
|
F14
|
||||||
|
E2
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
S1
|
||||||
|
F85
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
F80
|
||||||
|
L90
|
||||||
|
F100
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
F58
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
F42
|
||||||
|
E3
|
||||||
|
F93
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
W2
|
||||||
|
N2
|
||||||
|
W1
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
N5
|
||||||
|
R180
|
||||||
|
F52
|
||||||
|
N5
|
||||||
|
F20
|
||||||
|
L180
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
S4
|
||||||
|
E1
|
||||||
|
S3
|
||||||
|
F75
|
||||||
|
R90
|
||||||
|
F49
|
||||||
|
L180
|
||||||
|
N3
|
||||||
|
F31
|
||||||
|
S3
|
||||||
|
E3
|
||||||
|
S5
|
||||||
|
L180
|
||||||
|
N3
|
||||||
|
E2
|
||||||
|
R270
|
||||||
|
W5
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
N3
|
||||||
|
L270
|
||||||
|
F54
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
F73
|
||||||
|
S3
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
L90
|
||||||
|
F3
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
F76
|
||||||
|
S3
|
||||||
|
F56
|
||||||
|
L90
|
||||||
|
F5
|
||||||
|
N1
|
||||||
|
R180
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
F20
|
||||||
|
E2
|
||||||
|
L180
|
||||||
|
F38
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
N5
|
||||||
|
E5
|
||||||
|
F26
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
F52
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
E4
|
||||||
|
F63
|
||||||
|
L90
|
||||||
|
F48
|
||||||
|
W5
|
||||||
|
F29
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
S3
|
||||||
|
F8
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
S2
|
||||||
|
E2
|
||||||
|
F10
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F2
|
||||||
|
E2
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
F74
|
||||||
|
W3
|
||||||
|
W5
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
F58
|
||||||
|
N4
|
||||||
|
E5
|
||||||
|
S4
|
||||||
|
E3
|
||||||
|
F72
|
||||||
|
L180
|
||||||
|
E3
|
||||||
|
S2
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
S1
|
||||||
|
F14
|
||||||
|
W1
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
N1
|
||||||
|
F97
|
||||||
|
R90
|
||||||
|
N4
|
||||||
|
E3
|
||||||
|
F95
|
||||||
|
F95
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
F55
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
N1
|
||||||
|
R90
|
||||||
|
F16
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
F4
|
||||||
|
R90
|
||||||
|
F24
|
||||||
|
S4
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
E1
|
||||||
|
L270
|
||||||
|
F12
|
||||||
|
L90
|
||||||
|
F100
|
||||||
|
W1
|
||||||
|
S5
|
||||||
|
W2
|
||||||
|
S3
|
||||||
|
F95
|
||||||
|
L90
|
||||||
|
F44
|
||||||
|
N5
|
||||||
|
F79
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
E2
|
||||||
|
S1
|
||||||
|
F40
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
F67
|
||||||
|
S5
|
||||||
|
F15
|
||||||
|
L90
|
||||||
|
N4
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
N4
|
||||||
|
L270
|
||||||
|
F61
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
F38
|
||||||
|
E2
|
||||||
|
F19
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
F59
|
||||||
|
N1
|
||||||
|
F26
|
||||||
|
N1
|
||||||
|
W5
|
||||||
|
F7
|
||||||
|
N4
|
||||||
|
F72
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F59
|
||||||
|
N1
|
||||||
|
F58
|
||||||
|
N5
|
||||||
|
F13
|
||||||
|
N2
|
||||||
|
F2
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
F85
|
||||||
|
R270
|
||||||
|
S2
|
||||||
|
F17
|
||||||
|
R90
|
||||||
|
F96
|
||||||
|
S2
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
N4
|
||||||
|
F9
|
||||||
|
R270
|
||||||
|
F58
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
S2
|
||||||
|
F73
|
||||||
|
W1
|
||||||
|
S2
|
||||||
|
F20
|
||||||
|
E2
|
||||||
|
S4
|
||||||
|
F94
|
||||||
|
L180
|
||||||
|
F27
|
||||||
|
S2
|
||||||
|
F48
|
||||||
|
N1
|
||||||
|
L270
|
||||||
|
S2
|
||||||
|
F77
|
||||||
|
E3
|
||||||
|
F10
|
||||||
|
W3
|
||||||
|
L270
|
||||||
|
S4
|
||||||
|
F53
|
||||||
|
F66
|
||||||
|
E5
|
||||||
|
S2
|
||||||
|
F33
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
S3
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
F62
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
S3
|
||||||
|
E3
|
||||||
|
N1
|
||||||
|
S1
|
||||||
|
E5
|
||||||
|
S2
|
||||||
|
F66
|
||||||
|
N4
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
F84
|
||||||
|
R180
|
||||||
|
F23
|
||||||
|
F20
|
||||||
|
E1
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
F48
|
||||||
|
F89
|
||||||
|
L90
|
||||||
|
F97
|
||||||
|
R180
|
||||||
|
N3
|
||||||
|
F62
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
F28
|
||||||
|
W5
|
||||||
|
N4
|
||||||
|
L180
|
||||||
|
N4
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
F95
|
||||||
|
N1
|
||||||
|
W5
|
||||||
|
R180
|
||||||
|
N5
|
||||||
|
F34
|
||||||
|
S1
|
||||||
|
W2
|
||||||
|
N4
|
||||||
|
F3
|
||||||
|
S2
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
F36
|
||||||
|
S4
|
||||||
|
E5
|
||||||
|
F42
|
||||||
|
W1
|
||||||
|
L180
|
||||||
|
S1
|
||||||
|
F74
|
||||||
|
F38
|
||||||
|
N4
|
||||||
|
R270
|
||||||
|
N3
|
||||||
|
W2
|
||||||
|
S4
|
||||||
|
L180
|
||||||
|
F26
|
||||||
|
S4
|
||||||
|
F51
|
||||||
|
R90
|
||||||
|
F83
|
||||||
|
R90
|
||||||
|
F9
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
F99
|
||||||
|
S4
|
||||||
|
W1
|
||||||
|
F84
|
||||||
|
W1
|
||||||
|
R180
|
||||||
|
F59
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
F75
|
||||||
|
S1
|
||||||
|
F34
|
||||||
|
E4
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
F43
|
||||||
|
W5
|
||||||
|
N1
|
||||||
|
R90
|
||||||
|
F59
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
F36
|
||||||
|
N5
|
||||||
|
W4
|
||||||
|
E2
|
||||||
|
F96
|
||||||
|
R180
|
||||||
|
F44
|
||||||
|
R90
|
||||||
|
F12
|
||||||
|
E5
|
||||||
|
F24
|
||||||
|
W3
|
||||||
|
F39
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
W4
|
||||||
|
F70
|
||||||
|
N4
|
||||||
|
E4
|
||||||
|
F36
|
||||||
|
E2
|
||||||
|
N1
|
||||||
|
F30
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
F81
|
||||||
|
R270
|
||||||
|
R90
|
||||||
|
F66
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
F98
|
||||||
|
S1
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
F100
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
F88
|
||||||
|
E4
|
||||||
|
L180
|
||||||
|
F52
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
F76
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
F72
|
||||||
|
S3
|
||||||
|
L180
|
||||||
|
F12
|
||||||
|
F34
|
||||||
|
E5
|
||||||
|
F90
|
||||||
|
S5
|
||||||
|
W5
|
||||||
|
E1
|
||||||
|
N5
|
||||||
|
L180
|
||||||
|
E5
|
||||||
|
F84
|
||||||
|
E5
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
F14
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
F54
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
F73
|
||||||
|
S4
|
||||||
|
E1
|
||||||
|
S1
|
||||||
|
F55
|
||||||
|
E5
|
||||||
|
N4
|
||||||
|
R180
|
||||||
|
L180
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
F91
|
||||||
|
L180
|
||||||
|
F5
|
||||||
|
E2
|
||||||
|
N1
|
||||||
|
W2
|
||||||
|
F27
|
||||||
|
W2
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
F39
|
||||||
|
S3
|
||||||
|
W2
|
||||||
|
F59
|
||||||
|
F83
|
||||||
|
W3
|
||||||
|
E3
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
F81
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
F74
|
||||||
|
W3
|
||||||
|
E3
|
||||||
|
F30
|
||||||
|
L180
|
||||||
|
S2
|
||||||
|
E3
|
||||||
|
F33
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
F22
|
||||||
|
S5
|
||||||
|
F97
|
||||||
|
S1
|
||||||
|
E2
|
||||||
|
F50
|
||||||
|
E2
|
||||||
|
F19
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
W3
|
||||||
|
F80
|
||||||
|
F33
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
F70
|
||||||
|
L180
|
||||||
|
W4
|
||||||
|
N2
|
||||||
|
R180
|
||||||
|
S2
|
||||||
|
F38
|
||||||
|
S3
|
||||||
|
F7
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
N5
|
||||||
|
F86
|
||||||
|
W4
|
||||||
|
F49
|
||||||
|
W4
|
||||||
|
F51
|
||||||
|
S4
|
||||||
|
F47
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
F98
|
||||||
|
S1
|
||||||
|
W3
|
||||||
|
S4
|
||||||
|
L90
|
||||||
|
F76
|
||||||
|
E1
|
||||||
|
F76
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
W3
|
||||||
|
F26
|
||||||
|
N5
|
||||||
|
F35
|
||||||
|
S2
|
||||||
|
F94
|
||||||
|
F24
|
||||||
|
N2
|
||||||
|
F45
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
F32
|
||||||
|
S1
|
||||||
|
R180
|
||||||
|
F78
|
||||||
|
F84
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
F42
|
||||||
|
R90
|
||||||
|
F72
|
||||||
|
S1
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
W1
|
||||||
|
F23
|
||||||
|
E2
|
||||||
|
F69
|
||||||
|
L90
|
||||||
|
F29
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
W5
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
S2
|
||||||
|
E1
|
||||||
|
F96
|
||||||
|
S5
|
||||||
|
R180
|
||||||
|
F26
|
||||||
|
S5
|
||||||
|
W1
|
||||||
|
S3
|
||||||
|
F38
|
||||||
|
S1
|
||||||
|
E2
|
||||||
|
S5
|
||||||
|
W2
|
||||||
|
S5
|
||||||
|
F52
|
||||||
|
L90
|
||||||
|
F11
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
F6
|
||||||
|
L90
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
F1
|
||||||
|
E4
|
||||||
|
N3
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
R180
|
||||||
|
W2
|
||||||
|
N5
|
||||||
|
F46
|
||||||
|
N3
|
||||||
|
E5
|
||||||
|
F83
|
||||||
|
R90
|
||||||
|
F42
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
F10
|
130
day12/main.hs
Executable file
130
day12/main.hs
Executable file
|
@ -0,0 +1,130 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple linear])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports -Wno-type-defaults #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-matches #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
|
||||||
|
import Debug.Trace (trace, traceShowId, traceShow)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
import Control.Monad
|
||||||
|
import Linear.V2
|
||||||
|
import Data.Monoid
|
||||||
|
|
||||||
|
exampleData :: [ String ]
|
||||||
|
exampleData =
|
||||||
|
[ "F10"
|
||||||
|
, "N3"
|
||||||
|
, "F7"
|
||||||
|
, "R90"
|
||||||
|
, "F11"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data Ship = Ship { position :: V2 Double, orientation :: V2 Double }
|
||||||
|
deriving (Show, Eq, Ord)
|
||||||
|
|
||||||
|
-- At first, ship is at (0,0) facing East
|
||||||
|
ship0 :: Ship
|
||||||
|
ship0 = Ship (pure 0) (V2 1 0)
|
||||||
|
|
||||||
|
-- At first, ship is at (0,0) facing East
|
||||||
|
ship1 :: Ship
|
||||||
|
ship1 = Ship (pure 0) (V2 10 1)
|
||||||
|
|
||||||
|
-- instance Semigroup Ship
|
||||||
|
-- where
|
||||||
|
-- (<>) s1 s2 = Ship (getSum <$> ((Sum <$> (position s1)) <> (Sum <$> (position s2))))
|
||||||
|
-- (getSum <$> ((Sum <$> (orientation s1)) <> (Sum <$> (orientation s2))))
|
||||||
|
--
|
||||||
|
-- instance Monoid Ship
|
||||||
|
-- where
|
||||||
|
-- mempty = Ship (pure 0) (pure 0)
|
||||||
|
|
||||||
|
data Instruction = InsMoveForward !Double
|
||||||
|
| InsMoveNorth !Double
|
||||||
|
| InsMoveSouth !Double
|
||||||
|
| InsMoveEast !Double
|
||||||
|
| InsMoveWest !Double
|
||||||
|
| InsTurnL !Double
|
||||||
|
| InsTurnR !Double
|
||||||
|
deriving (Show, Eq, Ord)
|
||||||
|
|
||||||
|
parseIns :: String -> Instruction
|
||||||
|
-- Action N means to move north by the given value.
|
||||||
|
parseIns ('N':x) = InsMoveNorth (read x)
|
||||||
|
-- Action S means to move south by the given value.
|
||||||
|
parseIns ('S':x) = InsMoveSouth (read x)
|
||||||
|
-- Action E means to move east by the given value.
|
||||||
|
parseIns ('E':x) = InsMoveEast (read x)
|
||||||
|
-- Action W means to move west by the given value.
|
||||||
|
parseIns ('W':x) = InsMoveWest (read x)
|
||||||
|
-- Action L means to turn left the given number of degrees.
|
||||||
|
parseIns ('L':x) = InsTurnL (read x)
|
||||||
|
-- Action R means to turn right the given number of degrees.
|
||||||
|
parseIns ('R':x) = InsTurnR (read x)
|
||||||
|
-- Action F means to move forward by the given value in the direction the ship is currently facing.
|
||||||
|
parseIns ('F':x) = InsMoveForward (read x)
|
||||||
|
parseIns e = trace ("Unknown instruction: "<>show e) undefined
|
||||||
|
|
||||||
|
|
||||||
|
-- 2*PI rad = 360 deg
|
||||||
|
-- 1 rad = 180/PI deg
|
||||||
|
-- PI/180 rad = 1 deg
|
||||||
|
|
||||||
|
runIns1 :: Ship -> Instruction -> Ship
|
||||||
|
runIns1 s (InsMoveForward n) = s { position = (position s) + (pure n) * (orientation s) }
|
||||||
|
runIns1 s (InsMoveNorth n) = s { position = (position s) + (pure n) * V2 0 1 }
|
||||||
|
runIns1 s (InsMoveSouth n) = s { position = (position s) + (pure n) * V2 0 (-1) }
|
||||||
|
runIns1 s (InsMoveEast n) = s { position = (position s) + (pure n) * V2 1 0 }
|
||||||
|
runIns1 s (InsMoveWest n) = s { position = (position s) + (pure n) * V2 (-1) 0 }
|
||||||
|
runIns1 s (InsTurnL n) = s { orientation = angle ((unangle (orientation s)) + n * pi / 180) }
|
||||||
|
runIns1 s (InsTurnR n) = s { orientation = angle ((unangle (orientation s)) - n * pi / 180) }
|
||||||
|
|
||||||
|
manhattanV2 :: (Num a) => V2 a -> a
|
||||||
|
manhattanV2 (V2 x y) = (abs x) + (abs y)
|
||||||
|
|
||||||
|
solvePart1 :: [String] -> Double
|
||||||
|
solvePart1 = manhattanV2 . position . foldl runIns1 ship0 . map parseIns
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
runIns2 :: Ship -> Instruction -> Ship
|
||||||
|
runIns2 s (InsMoveForward n) = s { position = (position s) + (pure n) * (orientation s) }
|
||||||
|
runIns2 s (InsMoveNorth n) = s { orientation = (orientation s) + V2 0 n }
|
||||||
|
runIns2 s (InsMoveSouth n) = s { orientation = (orientation s) + V2 0 (-n) }
|
||||||
|
runIns2 s (InsMoveEast n) = s { orientation = (orientation s) + V2 n 0 }
|
||||||
|
runIns2 s (InsMoveWest n) = s { orientation = (orientation s) + V2 (-n) 0 }
|
||||||
|
runIns2 s (InsTurnL n) = s { orientation = rotV2By (orientation s) n }
|
||||||
|
runIns2 s (InsTurnR n) = s { orientation = rotV2By (orientation s) (-n) }
|
||||||
|
|
||||||
|
rotV2By :: (Num a, Floating a) => V2 a -> a -> V2 a
|
||||||
|
rotV2By (V2 x1 y1) n = V2 x y
|
||||||
|
where
|
||||||
|
x = cos a * x1 - sin a * y1
|
||||||
|
y = sin a * x1 + cos a * y1
|
||||||
|
a = n * pi / 180
|
||||||
|
|
||||||
|
solvePart2 :: [String] -> Double
|
||||||
|
solvePart2 = manhattanV2 . position . foldl runIns2 ship1 . map parseIns
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
input <- lines <$> readFile "day12/input"
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
pPrint exampleData
|
||||||
|
pPrint $ map parseIns exampleData
|
||||||
|
pPrint $ angle (90 * pi / 180)
|
||||||
|
putStrLn ":: Day 12 - Part 1"
|
||||||
|
pPrint $ solvePart1 exampleData
|
||||||
|
pPrint $ solvePart1 input
|
||||||
|
putStrLn ":: Day 12 - Part 2"
|
||||||
|
pPrint $ solvePart2 exampleData
|
||||||
|
pPrint $ solvePart2 input
|
2
day13/input
Normal file
2
day13/input
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
1000507
|
||||||
|
29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,631,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,23,x,x,x,x,x,x,x,383,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,17
|
129
day13/main.hs
Executable file
129
day13/main.hs
Executable file
|
@ -0,0 +1,129 @@
|
||||||
|
#! /usr/bin/env -S"GHCRTS=-N4" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple attoparsec arithmoi])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
|
import Control.Monad (foldM)
|
||||||
|
import Data.Attoparsec.Text (Parser)
|
||||||
|
import Data.Euclidean (gcdExt)
|
||||||
|
import Data.List (find,sortOn)
|
||||||
|
import Data.Maybe (fromMaybe,catMaybes)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
import qualified Data.Attoparsec.Text as A
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
exampleData :: String
|
||||||
|
exampleData = "939\n7,13,x,x,59,x,31,19"
|
||||||
|
|
||||||
|
numOrXParser :: Parser (Maybe Int)
|
||||||
|
numOrXParser = (Just <$> A.decimal) <|> ("x" *> pure Nothing)
|
||||||
|
|
||||||
|
inputParser :: Parser (Int,[Int])
|
||||||
|
inputParser = do
|
||||||
|
n <- A.decimal
|
||||||
|
A.skipSpace
|
||||||
|
xs <- numOrXParser `A.sepBy` ","
|
||||||
|
pure (n,catMaybes $ xs)
|
||||||
|
|
||||||
|
parseInput :: String -> Either String (Int,[Int])
|
||||||
|
parseInput = (A.parseOnly inputParser) . T.pack
|
||||||
|
|
||||||
|
solvePart1 :: String -> Either String Int
|
||||||
|
solvePart1 str = do
|
||||||
|
(n,xs) <- parseInput str
|
||||||
|
let (bus, time) = head
|
||||||
|
$ sortOn (snd)
|
||||||
|
$ map (\x -> (x,fromMaybe (-1) $ find (> n) [0,x..])) xs
|
||||||
|
pure $ bus * (time - n)
|
||||||
|
|
||||||
|
inputParser2 :: Parser (Int,[Maybe Int])
|
||||||
|
inputParser2 = do
|
||||||
|
n <- A.decimal
|
||||||
|
A.skipSpace
|
||||||
|
xs <- numOrXParser `A.sepBy` ","
|
||||||
|
pure (n,xs)
|
||||||
|
|
||||||
|
parseInput2 :: String -> Either String (Int,[Maybe Int])
|
||||||
|
parseInput2 = (A.parseOnly inputParser2) . T.pack
|
||||||
|
|
||||||
|
-- -------------------------------------------------------------------------- --
|
||||||
|
-- Here I sneak around a bit, and realize the problem is well defined --
|
||||||
|
-- (and solved!) already: it's called the Chinese Remainder Theorem --
|
||||||
|
-- https://en.wikipedia.org/wiki/Chinese_remainder_theorem --
|
||||||
|
-- -------------------------------------------------------------------------- --
|
||||||
|
-- Apllying the theorem allows to reduce a system of equation on x: --
|
||||||
|
-- --
|
||||||
|
-- x ≡ a1 (mod n1) --
|
||||||
|
-- · --
|
||||||
|
-- · --
|
||||||
|
-- · --
|
||||||
|
-- x ≡ ak (mod nk) --
|
||||||
|
-- --
|
||||||
|
-- to a single equation: --
|
||||||
|
-- --
|
||||||
|
-- x ≡ as (mod ns) --
|
||||||
|
-- --
|
||||||
|
-- It relates to the buses schedules in the following way: t is x, the bus --
|
||||||
|
-- number is the modulo factor (since a bus comes *every* ni) and subsequent --
|
||||||
|
-- additions to t (for other buses) is (-ai), so, for a but coming at --
|
||||||
|
-- t+ai, one would write x ≡ -ai (mod ni) --
|
||||||
|
-- --
|
||||||
|
-- I chose to encode ai and ni as a tuple (ai,ni), named startAndIds --
|
||||||
|
-- --
|
||||||
|
-- Basically, we're creating a “chinese” function: --
|
||||||
|
-- --
|
||||||
|
-- chinese :: (Int,Int) -> (Int,Int) -> (Int,Int) --
|
||||||
|
-- --
|
||||||
|
-- Then, given a list [(Int, Int)] we can fold over it to obtain the solution --
|
||||||
|
-- --
|
||||||
|
|
||||||
|
chinese :: (Integer,Integer) -> (Integer,Integer) -> Maybe (Integer,Integer)
|
||||||
|
chinese (0,n1) (0,n2) = chinese (n1,n1) (n2,n2)
|
||||||
|
chinese v (0,n2) = chinese v (n2,n2)
|
||||||
|
chinese (0,n1) v = chinese (n1,n1) v
|
||||||
|
chinese (a1,n1) (a2,n2) = do
|
||||||
|
-- Computes a solution such that: n1×c1 + n2×c2 = g, for some c2
|
||||||
|
-- n1×c1 - g = - n2×c2, for some c2
|
||||||
|
-- 1/n2 (n1×c1 - g) = - c2, for some c2 (n2 is > 0)
|
||||||
|
-- - 1/n2 (n1×c1 - g) = c2, for some c2 (n2 is > 0)
|
||||||
|
-- n1 and n2 must be coprimes for this to work (g must be 1), fail otherwise
|
||||||
|
(m1,m2) <- case gcdExt n1 n2 of
|
||||||
|
(1,c1) -> Just ( c1, negate ((n1 * c1) - 1) `div` n2 )
|
||||||
|
_ -> Nothing
|
||||||
|
let x = a1 * m2 * n2 + a2 * m1 * n1
|
||||||
|
let a12 = x `mod` (n1 * n2)
|
||||||
|
pure $ (a12, n1 * n2)
|
||||||
|
|
||||||
|
e2m :: Either e a -> Maybe a
|
||||||
|
e2m (Right v) = Just v
|
||||||
|
e2m _ = Nothing
|
||||||
|
|
||||||
|
solvePart2 :: String -> Maybe (Integer,Integer)
|
||||||
|
solvePart2 str = do
|
||||||
|
(_,xs) <- e2m $ parseInput2 str
|
||||||
|
let startAndIds = catMaybes $ sequence <$> zip [0..] (map (fmap fromIntegral) xs)
|
||||||
|
let chineseEqs = fmap (\(a,n) -> ((-a) `mod` n, n)) startAndIds
|
||||||
|
foldM chinese (1,1) chineseEqs
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn ":: Test"
|
||||||
|
pPrint $ A.parseOnly inputParser $ T.pack exampleData
|
||||||
|
pPrint $ take 3 ((\n -> [1,(n::Integer)..]) 59)
|
||||||
|
putStrLn ":: Day 13 - Part 1"
|
||||||
|
input <- readFile "day13/input"
|
||||||
|
pPrint $ solvePart1 exampleData
|
||||||
|
pPrint $ solvePart1 input
|
||||||
|
putStrLn ":: Test 2"
|
||||||
|
print $ solvePart2 exampleData
|
||||||
|
print $ solvePart2 "1\n17,x,13,19"
|
||||||
|
print $ solvePart2 "1\n67,7,59,61"
|
||||||
|
print $ solvePart2 "1\n67,x,7,59,61"
|
||||||
|
print $ solvePart2 "1\n67,7,x,59,61"
|
||||||
|
print $ solvePart2 "1\n1789,37,47,1889"
|
||||||
|
putStrLn ":: Day 13 - Part 2"
|
||||||
|
print $ solvePart2 input
|
73
day15/main.hs
Executable file
73
day15/main.hs
Executable file
|
@ -0,0 +1,73 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-matches #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Debug.Trace (trace)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
|
||||||
|
import Data.IntMap.Strict (IntMap)
|
||||||
|
import qualified Data.IntMap.Strict as I
|
||||||
|
|
||||||
|
import Data.Maybe (fromMaybe)
|
||||||
|
import Data.List (iterate')
|
||||||
|
|
||||||
|
exampleInput1 :: [Int]
|
||||||
|
exampleInput1 = [0,3,6]
|
||||||
|
|
||||||
|
exampleInput2 :: [Int]
|
||||||
|
exampleInput2 = [1,3,2]
|
||||||
|
exampleInput3 :: [Int]
|
||||||
|
exampleInput3 = [3,1,2]
|
||||||
|
|
||||||
|
input :: [Int]
|
||||||
|
input = [0,3,1,6,7,5]
|
||||||
|
|
||||||
|
type Turn = Int
|
||||||
|
type Number = Int
|
||||||
|
|
||||||
|
|
||||||
|
-- Each Number is attached to the last Turn it was seen
|
||||||
|
-- The current Turn is recorded too
|
||||||
|
-- Last spoken Number is recorded too
|
||||||
|
data Game = Game { unMem :: (IntMap Turn)
|
||||||
|
, unTurn :: Turn
|
||||||
|
, unNumber :: Number
|
||||||
|
}
|
||||||
|
deriving Show
|
||||||
|
|
||||||
|
initGame :: [Int] -> Game
|
||||||
|
initGame keys = Game mem ((length keys) + 1) 0
|
||||||
|
where
|
||||||
|
mem = I.fromList (zip keys [1..])
|
||||||
|
|
||||||
|
next :: Game -> Game
|
||||||
|
next (Game mem turn n) = fromMaybe (Game (I.insert n turn mem) (turn+1) 0) $ do
|
||||||
|
lastTurn <- I.lookup n mem
|
||||||
|
pure $ Game (I.insert n turn mem) (turn+1) (turn - lastTurn)
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn ":: Day 15 - Tests 1"
|
||||||
|
print exampleInput1
|
||||||
|
putStrLn $ "turn 04: " <> (show $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 05: " <> (show $ next $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 06: " <> (show $ next $ next $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 07: " <> (show $ next $ next $ next $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 08: " <> (show $ next $ next $ next $ next $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 09: " <> (show $ next $ next $ next $ next $ next $ initGame exampleInput1)
|
||||||
|
putStrLn $ "turn 10: " <> (show $ next $ next $ next $ next $ next $ next $ initGame exampleInput1)
|
||||||
|
print $ last $ take 2017 $ map unNumber $ iterate next $ initGame exampleInput1
|
||||||
|
print $ last $ take 2017 $ map unNumber $ iterate next $ initGame exampleInput2
|
||||||
|
print $ last $ take 2017 $ map unNumber $ iterate next $ initGame exampleInput3
|
||||||
|
putStrLn ":: Day 15 - Part 1"
|
||||||
|
print $ last $ take (2020 - 6) $ map unNumber $ iterate next $ initGame input
|
||||||
|
putStrLn ":: Day 15 - Part 2"
|
||||||
|
-- print $ last $ take (30000000 - 3) $ map unNumber $ iterate' next $ initGame exampleInput1
|
||||||
|
print $ last $ take (30000000 - 6) $ map unNumber $ iterate' next $ initGame input
|
||||||
|
|
965
day5/input
Normal file
965
day5/input
Normal file
|
@ -0,0 +1,965 @@
|
||||||
|
FBFBBBFRLR
|
||||||
|
FBBFBBBLLR
|
||||||
|
FFFFFBBRRL
|
||||||
|
BBBFFFBRRL
|
||||||
|
BFFBFBFLRL
|
||||||
|
FBFFBFFLLR
|
||||||
|
FBFBBBBRLR
|
||||||
|
FBFBFBFRLL
|
||||||
|
BFFBFFBRLR
|
||||||
|
FBBFFFBLRR
|
||||||
|
FBFBBBFRRR
|
||||||
|
BFFBBFBRLR
|
||||||
|
BFFBFBFRRL
|
||||||
|
FFFFBBBLRL
|
||||||
|
FBBFBFFRLL
|
||||||
|
BBFBBFBRLR
|
||||||
|
BFFFFBBLLR
|
||||||
|
FBFFFFFRRR
|
||||||
|
BFBFFBFLRR
|
||||||
|
BBFBFFBLLL
|
||||||
|
BFBFFFFLLR
|
||||||
|
FBBFBBBRLL
|
||||||
|
BBBBFFFRRL
|
||||||
|
FFBBBFFRLR
|
||||||
|
FFFBFFFRRL
|
||||||
|
FFFBBBBLRL
|
||||||
|
BFBBFBFRRL
|
||||||
|
BFFBBFBLLL
|
||||||
|
FBFBBFFLRL
|
||||||
|
BFFBBBBLRL
|
||||||
|
FFBBBFFLRL
|
||||||
|
FFBFBFFRRL
|
||||||
|
BBBFBFBRLR
|
||||||
|
FBFBBBBRLL
|
||||||
|
FBBBFBBRRR
|
||||||
|
FBFBFBFLLL
|
||||||
|
BBFFFFFLLR
|
||||||
|
FBFFFBBLRR
|
||||||
|
FFBFFFBLRR
|
||||||
|
BBBFBFFRLR
|
||||||
|
FFFFFFBRRL
|
||||||
|
BFBBFFFRRR
|
||||||
|
FBFFBFBRRR
|
||||||
|
BFFFBBFLRL
|
||||||
|
BBFBFFFRRR
|
||||||
|
BBFFFBBLRL
|
||||||
|
FFBBFFFLLL
|
||||||
|
FFFFFBBRLR
|
||||||
|
BFBFFFFRRL
|
||||||
|
FFBBFBBLRR
|
||||||
|
BFBBFBBLLR
|
||||||
|
FFBBBBFRRL
|
||||||
|
BBBFFFFLRL
|
||||||
|
BFBFFBFLRL
|
||||||
|
BFFFFBBLRL
|
||||||
|
BBBFBBBRLL
|
||||||
|
BFBBFBBLRR
|
||||||
|
BFBFFBBRRL
|
||||||
|
BBFBFFFLLL
|
||||||
|
FFFFBFFRRL
|
||||||
|
FFFFBBBRRR
|
||||||
|
FBBFBBFLRL
|
||||||
|
FBFFBFBRLR
|
||||||
|
FBFFBBBLLL
|
||||||
|
FBFBBBFLLR
|
||||||
|
FBBFBFBRLL
|
||||||
|
BBBFBFFLLL
|
||||||
|
BBFFFFFLRL
|
||||||
|
FFBFBFBRLL
|
||||||
|
FBBBFFBLRL
|
||||||
|
FBFBFFBLRL
|
||||||
|
FFFBBFBRLR
|
||||||
|
FBFBBFBLLR
|
||||||
|
FBFFBBBRLL
|
||||||
|
BBFBBFBLLL
|
||||||
|
FBBBBFFRLL
|
||||||
|
FBBBBBBLRR
|
||||||
|
FFFFFBFLRR
|
||||||
|
BFFBFBBLRR
|
||||||
|
FBFFBFFLRR
|
||||||
|
BBFFFFBLRL
|
||||||
|
BBFFBFFLLR
|
||||||
|
FFFBBBBLRR
|
||||||
|
FBFBBBFRRL
|
||||||
|
FBBFFFBLRL
|
||||||
|
BBFBBFFRRL
|
||||||
|
FFBBBFBRLR
|
||||||
|
BBBFBFBRRR
|
||||||
|
FBFFBFFRRR
|
||||||
|
FFBFFBFRLR
|
||||||
|
BFBBFFBLLL
|
||||||
|
FFBBBFFRRL
|
||||||
|
FFFBFFFRLL
|
||||||
|
BBFFFBFLLR
|
||||||
|
BFFFFFBRLL
|
||||||
|
FFBFBBBRLL
|
||||||
|
FFFBFBFLLL
|
||||||
|
FBBFBBBLRR
|
||||||
|
BFBFBFBRLL
|
||||||
|
FFBBBBBLLL
|
||||||
|
FFBFFFBRRR
|
||||||
|
BBFBBFFRLL
|
||||||
|
BFFFFFFLRL
|
||||||
|
FBFFBFFRLR
|
||||||
|
BFFBBBFLRR
|
||||||
|
FFFBBFFRLR
|
||||||
|
FBFFFFBLLL
|
||||||
|
BBFFBBBRRR
|
||||||
|
FFBFBFBLLR
|
||||||
|
FBBFFBBLLR
|
||||||
|
BBFBBFBLLR
|
||||||
|
BBFBBFBLRL
|
||||||
|
BBBFFBFRRL
|
||||||
|
FBFFBBBLRL
|
||||||
|
BFBFBFFLLR
|
||||||
|
BFFFFFBRLR
|
||||||
|
FBFBFFBLLR
|
||||||
|
BFFFBFBRLL
|
||||||
|
FBFFFFBRRR
|
||||||
|
BFBBFBBRRL
|
||||||
|
FBFFFBBLRL
|
||||||
|
BFBBBBFLRL
|
||||||
|
BBBBFFBLRL
|
||||||
|
FFBFFBBLRL
|
||||||
|
FFFBFFBRLR
|
||||||
|
FBFBFFBRLR
|
||||||
|
FBFBFBBRRR
|
||||||
|
BFFBFBBLRL
|
||||||
|
FBBBFBBRLR
|
||||||
|
BFBBBFFLLL
|
||||||
|
BFBFBBBLLR
|
||||||
|
BBBFBBBRRR
|
||||||
|
FFBFFFFRLR
|
||||||
|
BBFFFBBRRR
|
||||||
|
BBBFBBFRRL
|
||||||
|
FFBFFBBLLL
|
||||||
|
BBFFBFFLRR
|
||||||
|
BBFFBFBRRL
|
||||||
|
BBFBBBFLRR
|
||||||
|
FBFFBFBLRL
|
||||||
|
BFBFFFFLLL
|
||||||
|
FFBBBFBRRR
|
||||||
|
BBBFBBBLLL
|
||||||
|
FBFBBFBLRL
|
||||||
|
BBBFFFBRLL
|
||||||
|
BFFFBBFRRL
|
||||||
|
BBBBFFFLLR
|
||||||
|
BBBFBFFRLL
|
||||||
|
FFBBFBFLRR
|
||||||
|
FBBFBFBRRR
|
||||||
|
FBBFBBFLRR
|
||||||
|
BBFFFBFRRL
|
||||||
|
FBFFFBBRLL
|
||||||
|
BBFFFFFRLR
|
||||||
|
FBBFBBFRRL
|
||||||
|
FBFFFBBLLL
|
||||||
|
BFBFBBFLLL
|
||||||
|
BFFBFFBRLL
|
||||||
|
FFFFBBBRLR
|
||||||
|
BBFBBBBRLR
|
||||||
|
BFBFFFBLRR
|
||||||
|
BFBFFFBRLL
|
||||||
|
FBFBBBBLLR
|
||||||
|
BFFFBFFRRR
|
||||||
|
FFBBBFFLLR
|
||||||
|
BFBFFFBLLL
|
||||||
|
FFBBFFBRLR
|
||||||
|
FBBFBBBRRL
|
||||||
|
BBFBFFBLRR
|
||||||
|
FBBFBBBRRR
|
||||||
|
FFFBBFBRRL
|
||||||
|
BFBFBFBLLR
|
||||||
|
BBFBFFBLRL
|
||||||
|
BBBFBFBRRL
|
||||||
|
BFFBFBFLLR
|
||||||
|
BFBFBBBLRR
|
||||||
|
FBFFFBFRLL
|
||||||
|
BFFBFFFRRL
|
||||||
|
FBFBFFFRRR
|
||||||
|
BFFBFFFRLL
|
||||||
|
FFBBFFBLLL
|
||||||
|
BBBBFFFRLR
|
||||||
|
BBBFFBFLLR
|
||||||
|
BFBFBFBRRL
|
||||||
|
BBFBBBBLLR
|
||||||
|
BFFBBFFRLR
|
||||||
|
FFFFBBBRRL
|
||||||
|
BFFFBBFRLR
|
||||||
|
FFBBFBBLLL
|
||||||
|
BBBFFFBLLR
|
||||||
|
BBFBBBFLLL
|
||||||
|
FFFFFBFLLR
|
||||||
|
BBBFBBFLRL
|
||||||
|
FFFFFBFLLL
|
||||||
|
BBFBFFFLLR
|
||||||
|
BFBBFBFLRL
|
||||||
|
BFBFBBFRRL
|
||||||
|
BBBFBFFRRL
|
||||||
|
BFFFBBFRLL
|
||||||
|
FFFFBFBLRL
|
||||||
|
BFBBBBBLRR
|
||||||
|
FFFBFFBLRL
|
||||||
|
FFFBBBBRLL
|
||||||
|
BBBFBFBLLR
|
||||||
|
BBBBFFBLLR
|
||||||
|
BFFFBBBLLR
|
||||||
|
BBFFFBBLLR
|
||||||
|
BBFFBBBLRR
|
||||||
|
FBBFBFBLLR
|
||||||
|
BBBFFFFRLL
|
||||||
|
FBBFBFBRRL
|
||||||
|
FFBFBFFRLR
|
||||||
|
BFFFFBFLLL
|
||||||
|
BBFBBBBLLL
|
||||||
|
FBFBBBBLRR
|
||||||
|
BBBBFFFRLL
|
||||||
|
BFBBFBBRRR
|
||||||
|
FFFFBBBLLL
|
||||||
|
BBFFBFBRLL
|
||||||
|
FBBFFBFLRL
|
||||||
|
FFBBBFFRLL
|
||||||
|
FFFBBBFRLR
|
||||||
|
FFBBFBFLRL
|
||||||
|
BBFBFBFLLR
|
||||||
|
BFFFFFBLRR
|
||||||
|
FBFBBBFRLL
|
||||||
|
FBFFFFFLLR
|
||||||
|
FBFBFFBLLL
|
||||||
|
BFFBFBFRLR
|
||||||
|
FFBFBFFLLL
|
||||||
|
FFFFFBBLLR
|
||||||
|
BBBBFFBRRR
|
||||||
|
FBFBFBFLLR
|
||||||
|
BBFFFBFRLR
|
||||||
|
BBFFBFBLRR
|
||||||
|
BFFBBFFLRR
|
||||||
|
BFFFFBFLLR
|
||||||
|
FBBFBFBLRL
|
||||||
|
BFFFFBFLRL
|
||||||
|
BBFFFFFLRR
|
||||||
|
BBBFFFFRRR
|
||||||
|
FFBBBFFLRR
|
||||||
|
BFFFBFBLRL
|
||||||
|
BBFBFBBLRR
|
||||||
|
BBFBFFBRLR
|
||||||
|
FFFBFBFLRR
|
||||||
|
FBFFFFFRLL
|
||||||
|
BBFBBBFRLR
|
||||||
|
BBFFBBFRRL
|
||||||
|
BFBFFBBRLR
|
||||||
|
FFBFFFBLLR
|
||||||
|
BFBFFFBRLR
|
||||||
|
BBBBFFBRLR
|
||||||
|
BFBFFBFLLR
|
||||||
|
BBFFBBFLLR
|
||||||
|
FBFFFFBLLR
|
||||||
|
FFFBBFBLRR
|
||||||
|
FFBBFFBRRR
|
||||||
|
FBBBFBFLRL
|
||||||
|
FBFBFBFLRR
|
||||||
|
BFFFBFBRRL
|
||||||
|
FBFFFFBRRL
|
||||||
|
FBFFFBBRLR
|
||||||
|
FBBFFBBRRL
|
||||||
|
FBBFBFFLRL
|
||||||
|
BFBFBBFRLL
|
||||||
|
FBBBBFFRLR
|
||||||
|
FFBFFFFRRL
|
||||||
|
BFBFBBBRRR
|
||||||
|
BFFBBBFRRR
|
||||||
|
BBFFFFFLLL
|
||||||
|
BFBBBBFLRR
|
||||||
|
FBBBBBFRRL
|
||||||
|
BBFBFBFRRL
|
||||||
|
BFFBFFFRLR
|
||||||
|
FBFFFBFRRR
|
||||||
|
FFBBBBBLLR
|
||||||
|
FBFFFBFRLR
|
||||||
|
BFBFBFBRLR
|
||||||
|
FFFBBBFRRR
|
||||||
|
FBBBFFBRLL
|
||||||
|
BBFBFBBLRL
|
||||||
|
FFFBFBBLLL
|
||||||
|
BFBFBFFLLL
|
||||||
|
FFFBFFFLLL
|
||||||
|
FBBBFBBRRL
|
||||||
|
FBFFFBFLRL
|
||||||
|
FBFFBFBRLL
|
||||||
|
BBFFBBFRLL
|
||||||
|
BFFFBFFRLL
|
||||||
|
FFBBFBFRRR
|
||||||
|
BBBFFBBRRL
|
||||||
|
BBFBFBBRLR
|
||||||
|
FFBBFFFLRR
|
||||||
|
FFBBBBFLLR
|
||||||
|
FFBFFBFLLR
|
||||||
|
FBBFBBFRLL
|
||||||
|
FBFBBFFLRR
|
||||||
|
BBBFFFFRRL
|
||||||
|
FFFFFBBLRR
|
||||||
|
BFBFBFFRLR
|
||||||
|
FFBBBBFRRR
|
||||||
|
FFBBFFFLLR
|
||||||
|
FFBBBBBLRR
|
||||||
|
FBBBBFBRRR
|
||||||
|
FBFFFBBRRR
|
||||||
|
BFFBFFBRRR
|
||||||
|
BFBFBBFLRR
|
||||||
|
FBFBBBBRRL
|
||||||
|
FBBBBFBRLR
|
||||||
|
BFFBBFBLLR
|
||||||
|
FBBBFBBLLL
|
||||||
|
FFBBBBBRLL
|
||||||
|
FBBBBBBRLL
|
||||||
|
FFFBFBBLLR
|
||||||
|
BFFFFFBRRL
|
||||||
|
BFFBFBBRRL
|
||||||
|
FBBBFFBLRR
|
||||||
|
FFFBFFFLRR
|
||||||
|
FFBBBBFRLR
|
||||||
|
BFFBFFFLLL
|
||||||
|
FBFFBFFRLL
|
||||||
|
BFBFBFFRLL
|
||||||
|
FBBFBBBRLR
|
||||||
|
FBFFBBFRLL
|
||||||
|
FFBFFFBRLR
|
||||||
|
BFBBFBFLRR
|
||||||
|
BFBBBBFRRL
|
||||||
|
FBFBFBBRLL
|
||||||
|
BFBBBFBLRL
|
||||||
|
FFBBFFBLRR
|
||||||
|
BBFFBBBRLR
|
||||||
|
FBBBFBBLRL
|
||||||
|
BBBBFBFLRL
|
||||||
|
BBBFBBFRRR
|
||||||
|
FFFBBFBLRL
|
||||||
|
BFBFFBBLLR
|
||||||
|
BBBFFFBLRL
|
||||||
|
BBFFFFBLRR
|
||||||
|
FFBBBBFLLL
|
||||||
|
FBFFFBFLLL
|
||||||
|
FFBBFBBRRL
|
||||||
|
BFFBBBBLRR
|
||||||
|
FBBFFBBRLR
|
||||||
|
BFBBFBFRLL
|
||||||
|
FFBBBBBLRL
|
||||||
|
FBFBFFFRLR
|
||||||
|
BFBBBFBRRR
|
||||||
|
BFBBBFBRLL
|
||||||
|
BBFBBBFRRR
|
||||||
|
BFFBBFBRRR
|
||||||
|
BBFFBBBRLL
|
||||||
|
FFBFFBBRLR
|
||||||
|
FFFFBBBRLL
|
||||||
|
FFBBBFBLRL
|
||||||
|
FFFBFBFRLL
|
||||||
|
BFBFBBFRRR
|
||||||
|
FBBFFFFRLL
|
||||||
|
BBBBFBFLLL
|
||||||
|
FBFBFFBRRR
|
||||||
|
BFFFBBBRRR
|
||||||
|
FFFBBFBLLL
|
||||||
|
BBBFBBBRRL
|
||||||
|
FBFFBFBLLR
|
||||||
|
FBBBBBFRLL
|
||||||
|
FBBFBFFLLL
|
||||||
|
BFBFFFBRRR
|
||||||
|
FBFBFBBLRL
|
||||||
|
FBFBBBBLLL
|
||||||
|
FFBFFFBRLL
|
||||||
|
BFFFBFBRLR
|
||||||
|
BFBFBBBRLL
|
||||||
|
FFBFBBFLLL
|
||||||
|
BBBBFFFRRR
|
||||||
|
FFFBFBFRRR
|
||||||
|
FFBBFFFRLL
|
||||||
|
BFBBBBBLLR
|
||||||
|
FBBBBFFLRL
|
||||||
|
BFBFBBFLRL
|
||||||
|
BFFBBBFLRL
|
||||||
|
BBFFBFBRLR
|
||||||
|
BBBFFBFLLL
|
||||||
|
FBFFBFFRRL
|
||||||
|
FFFBBBBRLR
|
||||||
|
BBFBFFFLRR
|
||||||
|
FBBBBBBRLR
|
||||||
|
BBFFBBBLLL
|
||||||
|
BBFBBFFLLL
|
||||||
|
FBBFFBFRLR
|
||||||
|
FFFFBFBLRR
|
||||||
|
FFFBBFFRRR
|
||||||
|
FBFBFBFLRL
|
||||||
|
BBFFBBFRRR
|
||||||
|
FFFFBFBRRR
|
||||||
|
FFBFBBBLRR
|
||||||
|
FBFFFBBRRL
|
||||||
|
BFFBBFBRLL
|
||||||
|
FFBFBFFLRR
|
||||||
|
FFBBFBBLLR
|
||||||
|
FBBBBBBLLR
|
||||||
|
FFFBBBFLLL
|
||||||
|
FFBBFFBLRL
|
||||||
|
BBFFFBBRLR
|
||||||
|
FFFFBFFRLR
|
||||||
|
BBFBFFBLLR
|
||||||
|
FFFBFBBLRR
|
||||||
|
BBFFFFBRLR
|
||||||
|
FBFBFFFRRL
|
||||||
|
FBBBFBFLLL
|
||||||
|
FFFBBBFRLL
|
||||||
|
FFFBFBBRLL
|
||||||
|
FFBFFBBLLR
|
||||||
|
BFFFBBBLRR
|
||||||
|
FFFBBFBLLR
|
||||||
|
FFBFBBFLRL
|
||||||
|
BFFBFBFLLL
|
||||||
|
BFFFBBFLRR
|
||||||
|
FBFFFBBLLR
|
||||||
|
FBBFFBBLLL
|
||||||
|
FFBBFFFLRL
|
||||||
|
BBBFFBFLRL
|
||||||
|
FBBFFFFLLL
|
||||||
|
BFFBBFFLLR
|
||||||
|
BBBFFFFLLL
|
||||||
|
FBFFBBFRRR
|
||||||
|
BFBBBBBRRR
|
||||||
|
FBFFFFFLRL
|
||||||
|
FFBFFBBRRL
|
||||||
|
FBFBBFFRLL
|
||||||
|
FFBFBBFRLR
|
||||||
|
BBBFFBBLLL
|
||||||
|
FFFBBBFLRL
|
||||||
|
BBFFFBBRRL
|
||||||
|
BFFFFFBLLR
|
||||||
|
FBBBFFBLLR
|
||||||
|
BBFBBFFLRR
|
||||||
|
FBFBBFBLLL
|
||||||
|
BFBBFBFRLR
|
||||||
|
BFBBFFBRRL
|
||||||
|
BBFFFBBLRR
|
||||||
|
FBBFFBFLRR
|
||||||
|
FFFBFFBRRR
|
||||||
|
FBFBBBBLRL
|
||||||
|
BBFFBBBLLR
|
||||||
|
FFBFFFBLRL
|
||||||
|
FBBBFFFLRR
|
||||||
|
BBBBFFBRLL
|
||||||
|
BFFBBBFLLR
|
||||||
|
BFBBBBFRLL
|
||||||
|
BFFBFFBRRL
|
||||||
|
BFFFFBBRLR
|
||||||
|
FFBFFFBLLL
|
||||||
|
FBBFFBFRLL
|
||||||
|
BFFBBBBRLR
|
||||||
|
BFFBFBBLLL
|
||||||
|
BBBFFBFRLR
|
||||||
|
BBFBBFBRLL
|
||||||
|
FFFFBBFRRL
|
||||||
|
FFBFBFBLRR
|
||||||
|
BFFBBBBLLR
|
||||||
|
BFFFFBFRRL
|
||||||
|
FBBBBFBLRL
|
||||||
|
BBBFFBBLRR
|
||||||
|
FBBBBFBLLL
|
||||||
|
FFFBFBBLRL
|
||||||
|
FFBFBBFRRR
|
||||||
|
BFBBFFBRLR
|
||||||
|
BBFFBBFLRR
|
||||||
|
FBBBFBFRLR
|
||||||
|
FBBFBFBLLL
|
||||||
|
BFFFBBFRRR
|
||||||
|
BFFFFBFRLR
|
||||||
|
FFBFFBFRRR
|
||||||
|
FFFFBBFRLR
|
||||||
|
FBBFFFBLLL
|
||||||
|
FBFFBBFLRR
|
||||||
|
BFFFFFFRLL
|
||||||
|
BFBBBFFLRR
|
||||||
|
FBFFBFBLRR
|
||||||
|
FBFBBFFRRR
|
||||||
|
FFFBBBBRRL
|
||||||
|
BFFFBFFLLR
|
||||||
|
FBBBBFFLLR
|
||||||
|
BFFFFFFRRR
|
||||||
|
FFBFFFFLRR
|
||||||
|
FBBFFFFRRL
|
||||||
|
FBBFFFFRLR
|
||||||
|
BBFFBBBLRL
|
||||||
|
FBFFBBBRRR
|
||||||
|
BFFFBBBRRL
|
||||||
|
BFFFBBBLLL
|
||||||
|
BFFFFBBRLL
|
||||||
|
BFFFFFFLRR
|
||||||
|
FBFBFBFRLR
|
||||||
|
FFFBFFFRRR
|
||||||
|
FFFFBBFLLL
|
||||||
|
BBBFBFBLRR
|
||||||
|
BBBFBBFLRR
|
||||||
|
BBFBFBBLLL
|
||||||
|
FFFBBBFLRR
|
||||||
|
FBBFFFBRLL
|
||||||
|
BFFBFFFLRR
|
||||||
|
BFBFBBBRRL
|
||||||
|
BFFBBBBRRR
|
||||||
|
FBFFBBBLRR
|
||||||
|
BFFFBBFLLL
|
||||||
|
BBBFBFBLRL
|
||||||
|
BFFFBFBLLR
|
||||||
|
BBBFBFFLLR
|
||||||
|
FFBFFBBLRR
|
||||||
|
FBBFBFFLRR
|
||||||
|
BBBFFBFRRR
|
||||||
|
BFBBFFFLRL
|
||||||
|
FFBBBFBLLR
|
||||||
|
FBBBBFFRRR
|
||||||
|
BFBBBBBRLR
|
||||||
|
BBFFBFBLLR
|
||||||
|
BFFBFBBRLR
|
||||||
|
BFFBFFFLLR
|
||||||
|
BFFBBBBRRL
|
||||||
|
BBFBFBFLRL
|
||||||
|
BFFBBBFLLL
|
||||||
|
BBBFFBFLRR
|
||||||
|
FBFFFFFLRR
|
||||||
|
BFBFBFBRRR
|
||||||
|
BBBFFBFRLL
|
||||||
|
BFFFBBFLLR
|
||||||
|
BBBFBBFRLR
|
||||||
|
FFFFBBFLRR
|
||||||
|
FBBBFBFRRL
|
||||||
|
FFFBFFBRRL
|
||||||
|
FFBFFBBRRR
|
||||||
|
BFBBBBBLLL
|
||||||
|
FFBFFBFRLL
|
||||||
|
BFBFFFBLLR
|
||||||
|
BFFBBFBLRL
|
||||||
|
BBFBBFFLRL
|
||||||
|
FFFBFBFRRL
|
||||||
|
BFFBBBBRLL
|
||||||
|
FBFBFFBRRL
|
||||||
|
FFFFFBFRLR
|
||||||
|
FBBBBFBRLL
|
||||||
|
FFFFBFFLLL
|
||||||
|
FBFBFBBRLR
|
||||||
|
FBFFFFBRLR
|
||||||
|
BFBBFFBLRR
|
||||||
|
BFBBBFFRLL
|
||||||
|
BBFBBFFLLR
|
||||||
|
FBFBBBFLRR
|
||||||
|
FFFFBFFRLL
|
||||||
|
BFBBFFBRRR
|
||||||
|
BBBFFFFLLR
|
||||||
|
BBFFFBBLLL
|
||||||
|
BFFFFFFRRL
|
||||||
|
BFBBFFBRLL
|
||||||
|
FFBFFFBRRL
|
||||||
|
FBFBBFBRLL
|
||||||
|
BFBBBFBLRR
|
||||||
|
BBFBFBFLRR
|
||||||
|
BBBFBBFLLL
|
||||||
|
FBFBFFFLRR
|
||||||
|
BBBBFFBLRR
|
||||||
|
FFFBBFFLRR
|
||||||
|
BFFFBFBLLL
|
||||||
|
FFFFBFFLRL
|
||||||
|
FFBBFBBRLR
|
||||||
|
FFFBFBFRLR
|
||||||
|
BFFBFBFRLL
|
||||||
|
BBBFFFBLLL
|
||||||
|
BBFBBFBRRR
|
||||||
|
BFBFBBBLLL
|
||||||
|
BFFBFFBLLR
|
||||||
|
BFBBFBBLRL
|
||||||
|
BBFBFFBRLL
|
||||||
|
FBFBBFFLLR
|
||||||
|
BFFFFFBLLL
|
||||||
|
FBFFFFFRRL
|
||||||
|
FFFFFFBRRR
|
||||||
|
BBBFFFFRLR
|
||||||
|
FBFFFBFRRL
|
||||||
|
BFBFFBBRLL
|
||||||
|
BBFBFFBRRR
|
||||||
|
FFBFBBBLRL
|
||||||
|
FFFBFFBLRR
|
||||||
|
FFFBBBFRRL
|
||||||
|
BFFBBFBRRL
|
||||||
|
BFBFFFBLRL
|
||||||
|
FBBFFBBRLL
|
||||||
|
FFBBBBBRRL
|
||||||
|
FBBBBFBLRR
|
||||||
|
BBFBFBBRRL
|
||||||
|
FBBBFFBRLR
|
||||||
|
FFBBFBBRLL
|
||||||
|
FFFBBBFLLR
|
||||||
|
BFBBFFFLRR
|
||||||
|
FBBBFFFLRL
|
||||||
|
BFBFFFBRRL
|
||||||
|
FFFFBBBLRR
|
||||||
|
FFFBFFBRLL
|
||||||
|
BFBBFBBRLR
|
||||||
|
FFFFFBBLLL
|
||||||
|
BFBBBFFRLR
|
||||||
|
BFBFFFFLRR
|
||||||
|
BFBBFFFLLR
|
||||||
|
FFFFBFFLRR
|
||||||
|
FFBFBFBLLL
|
||||||
|
BFBFBBFRLR
|
||||||
|
FBFFFBFLLR
|
||||||
|
FFBBFFBLLR
|
||||||
|
FBFBBBBRRR
|
||||||
|
FBBBBBBLLL
|
||||||
|
FFBFBBBRRR
|
||||||
|
FBFFBBFRLR
|
||||||
|
BFFFBFFLRL
|
||||||
|
FFBFBFFRLL
|
||||||
|
FBFFFFBLRR
|
||||||
|
BFBFFFFRLR
|
||||||
|
FBBBBBBRRL
|
||||||
|
BFBFBFBLRR
|
||||||
|
FFBFBBFLLR
|
||||||
|
FFFBBFFLLL
|
||||||
|
FFFBBFFLLR
|
||||||
|
FBBBFBBLLR
|
||||||
|
BFBBBFBLLL
|
||||||
|
BFBFFBFRLL
|
||||||
|
BFBBFFFRRL
|
||||||
|
BFBBFFBLLR
|
||||||
|
FBBFFBFRRL
|
||||||
|
BBFBBBBRRR
|
||||||
|
FBBBFFBRRR
|
||||||
|
BFFBBBFRLR
|
||||||
|
BBFBBBBRRL
|
||||||
|
FBBBFBFLLR
|
||||||
|
BFBFFFFRLL
|
||||||
|
FBBFFFBLLR
|
||||||
|
BBBBFFFLRL
|
||||||
|
BFFBFBFLRR
|
||||||
|
FBFFBFBRRL
|
||||||
|
BFBBBFFLRL
|
||||||
|
BBFFBFFRLL
|
||||||
|
BFBFBBBLRL
|
||||||
|
BBFFFBFLRR
|
||||||
|
BBFBFFFRRL
|
||||||
|
BFFBFBBLLR
|
||||||
|
FFFFBFBRLR
|
||||||
|
FFBBBBFLRR
|
||||||
|
FBBBBBFLLL
|
||||||
|
BFBBFBFLLL
|
||||||
|
FBBBBFBLLR
|
||||||
|
FBFBFFFLLL
|
||||||
|
BBFFFBFLLL
|
||||||
|
BBFBBBBLRL
|
||||||
|
FFFFFBBLRL
|
||||||
|
FFBFBBBLLR
|
||||||
|
FFFBFFFLLR
|
||||||
|
BFBFBFBLRL
|
||||||
|
FFBFFBFLRL
|
||||||
|
FBFFBBFLRL
|
||||||
|
FFBFBBFRRL
|
||||||
|
BFFBFFBLRR
|
||||||
|
BFFBBFFRLL
|
||||||
|
FFBFBFBRRL
|
||||||
|
FBFBFBBLRR
|
||||||
|
FBFBFBBLLL
|
||||||
|
FFFFBBFRLL
|
||||||
|
FBBBFFFRLR
|
||||||
|
FBFBBFBRLR
|
||||||
|
FBFFBBFLLL
|
||||||
|
BBFBBBFRLL
|
||||||
|
FBBBBBFLLR
|
||||||
|
FBBFFBBRRR
|
||||||
|
BFFBBBFRRL
|
||||||
|
BBFFBFFRRR
|
||||||
|
FFBFBBBLLL
|
||||||
|
FBBBBFFLLL
|
||||||
|
BBBBFBFLLR
|
||||||
|
FBBFBFFRRL
|
||||||
|
BBFBFBFRLR
|
||||||
|
FFFFBFFRRR
|
||||||
|
BFBFBFBLLL
|
||||||
|
BBFBBBBLRR
|
||||||
|
BBFFBFBLLL
|
||||||
|
BFBFBFFLRL
|
||||||
|
FFBFFFFLLR
|
||||||
|
FFFBBFFRLL
|
||||||
|
BBBBFFBRRL
|
||||||
|
BBFBBFBRRL
|
||||||
|
BBBFBFFLRL
|
||||||
|
BFFFBBBRLR
|
||||||
|
FBFBBBFLRL
|
||||||
|
FFBBBFBLRR
|
||||||
|
BFBFFFFRRR
|
||||||
|
BBBFFFBLRR
|
||||||
|
FFBFFFFRLL
|
||||||
|
BFBFFBFRRR
|
||||||
|
BFBBBFFRRL
|
||||||
|
FFFFFBFRLL
|
||||||
|
BBBFFBBLLR
|
||||||
|
BBBFFFFLRR
|
||||||
|
BFFBBFFRRL
|
||||||
|
FFBFBFFLLR
|
||||||
|
FBBBBFBRRL
|
||||||
|
FBFBFBBRRL
|
||||||
|
BBFFFFBRLL
|
||||||
|
FFBFBBBRLR
|
||||||
|
FBFBBFFLLL
|
||||||
|
FFBBBBBRLR
|
||||||
|
BFBBBBBRRL
|
||||||
|
BBBFBFFRRR
|
||||||
|
FFFBBFBRLL
|
||||||
|
BFBBFFFLLL
|
||||||
|
FFFFBFBRLL
|
||||||
|
BBFFBBFLRL
|
||||||
|
FFFBFBBRRL
|
||||||
|
BBFBFBBRLL
|
||||||
|
BFBFBBBRLR
|
||||||
|
FFFFBBBLLR
|
||||||
|
BFBBBBBRLL
|
||||||
|
FBBFBFFRRR
|
||||||
|
FBFFFBFLRR
|
||||||
|
FBBBFFFLLL
|
||||||
|
FFBFBFBRLR
|
||||||
|
FFFBFFBLLL
|
||||||
|
FFBBFBFLLL
|
||||||
|
BFBBBFBLLR
|
||||||
|
FFFFBFBRRL
|
||||||
|
FFFBFFBLLR
|
||||||
|
BBFFBBFRLR
|
||||||
|
BFFFFFBRRR
|
||||||
|
BFBBFFFRLR
|
||||||
|
FFFFFBBRLL
|
||||||
|
BBBFFBBRLL
|
||||||
|
BFFBFBBRRR
|
||||||
|
BFBFBFFRRL
|
||||||
|
FBBFFFBRRL
|
||||||
|
FFFBBFFLRL
|
||||||
|
FBBFFBFLLL
|
||||||
|
FBBFFFFLLR
|
||||||
|
BBFBBFBLRR
|
||||||
|
BBBFBBBRLR
|
||||||
|
FFFFBFFLLR
|
||||||
|
BFFBBFFLRL
|
||||||
|
BBFBBBFRRL
|
||||||
|
BBFFFFFRRL
|
||||||
|
BFBFFBBLRR
|
||||||
|
FFBBFFFRRL
|
||||||
|
BBFBFBFRLL
|
||||||
|
BFFBFFFRRR
|
||||||
|
BBFBFFFRLR
|
||||||
|
BFFBFBBRLL
|
||||||
|
BFFFFBBRRR
|
||||||
|
BFBFFBFLLL
|
||||||
|
FFFFFBFLRL
|
||||||
|
FBBFBBBLRL
|
||||||
|
BFBBBFBRLR
|
||||||
|
BFFFFFFLLL
|
||||||
|
FFFBFFFRLR
|
||||||
|
BFBBBFFRRR
|
||||||
|
FBBFFBBLRL
|
||||||
|
BBFFFFBRRL
|
||||||
|
BFFFFBBRRL
|
||||||
|
BBBFFFBRRR
|
||||||
|
BFBBFBBRLL
|
||||||
|
FBBFFBFLLR
|
||||||
|
FFBBFBBRRR
|
||||||
|
BBFFBFBLRL
|
||||||
|
FFBFBFBRRR
|
||||||
|
BFBBFFBLRL
|
||||||
|
BFFBBFFLLL
|
||||||
|
FFFBBBBLLR
|
||||||
|
FFBFBBFRLL
|
||||||
|
FBBBFFBLLL
|
||||||
|
BFBFBFFLRR
|
||||||
|
BFBBFFFRLL
|
||||||
|
FFBFBBBRRL
|
||||||
|
FFBBFBFRRL
|
||||||
|
FBFBBFBRRL
|
||||||
|
BFFBBBBLLL
|
||||||
|
BFBFFBBRRR
|
||||||
|
BBFBBBFLRL
|
||||||
|
BFBFFBFRRL
|
||||||
|
BFFBFFBLLL
|
||||||
|
FFBFFBFRRL
|
||||||
|
BBBFFFBRLR
|
||||||
|
FBBFFFBRRR
|
||||||
|
FFFBFFFLRL
|
||||||
|
FFFFBFBLLL
|
||||||
|
BBBBFFBLLL
|
||||||
|
BBFFFFBLLL
|
||||||
|
BBBFBBBLRL
|
||||||
|
FBFBFBBLLR
|
||||||
|
BFBFFFFLRL
|
||||||
|
BFFFFFFRLR
|
||||||
|
FFFFFFBRLR
|
||||||
|
BFFFFFBLRL
|
||||||
|
BBBBFFFLRR
|
||||||
|
FBBFBFBRLR
|
||||||
|
BFBBBBFLLR
|
||||||
|
FBBBBBFLRL
|
||||||
|
FFBFFFFRRR
|
||||||
|
FBFFBBFLLR
|
||||||
|
BBBBFFFLLL
|
||||||
|
FBBFFFFLRR
|
||||||
|
BBFBBFFRRR
|
||||||
|
BFBBBBFRRR
|
||||||
|
FBBBFFBRRL
|
||||||
|
BBFFFFBLLR
|
||||||
|
BBFFFFFRRR
|
||||||
|
BBFBFFFLRL
|
||||||
|
BFFFBFFLRR
|
||||||
|
BBBFBFFLRR
|
||||||
|
FFFBBFFRRL
|
||||||
|
FFFBFBFLRL
|
||||||
|
BFBFFBBLLL
|
||||||
|
FFBBFBBLRL
|
||||||
|
FBFFFFBLRL
|
||||||
|
FFFFBBFLLR
|
||||||
|
BFFBBFBLRR
|
||||||
|
BFBBBFBRRL
|
||||||
|
BBFFFBFLRL
|
||||||
|
FFBBBBFRLL
|
||||||
|
BFFFBFBRRR
|
||||||
|
FBBFBFFRLR
|
||||||
|
FBFFFFFLLL
|
||||||
|
BBFFBFFRLR
|
||||||
|
FBBBBFFRRL
|
||||||
|
BFFFBBBRLL
|
||||||
|
BBBFFBBRLR
|
||||||
|
FBFFBBFRRL
|
||||||
|
BBFBBBFLLR
|
||||||
|
FFBFFBFLLL
|
||||||
|
FBBFFFBRLR
|
||||||
|
BBFBBBBRLL
|
||||||
|
FBFBBBFLLL
|
||||||
|
FBBBBFFLRR
|
||||||
|
FBBBFBFRLL
|
||||||
|
FFFBBFBRRR
|
||||||
|
BBFBFBFLLL
|
||||||
|
BFBBBBFRLR
|
||||||
|
BBFBFFFRLL
|
||||||
|
FBBFBFFLLR
|
||||||
|
FFBBBFBRLL
|
||||||
|
FBBBFBFRRR
|
||||||
|
FBFBFBFRRR
|
||||||
|
FBBBFFFLLR
|
||||||
|
BBFFFBFRLL
|
||||||
|
BBFFBBFLLL
|
||||||
|
FFFBFBFLLR
|
||||||
|
FFBBFBFLLR
|
||||||
|
FBBFBBBLLL
|
||||||
|
FBBFBBFRLR
|
||||||
|
BFFFFFFLLR
|
||||||
|
FBFBBFBLRR
|
||||||
|
BBFFBFFLRL
|
||||||
|
BFFFFBFRLL
|
||||||
|
FBBBBBBLRL
|
||||||
|
FFFFFBFRRR
|
||||||
|
FBFFBBBRLR
|
||||||
|
FBBFFFFLRL
|
||||||
|
BBFFBFFLLL
|
||||||
|
FFBBFFFRRR
|
||||||
|
FFFFBBFLRL
|
||||||
|
BBFBFBBLLR
|
||||||
|
FBFBFFBLRR
|
||||||
|
FBBBFFFRRL
|
||||||
|
BFBFFBFRLR
|
||||||
|
BFBFBFFRRR
|
||||||
|
FBBBFBBLRR
|
||||||
|
BBFFBFBRRR
|
||||||
|
FFFFFBBRRR
|
||||||
|
BBFBFBBRRR
|
||||||
|
BFBBFBBLLL
|
||||||
|
FFBFFBBRLL
|
||||||
|
FBFFBFFLLL
|
||||||
|
FFBBFBFRLR
|
||||||
|
BBBFBBFLLR
|
||||||
|
FBBFBFBLRR
|
||||||
|
FFFBBBBLLL
|
||||||
|
BBFFFFBRRR
|
||||||
|
FBFFBBBLLR
|
||||||
|
FBFBFBFRRL
|
||||||
|
BBBFFBBLRL
|
||||||
|
BBFBFFBRRL
|
||||||
|
FBBFFBFRRR
|
||||||
|
FBBBBBFRLR
|
||||||
|
BFFFFBFLRR
|
||||||
|
FBBFBBFLLL
|
||||||
|
BFFFBFFRRL
|
||||||
|
BBBFFBBRRR
|
||||||
|
BBBFBFBLLL
|
||||||
|
BFFFBFBLRR
|
||||||
|
FBBBFFFRLL
|
||||||
|
FBFFFFBRLL
|
||||||
|
FBBFFBBLRR
|
||||||
|
FFBFFBFLRR
|
||||||
|
FBBBFFFRRR
|
||||||
|
BFFBFBFRRR
|
||||||
|
BBFFBFFRRL
|
||||||
|
FFBFFFFLLL
|
||||||
|
BFFFBBBLRL
|
||||||
|
FBFBFFFRLL
|
||||||
|
FBFBFFBRLL
|
||||||
|
BBBFBBBLLR
|
||||||
|
FFBFBFFRRR
|
||||||
|
FBFBBFFRLR
|
||||||
|
BBBFBFBRLL
|
||||||
|
BFBBBFFLLR
|
||||||
|
BBFBFBFRRR
|
||||||
|
FBFBBFFRRL
|
||||||
|
FFBBBFFLLL
|
||||||
|
BBFFFBBRLL
|
||||||
|
FBBBFBFLRR
|
||||||
|
FBFFBFBLLL
|
||||||
|
FFBFBFBLRL
|
||||||
|
FFFBFBBRRR
|
||||||
|
FBBBBBFRRR
|
||||||
|
BFFFBFFLLL
|
||||||
|
FFBBBBBRRR
|
||||||
|
FFFFFBFRRL
|
||||||
|
FBBBFBBRLL
|
||||||
|
FBBFBBFLLR
|
||||||
|
FBBFFFFRRR
|
||||||
|
FFBBBFBRRL
|
||||||
|
BFFBFFFLRL
|
||||||
|
BFFFFBFRRR
|
||||||
|
BFFFFBBLLL
|
||||||
|
FBBBBBFLRR
|
||||||
|
BFFBBFFRRR
|
||||||
|
BFBFBBFLLR
|
||||||
|
FFBBBFFRRR
|
||||||
|
FFBBFFBRRL
|
||||||
|
BFBFFBBLRL
|
||||||
|
BFFBFFBLRL
|
||||||
|
FFBBBBFLRL
|
||||||
|
FFBBFFBRLL
|
||||||
|
FBFFBFFLRL
|
||||||
|
FFBBBFBLLL
|
||||||
|
BBFBBFFRLR
|
||||||
|
BBBFBBBLRR
|
||||||
|
FFFBBBBRRR
|
||||||
|
BFFFFBBLRR
|
||||||
|
FFBFFFFLRL
|
||||||
|
BFBBBBBLRL
|
||||||
|
BBBFBBFRLL
|
||||||
|
FBFFFFFRLR
|
||||||
|
BBFFFFFRLL
|
||||||
|
FBFBFFFLRL
|
||||||
|
FFFBFBBRLR
|
||||||
|
FBBFBBFRRR
|
||||||
|
FBFBBFBRRR
|
||||||
|
BBFFFBFRRR
|
||||||
|
FFFFBBFRRR
|
||||||
|
FFFFBFBLLR
|
||||||
|
BFBBFBFLLR
|
||||||
|
BBFFBBBRRL
|
||||||
|
FFBBFBFRLL
|
||||||
|
FBFBFFFLLR
|
||||||
|
BFFBBBFRLL
|
||||||
|
FBBBBBBRRR
|
||||||
|
FBFFBBBRRL
|
||||||
|
FFBFBBFLRR
|
||||||
|
BFFFBFFRLR
|
||||||
|
BFBBBBFLLL
|
||||||
|
FFBBFFFRLR
|
||||||
|
FFBFBFFLRL
|
47
day5/main.hs
Executable file
47
day5/main.hs
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci -Wall' -T main"
|
||||||
|
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
-- import Debug.Trace (trace)
|
||||||
|
import Data.List (sort)
|
||||||
|
|
||||||
|
binaryPartitionWalker :: String -> Int -> Int -> (String, Int, Int)
|
||||||
|
binaryPartitionWalker ('F':s) begin end =
|
||||||
|
binaryPartitionWalker s begin (((end - begin) `div` 2) + begin)
|
||||||
|
binaryPartitionWalker ('B':s) begin end =
|
||||||
|
binaryPartitionWalker s (((end - begin) `div` 2) + begin + 1) end
|
||||||
|
binaryPartitionWalker ('L':s) begin end =
|
||||||
|
binaryPartitionWalker ('F':s) begin end
|
||||||
|
binaryPartitionWalker ('R':s) begin end =
|
||||||
|
binaryPartitionWalker ('B':s) begin end
|
||||||
|
binaryPartitionWalker "" b e = ("",b,e)
|
||||||
|
binaryPartitionWalker _ _ _ = undefined
|
||||||
|
|
||||||
|
seatID :: String -> Int
|
||||||
|
seatID str = row * 8 + seat
|
||||||
|
where
|
||||||
|
(rowStr, seatStr) = splitAt 7 str
|
||||||
|
(_,row,_) = binaryPartitionWalker rowStr 0 127
|
||||||
|
(_,seat,_) = binaryPartitionWalker seatStr 0 7
|
||||||
|
|
||||||
|
solvePart1 :: [String] -> Int
|
||||||
|
solvePart1 = maximum . (map seatID)
|
||||||
|
|
||||||
|
solvePart2 :: [String] -> Int
|
||||||
|
solvePart2 = fst . head . (filter (\(x,y) -> x /= y)) . (zip [13..]) . sort . (map seatID)
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn "Day 5 - Part 1"
|
||||||
|
print $ seatID "FBFBBFFRLR"
|
||||||
|
print $ seatID "BFFFBBFRRR"
|
||||||
|
print $ seatID "FFFBBBFRRR"
|
||||||
|
print $ seatID "BBFFBBFRLL"
|
||||||
|
input <- lines <$> readFile "day5/input"
|
||||||
|
putStrLn $ "Solution of part 1"
|
||||||
|
print $ solvePart1 input
|
||||||
|
putStrLn $ "Solution of part 2"
|
||||||
|
print $ solvePart2 input
|
2178
day6/input
Normal file
2178
day6/input
Normal file
File diff suppressed because it is too large
Load diff
72
day6/main.hs
Executable file
72
day6/main.hs
Executable file
|
@ -0,0 +1,72 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [shower])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci -Wall' -T main"
|
||||||
|
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
-- import Debug.Trace (trace)
|
||||||
|
import Data.List (nub)
|
||||||
|
|
||||||
|
exampleData :: [String]
|
||||||
|
exampleData =
|
||||||
|
[ "abc"
|
||||||
|
, ""
|
||||||
|
, "a"
|
||||||
|
, "b"
|
||||||
|
, "c"
|
||||||
|
, ""
|
||||||
|
, "ab"
|
||||||
|
, "ac"
|
||||||
|
, ""
|
||||||
|
, "a"
|
||||||
|
, "a"
|
||||||
|
, "a"
|
||||||
|
, "a"
|
||||||
|
, ""
|
||||||
|
, "b"
|
||||||
|
]
|
||||||
|
|
||||||
|
-- Count how many different chars per paragraph and sum them
|
||||||
|
countUniqueAnswers :: [String] -> Int
|
||||||
|
countUniqueAnswers = length . nub . concat
|
||||||
|
|
||||||
|
paragraphs :: [String] -> [[String]]
|
||||||
|
paragraphs strs = go (strs, [])
|
||||||
|
where
|
||||||
|
go :: ([String], [[String]]) -> [[String]]
|
||||||
|
go ([], ys) = ys
|
||||||
|
go (x:xs, []) = go (xs, [x] : [])
|
||||||
|
go ("":xs, ys) = go (xs, [] : ys)
|
||||||
|
go (x:xs, y:ys) = go (xs, (x:y) : ys)
|
||||||
|
|
||||||
|
solvePart1 :: [String] -> Int
|
||||||
|
solvePart1 = sum . (map countUniqueAnswers) . paragraphs
|
||||||
|
|
||||||
|
allAnsweredX :: Char -> [[String]] -> [Bool]
|
||||||
|
allAnsweredX c = map (all (any (== c)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
solvePart2 :: [String] -> Int
|
||||||
|
solvePart2 strs = length . (filter (== True)) $ concat $ map (\x -> (allAnsweredX x . paragraphs) strs) ['a'..'z']
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn "Day 6 - Part 1"
|
||||||
|
print $ exampleData
|
||||||
|
print $ countUniqueAnswers [""]
|
||||||
|
print $ countUniqueAnswers ["abc"]
|
||||||
|
print $ countUniqueAnswers ["a", "b", "c"]
|
||||||
|
print $ countUniqueAnswers ["ab", "ac"]
|
||||||
|
putStrLn "Day 6 - Part 1 : solving test"
|
||||||
|
print $ solvePart1 exampleData
|
||||||
|
putStrLn "Day 6 - Part 1 : solving input"
|
||||||
|
input <- lines <$> readFile "day6/input"
|
||||||
|
print $ solvePart1 input
|
||||||
|
putStrLn "Day 6 - Part 2 : solving test"
|
||||||
|
print $ paragraphs exampleData
|
||||||
|
print $ solvePart2 exampleData
|
||||||
|
putStrLn "Day 6 - Part 2 : solving input"
|
||||||
|
print $ solvePart2 input
|
||||||
|
|
594
day7/input
Normal file
594
day7/input
Normal file
|
@ -0,0 +1,594 @@
|
||||||
|
vibrant aqua bags contain 1 shiny magenta bag, 2 muted teal bags, 1 dim magenta bag, 1 muted chartreuse bag.
|
||||||
|
vibrant violet bags contain 4 pale maroon bags.
|
||||||
|
dark indigo bags contain 1 light maroon bag, 3 pale red bags, 1 drab brown bag, 4 dim magenta bags.
|
||||||
|
dark coral bags contain 5 dull aqua bags, 5 plaid green bags, 2 posh bronze bags.
|
||||||
|
dim lavender bags contain 2 muted violet bags, 5 wavy gold bags, 3 vibrant plum bags, 5 bright teal bags.
|
||||||
|
mirrored turquoise bags contain 5 muted olive bags, 5 bright gold bags, 2 vibrant violet bags.
|
||||||
|
faded brown bags contain 5 faded tomato bags.
|
||||||
|
muted orange bags contain 5 dull aqua bags, 2 light salmon bags, 1 striped black bag, 1 pale gray bag.
|
||||||
|
posh black bags contain 4 faded silver bags.
|
||||||
|
muted coral bags contain 3 mirrored turquoise bags.
|
||||||
|
clear silver bags contain 5 dark cyan bags.
|
||||||
|
clear crimson bags contain 2 dim blue bags, 4 bright indigo bags.
|
||||||
|
clear salmon bags contain 4 striped cyan bags, 1 muted maroon bag, 1 light bronze bag, 1 vibrant tan bag.
|
||||||
|
light olive bags contain 1 faded white bag, 2 dull chartreuse bags, 5 faded gray bags.
|
||||||
|
muted maroon bags contain 5 dark fuchsia bags, 5 drab violet bags.
|
||||||
|
posh plum bags contain 2 striped gray bags, 5 dim violet bags.
|
||||||
|
light orange bags contain 1 light purple bag.
|
||||||
|
drab white bags contain 4 plaid lime bags, 1 drab gold bag.
|
||||||
|
plaid indigo bags contain 5 clear lime bags, 1 dark fuchsia bag.
|
||||||
|
muted red bags contain 1 dull bronze bag.
|
||||||
|
mirrored magenta bags contain 5 plaid white bags, 1 faded plum bag, 5 wavy purple bags.
|
||||||
|
dotted lavender bags contain 5 shiny olive bags, 3 plaid blue bags, 1 shiny gold bag.
|
||||||
|
drab bronze bags contain 3 wavy silver bags, 4 light turquoise bags, 1 vibrant lavender bag, 5 light magenta bags.
|
||||||
|
plaid maroon bags contain 2 dim salmon bags, 5 muted violet bags.
|
||||||
|
dull salmon bags contain 5 striped beige bags, 2 muted plum bags, 1 posh teal bag.
|
||||||
|
dotted turquoise bags contain 5 striped orange bags.
|
||||||
|
bright yellow bags contain 2 shiny olive bags, 3 wavy teal bags, 1 pale plum bag, 3 mirrored coral bags.
|
||||||
|
dark black bags contain 5 pale gray bags.
|
||||||
|
shiny yellow bags contain 4 dark aqua bags, 2 drab lime bags, 2 bright gold bags, 4 dark cyan bags.
|
||||||
|
shiny red bags contain 2 posh blue bags.
|
||||||
|
posh olive bags contain 3 dim aqua bags.
|
||||||
|
muted chartreuse bags contain 4 posh brown bags, 5 shiny magenta bags.
|
||||||
|
mirrored orange bags contain 5 dotted salmon bags, 1 posh green bag.
|
||||||
|
muted plum bags contain 1 dull red bag, 4 posh green bags.
|
||||||
|
light green bags contain 2 wavy plum bags.
|
||||||
|
light cyan bags contain 2 dotted crimson bags, 4 faded salmon bags, 3 muted coral bags, 3 plaid blue bags.
|
||||||
|
dull lavender bags contain 3 drab gold bags, 5 plaid crimson bags.
|
||||||
|
posh red bags contain 3 dotted salmon bags, 2 pale beige bags, 2 mirrored coral bags, 5 muted teal bags.
|
||||||
|
vibrant beige bags contain 2 faded lime bags.
|
||||||
|
plaid blue bags contain 5 dull red bags, 3 light maroon bags, 4 muted gold bags, 2 drab orange bags.
|
||||||
|
dotted white bags contain 3 muted white bags.
|
||||||
|
drab fuchsia bags contain 2 shiny fuchsia bags.
|
||||||
|
drab crimson bags contain 1 posh beige bag, 4 drab violet bags.
|
||||||
|
drab beige bags contain 3 mirrored orange bags, 1 wavy silver bag, 2 pale magenta bags, 1 drab lime bag.
|
||||||
|
posh teal bags contain 2 clear brown bags.
|
||||||
|
mirrored brown bags contain 2 faded tan bags.
|
||||||
|
clear coral bags contain 1 muted chartreuse bag, 2 muted violet bags, 2 faded purple bags.
|
||||||
|
pale lime bags contain 5 vibrant aqua bags, 3 wavy purple bags, 1 drab violet bag.
|
||||||
|
vibrant red bags contain 5 shiny gold bags.
|
||||||
|
shiny fuchsia bags contain 1 dark salmon bag, 1 posh white bag.
|
||||||
|
bright gray bags contain 2 dim red bags.
|
||||||
|
drab lavender bags contain 2 clear tomato bags, 1 faded red bag, 1 pale chartreuse bag.
|
||||||
|
clear red bags contain 3 light salmon bags, 1 bright red bag, 5 dark indigo bags.
|
||||||
|
bright aqua bags contain 3 faded brown bags, 1 shiny yellow bag.
|
||||||
|
faded red bags contain 3 posh turquoise bags, 5 dark fuchsia bags.
|
||||||
|
faded turquoise bags contain 3 drab fuchsia bags.
|
||||||
|
dim aqua bags contain 1 faded white bag, 5 faded violet bags.
|
||||||
|
muted white bags contain 5 pale red bags, 4 dull red bags, 3 dotted maroon bags.
|
||||||
|
dull gold bags contain 3 posh green bags, 2 mirrored yellow bags, 2 dull olive bags, 2 bright purple bags.
|
||||||
|
faded blue bags contain 3 wavy crimson bags, 1 plaid beige bag, 3 dotted orange bags, 1 vibrant purple bag.
|
||||||
|
faded gray bags contain 1 bright gold bag.
|
||||||
|
dim bronze bags contain 2 bright gold bags, 4 light brown bags, 5 muted chartreuse bags.
|
||||||
|
light teal bags contain 5 striped tomato bags, 5 drab teal bags, 5 shiny lavender bags.
|
||||||
|
striped white bags contain 1 plaid silver bag, 2 wavy plum bags, 3 dull maroon bags, 2 muted green bags.
|
||||||
|
vibrant salmon bags contain 2 shiny violet bags, 4 light salmon bags.
|
||||||
|
dim plum bags contain 1 dull blue bag, 5 vibrant bronze bags.
|
||||||
|
dotted fuchsia bags contain 4 plaid green bags.
|
||||||
|
plaid crimson bags contain 3 clear teal bags, 5 dark gray bags, 2 mirrored tan bags, 5 shiny fuchsia bags.
|
||||||
|
pale white bags contain 2 muted silver bags, 1 muted lime bag.
|
||||||
|
bright violet bags contain 2 clear chartreuse bags, 2 dull gray bags, 2 muted cyan bags.
|
||||||
|
drab red bags contain 1 dotted white bag, 1 light plum bag, 5 muted indigo bags, 1 dull lime bag.
|
||||||
|
muted indigo bags contain 3 mirrored blue bags, 5 light fuchsia bags.
|
||||||
|
vibrant cyan bags contain 2 pale blue bags, 3 mirrored chartreuse bags.
|
||||||
|
mirrored gray bags contain 1 shiny red bag, 2 pale blue bags, 4 dotted lime bags, 1 faded violet bag.
|
||||||
|
posh lavender bags contain 3 vibrant aqua bags, 5 mirrored chartreuse bags.
|
||||||
|
dotted silver bags contain 3 dark beige bags, 5 dotted teal bags, 3 mirrored indigo bags, 2 dim yellow bags.
|
||||||
|
wavy magenta bags contain 4 wavy beige bags.
|
||||||
|
faded tomato bags contain 3 plaid black bags, 5 bright orange bags, 2 vibrant blue bags.
|
||||||
|
mirrored maroon bags contain 3 plaid gray bags.
|
||||||
|
pale bronze bags contain 4 vibrant violet bags, 2 muted white bags.
|
||||||
|
plaid turquoise bags contain 2 dotted lime bags, 3 striped beige bags, 1 pale crimson bag, 2 pale purple bags.
|
||||||
|
posh turquoise bags contain 5 clear yellow bags, 1 dotted turquoise bag, 3 dim cyan bags, 5 pale maroon bags.
|
||||||
|
wavy white bags contain 2 mirrored gray bags, 3 pale yellow bags.
|
||||||
|
vibrant tan bags contain 1 wavy lavender bag.
|
||||||
|
pale turquoise bags contain 2 dark gray bags, 4 faded green bags, 1 light maroon bag, 5 posh white bags.
|
||||||
|
faded beige bags contain 1 striped brown bag, 1 dull gray bag, 5 mirrored blue bags.
|
||||||
|
bright maroon bags contain 1 light blue bag, 5 dim bronze bags, 4 dotted beige bags.
|
||||||
|
shiny lavender bags contain 3 dim gray bags, 4 pale gray bags.
|
||||||
|
dull beige bags contain 3 dark crimson bags.
|
||||||
|
striped coral bags contain 3 dark lavender bags, 2 mirrored turquoise bags, 5 posh maroon bags, 1 striped yellow bag.
|
||||||
|
shiny magenta bags contain 1 plaid black bag.
|
||||||
|
muted magenta bags contain 2 plaid beige bags.
|
||||||
|
light salmon bags contain 5 striped black bags, 1 pale lavender bag.
|
||||||
|
shiny white bags contain 2 bright gold bags, 3 mirrored olive bags.
|
||||||
|
dark tomato bags contain 2 dark gold bags, 2 clear teal bags, 5 dull fuchsia bags, 4 dotted gold bags.
|
||||||
|
dotted violet bags contain 3 plaid teal bags, 5 mirrored aqua bags.
|
||||||
|
plaid purple bags contain 4 mirrored olive bags.
|
||||||
|
drab lime bags contain 5 bright beige bags, 4 mirrored tan bags, 5 striped black bags, 4 faded green bags.
|
||||||
|
dull blue bags contain 4 light red bags, 2 pale turquoise bags, 1 posh maroon bag.
|
||||||
|
muted tan bags contain 1 pale magenta bag, 3 mirrored turquoise bags, 3 shiny blue bags, 4 dotted salmon bags.
|
||||||
|
dim teal bags contain 1 posh turquoise bag, 3 dull red bags.
|
||||||
|
muted fuchsia bags contain 4 pale salmon bags, 1 pale silver bag, 3 pale maroon bags, 2 bright purple bags.
|
||||||
|
bright gold bags contain 2 shiny magenta bags, 4 pale red bags, 4 posh brown bags.
|
||||||
|
faded lime bags contain 5 vibrant bronze bags, 2 pale violet bags, 2 plaid coral bags.
|
||||||
|
posh tan bags contain 3 bright lavender bags, 2 striped blue bags, 5 shiny gold bags.
|
||||||
|
posh bronze bags contain 3 plaid olive bags, 3 dotted salmon bags.
|
||||||
|
shiny lime bags contain 1 bright salmon bag, 3 faded green bags, 2 wavy aqua bags.
|
||||||
|
faded lavender bags contain 2 bright silver bags.
|
||||||
|
muted black bags contain 5 mirrored coral bags.
|
||||||
|
plaid chartreuse bags contain 3 dull coral bags, 2 light tomato bags.
|
||||||
|
mirrored aqua bags contain 2 dark cyan bags, 2 dark indigo bags.
|
||||||
|
dark yellow bags contain 5 dotted lime bags, 1 dim cyan bag.
|
||||||
|
bright plum bags contain 5 dim salmon bags.
|
||||||
|
striped gray bags contain 3 plaid black bags, 1 wavy crimson bag, 5 bright orange bags.
|
||||||
|
faded salmon bags contain 3 clear lime bags, 4 drab purple bags.
|
||||||
|
pale olive bags contain 2 light magenta bags, 4 dim salmon bags, 5 light olive bags, 2 pale salmon bags.
|
||||||
|
faded crimson bags contain 2 wavy beige bags, 4 dim aqua bags, 5 light lavender bags.
|
||||||
|
posh chartreuse bags contain 5 pale lavender bags, 5 mirrored turquoise bags, 2 dark maroon bags.
|
||||||
|
posh aqua bags contain 5 faded crimson bags, 2 mirrored tan bags.
|
||||||
|
faded coral bags contain 2 dotted lime bags, 2 faded white bags.
|
||||||
|
striped bronze bags contain 4 plaid blue bags, 1 plaid coral bag.
|
||||||
|
wavy orange bags contain 5 pale tomato bags.
|
||||||
|
dim crimson bags contain 4 posh tan bags, 1 muted gold bag.
|
||||||
|
clear gray bags contain 3 striped lime bags, 4 vibrant fuchsia bags.
|
||||||
|
light gold bags contain 4 bright tan bags, 5 faded lime bags, 4 faded plum bags, 5 clear brown bags.
|
||||||
|
wavy red bags contain 4 pale red bags, 4 dotted maroon bags, 4 mirrored violet bags.
|
||||||
|
dull silver bags contain 1 striped turquoise bag, 2 striped orange bags, 1 dotted plum bag, 3 muted coral bags.
|
||||||
|
striped magenta bags contain 1 mirrored tan bag.
|
||||||
|
plaid plum bags contain 4 wavy tan bags, 5 wavy brown bags, 5 shiny olive bags, 5 clear yellow bags.
|
||||||
|
faded chartreuse bags contain 1 shiny teal bag.
|
||||||
|
clear chartreuse bags contain 2 drab tan bags, 3 plaid maroon bags, 2 drab orange bags, 2 plaid salmon bags.
|
||||||
|
wavy olive bags contain 5 dark lavender bags.
|
||||||
|
dull orange bags contain 1 dull gray bag, 2 light magenta bags.
|
||||||
|
wavy gold bags contain 5 vibrant yellow bags, 4 pale black bags, 2 light olive bags.
|
||||||
|
muted salmon bags contain 5 dotted turquoise bags, 5 dotted violet bags.
|
||||||
|
wavy tan bags contain 2 plaid green bags.
|
||||||
|
dotted cyan bags contain 4 drab gold bags, 1 dark crimson bag, 3 pale lavender bags.
|
||||||
|
wavy coral bags contain 3 mirrored blue bags, 5 wavy white bags, 1 striped indigo bag.
|
||||||
|
clear olive bags contain 4 wavy silver bags, 2 pale orange bags, 2 bright tan bags.
|
||||||
|
light indigo bags contain 1 pale purple bag, 4 clear teal bags, 1 plaid indigo bag, 4 dim blue bags.
|
||||||
|
dotted tomato bags contain 4 dim cyan bags.
|
||||||
|
pale indigo bags contain 2 muted chartreuse bags, 4 faded salmon bags, 3 dull brown bags.
|
||||||
|
bright magenta bags contain 1 vibrant salmon bag, 1 pale teal bag, 4 faded orange bags.
|
||||||
|
faded gold bags contain 4 striped cyan bags.
|
||||||
|
shiny orange bags contain 5 vibrant turquoise bags, 3 pale purple bags.
|
||||||
|
posh salmon bags contain 1 dotted crimson bag, 3 dark maroon bags.
|
||||||
|
dull violet bags contain 2 clear indigo bags.
|
||||||
|
posh gray bags contain 1 shiny fuchsia bag, 1 faded plum bag, 5 pale turquoise bags.
|
||||||
|
dull chartreuse bags contain 4 dull red bags, 1 striped black bag, 3 dark tan bags, 3 muted maroon bags.
|
||||||
|
dotted chartreuse bags contain 5 striped aqua bags.
|
||||||
|
dim magenta bags contain no other bags.
|
||||||
|
light lime bags contain 2 shiny magenta bags, 3 striped black bags.
|
||||||
|
drab maroon bags contain 2 vibrant bronze bags, 1 clear white bag, 2 dim gray bags.
|
||||||
|
drab salmon bags contain 2 wavy crimson bags, 3 dim gold bags, 5 drab chartreuse bags.
|
||||||
|
dotted crimson bags contain 4 pale purple bags, 3 plaid coral bags.
|
||||||
|
dull red bags contain 3 dark indigo bags, 2 posh white bags, 4 light maroon bags.
|
||||||
|
drab turquoise bags contain 2 striped tomato bags, 1 bright gold bag, 5 mirrored tan bags, 1 drab chartreuse bag.
|
||||||
|
shiny teal bags contain 4 bright lime bags, 2 pale red bags.
|
||||||
|
dark purple bags contain 5 mirrored beige bags, 1 posh purple bag, 5 dotted beige bags.
|
||||||
|
drab aqua bags contain 4 plaid blue bags, 3 dark salmon bags, 4 striped lime bags, 4 striped blue bags.
|
||||||
|
dull magenta bags contain 2 clear white bags, 5 muted bronze bags.
|
||||||
|
pale tan bags contain 1 pale lime bag.
|
||||||
|
dark fuchsia bags contain 3 dim coral bags, 1 muted white bag, 2 plaid blue bags.
|
||||||
|
mirrored beige bags contain 5 dotted magenta bags, 1 wavy olive bag, 1 dark tan bag.
|
||||||
|
drab tomato bags contain 4 dim cyan bags.
|
||||||
|
shiny tomato bags contain 2 shiny maroon bags, 2 dark lavender bags, 1 posh red bag, 3 vibrant green bags.
|
||||||
|
dim turquoise bags contain 4 muted salmon bags, 2 bright purple bags, 4 plaid maroon bags, 3 bright beige bags.
|
||||||
|
mirrored salmon bags contain 2 drab violet bags, 3 faded red bags.
|
||||||
|
pale crimson bags contain 3 bright white bags, 5 plaid beige bags.
|
||||||
|
shiny cyan bags contain 4 light blue bags.
|
||||||
|
clear lavender bags contain 5 bright turquoise bags.
|
||||||
|
vibrant purple bags contain 5 pale turquoise bags, 2 posh orange bags.
|
||||||
|
striped purple bags contain 5 muted orange bags, 5 dark aqua bags.
|
||||||
|
pale gray bags contain 5 dark indigo bags, 1 vibrant violet bag, 3 pale maroon bags, 4 bright gold bags.
|
||||||
|
posh brown bags contain 3 drab brown bags, 4 pale red bags, 2 posh white bags, 4 muted gold bags.
|
||||||
|
muted bronze bags contain 2 clear magenta bags, 5 shiny green bags, 2 mirrored tan bags, 4 posh gray bags.
|
||||||
|
pale brown bags contain 5 muted white bags, 3 plaid beige bags, 3 wavy lavender bags, 3 clear indigo bags.
|
||||||
|
dull yellow bags contain 5 clear lime bags, 4 plaid blue bags, 4 dotted lime bags.
|
||||||
|
light tan bags contain 5 dull blue bags, 2 drab yellow bags, 5 mirrored red bags.
|
||||||
|
posh gold bags contain 4 dull chartreuse bags, 2 dim magenta bags.
|
||||||
|
pale silver bags contain 4 dull aqua bags, 4 bright gold bags.
|
||||||
|
light beige bags contain 3 posh orange bags, 3 mirrored gray bags, 2 bright red bags.
|
||||||
|
striped turquoise bags contain 2 posh blue bags, 1 striped orange bag, 2 shiny tan bags, 5 vibrant aqua bags.
|
||||||
|
vibrant plum bags contain 4 pale gray bags.
|
||||||
|
dotted teal bags contain 2 dim magenta bags.
|
||||||
|
dull purple bags contain 5 drab brown bags, 4 dotted maroon bags, 1 muted white bag.
|
||||||
|
mirrored fuchsia bags contain 2 dark tomato bags, 4 faded tan bags, 2 faded white bags, 4 dotted orange bags.
|
||||||
|
dotted plum bags contain 2 dull aqua bags, 4 faded green bags.
|
||||||
|
bright fuchsia bags contain 2 wavy blue bags, 5 clear brown bags.
|
||||||
|
dim beige bags contain 2 pale orange bags.
|
||||||
|
dotted orange bags contain 2 faded brown bags, 1 clear tomato bag, 1 clear indigo bag.
|
||||||
|
plaid gold bags contain 1 striped turquoise bag, 3 vibrant magenta bags, 5 shiny gray bags, 5 shiny red bags.
|
||||||
|
clear plum bags contain 3 dim turquoise bags, 3 faded magenta bags, 2 dull coral bags.
|
||||||
|
muted green bags contain 3 dim crimson bags.
|
||||||
|
bright black bags contain 3 pale purple bags, 3 plaid white bags, 1 clear teal bag, 3 pale magenta bags.
|
||||||
|
dim gray bags contain 3 dull coral bags, 1 pale turquoise bag, 5 wavy cyan bags, 5 striped lime bags.
|
||||||
|
dotted beige bags contain 5 dull aqua bags, 3 dark fuchsia bags, 1 pale violet bag, 4 dim gold bags.
|
||||||
|
mirrored lime bags contain 4 plaid tomato bags, 1 pale lavender bag, 5 shiny blue bags, 1 light gray bag.
|
||||||
|
bright chartreuse bags contain 1 dotted teal bag, 3 shiny lavender bags.
|
||||||
|
vibrant tomato bags contain 1 vibrant coral bag.
|
||||||
|
mirrored purple bags contain 4 dark tan bags, 4 faded coral bags.
|
||||||
|
pale tomato bags contain 1 dull maroon bag, 2 striped tan bags, 5 muted cyan bags, 2 dark maroon bags.
|
||||||
|
vibrant brown bags contain 1 vibrant bronze bag, 2 pale yellow bags, 4 wavy coral bags.
|
||||||
|
dim green bags contain 2 striped coral bags.
|
||||||
|
muted lavender bags contain 3 clear purple bags, 4 dark red bags, 1 light silver bag, 1 dull blue bag.
|
||||||
|
wavy crimson bags contain 5 muted teal bags, 1 drab brown bag, 3 posh brown bags.
|
||||||
|
wavy tomato bags contain 4 striped blue bags, 3 mirrored lime bags, 1 shiny gray bag, 1 dark plum bag.
|
||||||
|
muted aqua bags contain 3 clear silver bags, 3 bright chartreuse bags, 4 striped teal bags, 2 clear indigo bags.
|
||||||
|
posh blue bags contain 2 posh teal bags, 4 dark maroon bags, 2 drab brown bags, 5 faded coral bags.
|
||||||
|
vibrant silver bags contain 5 drab yellow bags, 3 faded silver bags, 2 bright silver bags.
|
||||||
|
dim chartreuse bags contain 4 pale beige bags.
|
||||||
|
shiny gray bags contain 3 dotted magenta bags, 4 plaid crimson bags.
|
||||||
|
dim salmon bags contain 4 clear lime bags, 3 muted tomato bags, 2 shiny olive bags.
|
||||||
|
clear orange bags contain 4 posh beige bags, 5 dotted gray bags, 5 dotted turquoise bags.
|
||||||
|
plaid salmon bags contain 4 bright indigo bags.
|
||||||
|
posh beige bags contain 3 pale red bags.
|
||||||
|
clear lime bags contain 1 bright gold bag.
|
||||||
|
faded magenta bags contain 5 dim salmon bags, 3 dull aqua bags, 5 drab crimson bags.
|
||||||
|
drab blue bags contain 5 dark maroon bags, 4 wavy plum bags.
|
||||||
|
plaid aqua bags contain 5 mirrored orange bags, 3 dull violet bags, 3 bright salmon bags.
|
||||||
|
muted teal bags contain 4 dull red bags, 1 light maroon bag, 4 dark cyan bags.
|
||||||
|
posh green bags contain 1 mirrored chartreuse bag, 4 muted chartreuse bags, 5 plaid olive bags, 4 dark salmon bags.
|
||||||
|
posh fuchsia bags contain 3 bright cyan bags, 1 bright salmon bag, 4 dim salmon bags, 1 light black bag.
|
||||||
|
muted yellow bags contain 2 muted teal bags, 5 pale orange bags.
|
||||||
|
clear cyan bags contain 3 clear teal bags, 5 drab aqua bags, 2 drab brown bags.
|
||||||
|
wavy salmon bags contain 5 dark fuchsia bags, 2 dull gray bags, 4 pale tan bags.
|
||||||
|
dull crimson bags contain 5 faded indigo bags, 2 plaid black bags.
|
||||||
|
mirrored white bags contain 2 dotted plum bags, 2 dark coral bags, 3 faded gray bags.
|
||||||
|
striped violet bags contain 4 mirrored tan bags.
|
||||||
|
striped tan bags contain 2 posh coral bags.
|
||||||
|
striped tomato bags contain 1 muted teal bag, 1 faded tan bag.
|
||||||
|
faded aqua bags contain 5 faded red bags, 2 mirrored coral bags, 5 light red bags, 2 mirrored purple bags.
|
||||||
|
drab olive bags contain 2 drab gold bags.
|
||||||
|
bright lavender bags contain 1 dark salmon bag, 1 striped olive bag.
|
||||||
|
plaid green bags contain 2 bright gold bags.
|
||||||
|
dim purple bags contain 1 plaid yellow bag, 3 muted plum bags, 2 vibrant magenta bags.
|
||||||
|
faded violet bags contain 3 mirrored violet bags.
|
||||||
|
posh tomato bags contain 1 dark indigo bag, 2 pale yellow bags, 5 dull orange bags.
|
||||||
|
dim silver bags contain 1 dotted white bag, 5 faded white bags.
|
||||||
|
dotted red bags contain 2 dull yellow bags, 4 dim lavender bags, 1 light gold bag.
|
||||||
|
bright indigo bags contain 5 pale gray bags, 3 posh white bags.
|
||||||
|
faded fuchsia bags contain 4 muted green bags, 3 posh magenta bags.
|
||||||
|
wavy silver bags contain 1 dotted violet bag, 3 drab tomato bags, 4 dark fuchsia bags.
|
||||||
|
dim white bags contain 2 bright magenta bags.
|
||||||
|
pale beige bags contain 5 dim orange bags, 5 vibrant red bags.
|
||||||
|
vibrant orange bags contain 4 dull violet bags, 2 mirrored salmon bags, 1 drab lavender bag.
|
||||||
|
clear fuchsia bags contain 1 mirrored olive bag, 4 mirrored chartreuse bags, 1 posh beige bag.
|
||||||
|
vibrant indigo bags contain 5 dim lavender bags, 4 drab blue bags, 1 muted beige bag.
|
||||||
|
dim brown bags contain 2 posh brown bags.
|
||||||
|
plaid beige bags contain 1 dark tan bag, 5 clear teal bags, 2 light gray bags, 4 wavy lime bags.
|
||||||
|
bright crimson bags contain 4 drab chartreuse bags, 4 vibrant blue bags, 5 mirrored lime bags, 2 muted plum bags.
|
||||||
|
shiny purple bags contain 1 muted crimson bag.
|
||||||
|
wavy bronze bags contain 1 dim brown bag, 3 light salmon bags, 1 muted teal bag, 3 plaid olive bags.
|
||||||
|
faded bronze bags contain 2 striped blue bags, 2 posh white bags, 2 posh orange bags.
|
||||||
|
dark orange bags contain 2 vibrant aqua bags, 5 dark maroon bags, 1 mirrored aqua bag.
|
||||||
|
drab green bags contain 2 faded aqua bags, 5 posh crimson bags.
|
||||||
|
clear white bags contain 3 plaid black bags, 2 posh white bags, 5 posh lavender bags, 1 dull purple bag.
|
||||||
|
wavy black bags contain 4 bright magenta bags.
|
||||||
|
posh crimson bags contain 3 dark yellow bags, 1 mirrored purple bag, 2 dark maroon bags, 5 shiny olive bags.
|
||||||
|
dotted gray bags contain 4 posh maroon bags, 2 mirrored chartreuse bags, 5 wavy fuchsia bags.
|
||||||
|
vibrant lavender bags contain 2 plaid coral bags, 4 posh brown bags, 4 dim tan bags.
|
||||||
|
drab violet bags contain 4 muted gold bags.
|
||||||
|
striped maroon bags contain 4 dotted lavender bags, 2 dark fuchsia bags, 3 bright olive bags.
|
||||||
|
plaid white bags contain 2 wavy olive bags, 2 pale blue bags, 4 pale aqua bags.
|
||||||
|
pale gold bags contain 4 bright teal bags, 2 posh bronze bags, 3 shiny maroon bags, 1 pale brown bag.
|
||||||
|
vibrant olive bags contain 3 plaid green bags, 2 light maroon bags, 3 dotted salmon bags, 4 faded tomato bags.
|
||||||
|
dotted maroon bags contain no other bags.
|
||||||
|
light blue bags contain 2 dim violet bags, 1 vibrant beige bag.
|
||||||
|
mirrored tan bags contain 4 drab brown bags, 1 striped orange bag, 5 light maroon bags, 2 dotted maroon bags.
|
||||||
|
dark beige bags contain 1 drab maroon bag.
|
||||||
|
light silver bags contain 1 shiny chartreuse bag, 2 dim turquoise bags.
|
||||||
|
dull green bags contain 2 striped chartreuse bags, 2 mirrored gold bags, 4 dim fuchsia bags.
|
||||||
|
faded silver bags contain 3 drab violet bags.
|
||||||
|
bright beige bags contain 5 bright teal bags, 5 mirrored violet bags.
|
||||||
|
striped gold bags contain 2 wavy beige bags, 4 dim black bags.
|
||||||
|
wavy fuchsia bags contain 4 posh green bags.
|
||||||
|
shiny blue bags contain 3 posh maroon bags.
|
||||||
|
mirrored indigo bags contain 3 striped cyan bags, 2 vibrant blue bags, 5 wavy violet bags.
|
||||||
|
dim tomato bags contain 4 dull orange bags, 5 shiny green bags, 1 plaid olive bag.
|
||||||
|
plaid violet bags contain 1 dull violet bag, 4 plaid fuchsia bags.
|
||||||
|
dark white bags contain 3 drab orange bags.
|
||||||
|
drab indigo bags contain 3 dark red bags, 2 plaid tomato bags, 5 clear white bags.
|
||||||
|
shiny beige bags contain 2 posh tomato bags.
|
||||||
|
striped indigo bags contain 5 clear lavender bags, 5 dotted indigo bags, 1 muted cyan bag, 5 dark olive bags.
|
||||||
|
drab cyan bags contain 1 drab orange bag, 4 posh gold bags.
|
||||||
|
light red bags contain 4 dark indigo bags, 1 vibrant violet bag, 4 shiny magenta bags.
|
||||||
|
muted gold bags contain 3 light maroon bags, 1 striped orange bag, 4 pale maroon bags.
|
||||||
|
clear indigo bags contain 4 faded green bags, 3 clear crimson bags, 2 vibrant cyan bags.
|
||||||
|
faded tan bags contain 5 bright gold bags.
|
||||||
|
shiny salmon bags contain 1 bright lavender bag, 1 posh blue bag, 4 shiny coral bags.
|
||||||
|
dull turquoise bags contain 5 drab yellow bags, 5 dotted plum bags, 5 plaid magenta bags.
|
||||||
|
posh lime bags contain 4 wavy tan bags, 4 shiny tomato bags, 4 dim violet bags, 5 bright tan bags.
|
||||||
|
pale green bags contain 1 wavy gray bag, 2 faded lavender bags, 1 vibrant yellow bag.
|
||||||
|
mirrored gold bags contain 2 light gray bags, 5 wavy tan bags.
|
||||||
|
mirrored green bags contain 1 faded violet bag.
|
||||||
|
dark red bags contain 3 faded bronze bags, 4 dark green bags, 4 wavy crimson bags.
|
||||||
|
bright tomato bags contain 4 faded bronze bags.
|
||||||
|
mirrored crimson bags contain 5 faded red bags, 1 drab crimson bag.
|
||||||
|
faded orange bags contain 2 muted teal bags, 5 pale maroon bags, 1 dark yellow bag.
|
||||||
|
striped silver bags contain 4 mirrored lime bags, 1 dull tan bag, 1 pale fuchsia bag, 1 wavy purple bag.
|
||||||
|
wavy aqua bags contain 4 vibrant aqua bags, 4 shiny fuchsia bags, 4 dotted turquoise bags, 4 striped olive bags.
|
||||||
|
striped lavender bags contain 5 shiny lavender bags, 3 pale lime bags.
|
||||||
|
vibrant white bags contain 2 dim bronze bags, 2 light red bags, 5 shiny gold bags.
|
||||||
|
vibrant yellow bags contain 1 shiny turquoise bag, 5 dull beige bags, 4 dark gold bags, 5 dull tomato bags.
|
||||||
|
striped green bags contain 5 striped tomato bags.
|
||||||
|
muted silver bags contain 5 striped maroon bags, 5 light salmon bags, 4 clear maroon bags.
|
||||||
|
light plum bags contain 5 mirrored blue bags, 2 vibrant coral bags, 5 dim brown bags, 2 striped yellow bags.
|
||||||
|
posh yellow bags contain 1 mirrored salmon bag, 5 light plum bags.
|
||||||
|
plaid magenta bags contain 3 dull plum bags, 2 mirrored tan bags.
|
||||||
|
plaid tan bags contain 4 light turquoise bags, 4 faded purple bags, 3 mirrored crimson bags.
|
||||||
|
shiny black bags contain 3 striped violet bags, 1 dim cyan bag, 2 dim white bags.
|
||||||
|
wavy brown bags contain 2 plaid lavender bags.
|
||||||
|
vibrant gold bags contain 1 clear tomato bag, 1 wavy olive bag, 2 faded magenta bags.
|
||||||
|
clear brown bags contain 2 dim blue bags.
|
||||||
|
dim fuchsia bags contain 2 bright gold bags, 5 wavy purple bags, 3 posh orange bags.
|
||||||
|
muted turquoise bags contain 1 light turquoise bag, 3 vibrant plum bags, 5 posh maroon bags, 1 muted maroon bag.
|
||||||
|
shiny coral bags contain 3 striped yellow bags.
|
||||||
|
dotted coral bags contain 1 dark orange bag, 4 striped violet bags.
|
||||||
|
shiny bronze bags contain 5 mirrored yellow bags, 4 light violet bags, 4 light crimson bags.
|
||||||
|
dull cyan bags contain 2 dim cyan bags, 5 pale red bags.
|
||||||
|
bright tan bags contain 4 pale gray bags, 4 posh brown bags, 3 shiny fuchsia bags.
|
||||||
|
pale purple bags contain 5 wavy cyan bags, 5 dark salmon bags, 2 dark indigo bags, 1 plaid black bag.
|
||||||
|
shiny gold bags contain 2 pale maroon bags, 5 pale purple bags, 4 posh brown bags, 1 dotted turquoise bag.
|
||||||
|
dim tan bags contain 4 dark violet bags, 3 shiny blue bags.
|
||||||
|
wavy green bags contain 3 plaid gray bags.
|
||||||
|
pale orange bags contain 3 dim lime bags, 2 dark coral bags.
|
||||||
|
faded maroon bags contain 5 clear black bags, 3 light lavender bags, 3 light black bags, 2 muted orange bags.
|
||||||
|
drab teal bags contain 2 dotted crimson bags, 3 dim teal bags, 5 pale turquoise bags, 4 dark plum bags.
|
||||||
|
bright orange bags contain 3 pale maroon bags, 1 pale bronze bag, 3 dotted maroon bags.
|
||||||
|
posh coral bags contain 3 dim gold bags, 1 bright indigo bag, 3 clear black bags.
|
||||||
|
mirrored bronze bags contain 5 dull violet bags, 3 vibrant red bags.
|
||||||
|
pale lavender bags contain 2 pale purple bags, 1 pale red bag, 4 vibrant blue bags, 3 muted chartreuse bags.
|
||||||
|
wavy lavender bags contain 3 drab chartreuse bags, 1 posh teal bag.
|
||||||
|
pale blue bags contain 1 dark tan bag, 4 faded violet bags, 3 dim coral bags.
|
||||||
|
striped yellow bags contain 2 pale red bags.
|
||||||
|
shiny aqua bags contain 3 pale magenta bags.
|
||||||
|
faded olive bags contain 1 vibrant white bag, 4 muted cyan bags.
|
||||||
|
dark chartreuse bags contain 3 dim magenta bags, 3 dull plum bags, 2 pale lime bags.
|
||||||
|
dim lime bags contain 3 muted white bags, 4 striped blue bags.
|
||||||
|
wavy cyan bags contain 4 light maroon bags.
|
||||||
|
light bronze bags contain 1 dull lime bag.
|
||||||
|
muted beige bags contain 4 wavy blue bags, 2 dotted violet bags, 4 shiny orange bags.
|
||||||
|
dim coral bags contain 4 wavy crimson bags, 3 mirrored tan bags, 2 wavy cyan bags, 5 light maroon bags.
|
||||||
|
dark green bags contain 2 striped gray bags, 3 pale lavender bags, 1 striped lime bag.
|
||||||
|
pale cyan bags contain 2 vibrant green bags, 1 mirrored lime bag, 5 vibrant chartreuse bags, 1 shiny lime bag.
|
||||||
|
shiny crimson bags contain 4 dull aqua bags, 1 pale turquoise bag.
|
||||||
|
pale black bags contain 3 vibrant olive bags, 2 dull aqua bags, 1 drab turquoise bag.
|
||||||
|
striped crimson bags contain 4 dotted lavender bags, 2 clear orange bags.
|
||||||
|
clear maroon bags contain 2 muted bronze bags, 3 vibrant olive bags, 1 striped lavender bag.
|
||||||
|
dim olive bags contain 1 wavy lavender bag, 1 dotted salmon bag, 1 pale silver bag, 5 vibrant coral bags.
|
||||||
|
dotted indigo bags contain 3 dark salmon bags, 2 shiny turquoise bags, 4 plaid coral bags.
|
||||||
|
plaid orange bags contain 2 mirrored plum bags, 5 faded lime bags, 4 dotted brown bags, 2 pale tan bags.
|
||||||
|
light maroon bags contain no other bags.
|
||||||
|
light violet bags contain 5 clear yellow bags, 4 muted chartreuse bags.
|
||||||
|
light lavender bags contain 3 striped olive bags, 1 posh black bag.
|
||||||
|
muted lime bags contain 2 muted turquoise bags, 3 mirrored yellow bags, 5 clear gray bags.
|
||||||
|
faded black bags contain 1 bright crimson bag, 1 dotted beige bag, 2 shiny magenta bags.
|
||||||
|
wavy blue bags contain 5 vibrant plum bags, 5 shiny fuchsia bags, 2 posh orange bags, 1 wavy purple bag.
|
||||||
|
dark turquoise bags contain 5 shiny tan bags, 2 dull silver bags, 2 muted lime bags, 2 mirrored tan bags.
|
||||||
|
mirrored teal bags contain 4 pale brown bags, 5 drab lime bags, 5 striped beige bags.
|
||||||
|
vibrant gray bags contain 5 bright yellow bags, 1 vibrant teal bag.
|
||||||
|
clear purple bags contain 5 bright silver bags, 1 bright teal bag, 1 wavy lime bag, 4 striped blue bags.
|
||||||
|
striped lime bags contain 1 mirrored violet bag, 3 dim cyan bags, 3 vibrant turquoise bags, 2 muted white bags.
|
||||||
|
mirrored lavender bags contain 2 faded yellow bags.
|
||||||
|
posh maroon bags contain 1 dotted salmon bag, 5 drab violet bags, 5 striped lime bags, 3 dotted olive bags.
|
||||||
|
faded yellow bags contain 1 dull plum bag, 5 dim fuchsia bags.
|
||||||
|
dull aqua bags contain 2 pale maroon bags.
|
||||||
|
dark tan bags contain 4 dark salmon bags.
|
||||||
|
dim maroon bags contain 4 posh aqua bags, 3 striped yellow bags.
|
||||||
|
faded purple bags contain 5 clear teal bags, 2 dark olive bags.
|
||||||
|
clear tomato bags contain 2 pale maroon bags.
|
||||||
|
dull gray bags contain 5 light brown bags, 3 bright gold bags, 4 faded white bags, 3 vibrant coral bags.
|
||||||
|
dull maroon bags contain 4 clear indigo bags, 5 shiny magenta bags, 3 drab tomato bags, 4 dim violet bags.
|
||||||
|
pale coral bags contain 2 pale bronze bags, 2 wavy salmon bags.
|
||||||
|
drab silver bags contain 3 dark coral bags, 5 shiny violet bags, 5 faded indigo bags.
|
||||||
|
plaid black bags contain 1 dull red bag.
|
||||||
|
plaid silver bags contain 4 clear cyan bags.
|
||||||
|
dotted blue bags contain 2 plaid beige bags, 4 posh cyan bags, 4 shiny gray bags.
|
||||||
|
dotted magenta bags contain 1 drab orange bag, 5 wavy aqua bags, 2 wavy lavender bags.
|
||||||
|
clear aqua bags contain 4 striped magenta bags, 4 muted chartreuse bags.
|
||||||
|
pale red bags contain no other bags.
|
||||||
|
bright turquoise bags contain 1 wavy purple bag, 3 vibrant turquoise bags, 2 dark brown bags.
|
||||||
|
vibrant magenta bags contain 5 drab brown bags, 2 striped olive bags, 5 light plum bags.
|
||||||
|
dull brown bags contain 4 drab teal bags, 4 bright gold bags, 4 dim blue bags, 3 dotted teal bags.
|
||||||
|
dotted olive bags contain 5 striped orange bags, 1 wavy cyan bag, 3 wavy crimson bags.
|
||||||
|
bright teal bags contain 3 dim coral bags, 1 dark cyan bag, 4 bright indigo bags.
|
||||||
|
shiny chartreuse bags contain 1 drab brown bag.
|
||||||
|
bright lime bags contain 2 pale silver bags.
|
||||||
|
vibrant crimson bags contain 4 shiny white bags, 4 pale black bags, 5 clear cyan bags, 1 bright tan bag.
|
||||||
|
muted brown bags contain 5 drab purple bags.
|
||||||
|
dotted aqua bags contain 1 dim gray bag, 1 dark indigo bag, 3 posh tan bags, 5 dim lime bags.
|
||||||
|
muted tomato bags contain 1 faded orange bag, 3 vibrant aqua bags.
|
||||||
|
bright cyan bags contain 4 dotted coral bags, 2 dull lime bags, 5 clear maroon bags.
|
||||||
|
posh violet bags contain 1 light magenta bag, 4 pale maroon bags, 1 dark teal bag.
|
||||||
|
wavy turquoise bags contain 1 shiny gray bag, 4 drab tan bags, 3 pale lavender bags.
|
||||||
|
dark magenta bags contain 2 dull bronze bags.
|
||||||
|
drab gray bags contain 4 dotted turquoise bags, 5 light aqua bags.
|
||||||
|
dull coral bags contain 2 plaid black bags, 2 striped cyan bags, 3 faded bronze bags, 5 plaid crimson bags.
|
||||||
|
vibrant chartreuse bags contain 5 pale turquoise bags.
|
||||||
|
bright purple bags contain 5 vibrant salmon bags, 1 posh green bag, 4 vibrant beige bags.
|
||||||
|
mirrored tomato bags contain 4 wavy beige bags, 5 striped tan bags, 2 pale aqua bags.
|
||||||
|
shiny violet bags contain 3 shiny tan bags, 3 faded brown bags, 4 shiny green bags, 3 shiny orange bags.
|
||||||
|
plaid lavender bags contain 1 light maroon bag.
|
||||||
|
faded green bags contain 5 dark cyan bags, 2 clear teal bags, 5 muted olive bags.
|
||||||
|
dotted salmon bags contain 3 dotted olive bags, 1 dark cyan bag.
|
||||||
|
faded white bags contain 3 drab brown bags.
|
||||||
|
striped black bags contain 2 dark green bags, 5 pale bronze bags, 2 plaid olive bags.
|
||||||
|
dotted brown bags contain 1 drab salmon bag.
|
||||||
|
dark crimson bags contain 1 vibrant teal bag, 2 dim gray bags, 1 posh orange bag, 3 faded tan bags.
|
||||||
|
pale teal bags contain 5 dim violet bags.
|
||||||
|
striped cyan bags contain 3 pale purple bags, 4 dull red bags, 1 dark indigo bag, 3 dark yellow bags.
|
||||||
|
mirrored coral bags contain 2 shiny olive bags.
|
||||||
|
shiny maroon bags contain 5 vibrant coral bags, 3 plaid maroon bags, 1 striped turquoise bag, 2 wavy violet bags.
|
||||||
|
dull indigo bags contain 2 plaid magenta bags, 1 bright chartreuse bag.
|
||||||
|
drab magenta bags contain 4 striped olive bags, 3 posh white bags.
|
||||||
|
clear tan bags contain 4 light gold bags, 4 muted gold bags.
|
||||||
|
dark gray bags contain 4 plaid blue bags, 5 drab brown bags, 3 pale gray bags, 3 mirrored violet bags.
|
||||||
|
wavy teal bags contain 4 drab aqua bags, 3 pale salmon bags.
|
||||||
|
dotted tan bags contain 2 pale bronze bags, 3 faded orange bags.
|
||||||
|
bright brown bags contain 3 bright blue bags.
|
||||||
|
clear blue bags contain 5 shiny crimson bags, 1 dark cyan bag.
|
||||||
|
clear yellow bags contain 1 muted gold bag, 1 posh orange bag, 1 dull purple bag, 4 dark indigo bags.
|
||||||
|
pale aqua bags contain 3 dim coral bags, 2 mirrored aqua bags.
|
||||||
|
dull olive bags contain 1 dull yellow bag.
|
||||||
|
muted violet bags contain 3 shiny tan bags.
|
||||||
|
striped aqua bags contain 2 vibrant green bags, 2 faded coral bags, 2 dark cyan bags, 4 wavy beige bags.
|
||||||
|
pale fuchsia bags contain 5 dull green bags, 2 dotted aqua bags.
|
||||||
|
shiny brown bags contain 4 dim black bags.
|
||||||
|
plaid coral bags contain 3 faded bronze bags, 2 pale lavender bags, 3 dotted tan bags, 2 wavy lavender bags.
|
||||||
|
posh magenta bags contain 2 clear red bags, 4 dim brown bags.
|
||||||
|
wavy purple bags contain 4 dim magenta bags.
|
||||||
|
plaid fuchsia bags contain 2 striped olive bags, 3 light gray bags.
|
||||||
|
dim violet bags contain 3 dark brown bags, 4 muted plum bags.
|
||||||
|
light turquoise bags contain 5 clear brown bags, 5 muted chartreuse bags.
|
||||||
|
dull white bags contain 4 wavy salmon bags, 3 dotted crimson bags, 1 dark coral bag, 1 pale chartreuse bag.
|
||||||
|
light brown bags contain 2 plaid black bags, 3 light red bags.
|
||||||
|
dotted purple bags contain 1 posh crimson bag, 4 vibrant red bags, 2 wavy beige bags.
|
||||||
|
striped orange bags contain no other bags.
|
||||||
|
clear green bags contain 3 light plum bags, 1 wavy lavender bag, 1 shiny olive bag.
|
||||||
|
bright red bags contain 5 dotted turquoise bags, 3 dim aqua bags, 2 posh orange bags.
|
||||||
|
dark bronze bags contain 2 pale yellow bags, 1 striped brown bag, 3 striped chartreuse bags.
|
||||||
|
muted cyan bags contain 3 muted olive bags, 2 shiny red bags, 1 vibrant lavender bag, 5 drab gold bags.
|
||||||
|
light coral bags contain 3 shiny gray bags, 5 dull bronze bags, 5 muted fuchsia bags, 5 clear magenta bags.
|
||||||
|
shiny olive bags contain 4 dull cyan bags, 5 dark gray bags.
|
||||||
|
drab orange bags contain no other bags.
|
||||||
|
striped salmon bags contain 5 drab salmon bags, 5 pale plum bags.
|
||||||
|
plaid cyan bags contain 2 bright blue bags, 1 mirrored gray bag, 5 faded violet bags.
|
||||||
|
plaid teal bags contain 3 pale maroon bags, 1 clear teal bag.
|
||||||
|
faded cyan bags contain 1 dim bronze bag, 3 light olive bags, 1 muted beige bag, 1 wavy teal bag.
|
||||||
|
clear magenta bags contain 5 striped orange bags.
|
||||||
|
dull black bags contain 1 shiny purple bag, 1 mirrored red bag, 4 dotted fuchsia bags, 3 vibrant crimson bags.
|
||||||
|
mirrored blue bags contain 3 light brown bags.
|
||||||
|
mirrored black bags contain 3 dim coral bags, 3 plaid purple bags.
|
||||||
|
dim black bags contain 4 dim blue bags.
|
||||||
|
pale plum bags contain 4 muted coral bags, 2 light purple bags.
|
||||||
|
dark salmon bags contain 2 plaid blue bags, 4 vibrant turquoise bags, 3 posh white bags.
|
||||||
|
striped red bags contain 1 dim plum bag.
|
||||||
|
striped beige bags contain 1 dark tomato bag.
|
||||||
|
clear beige bags contain 2 posh orange bags, 4 muted coral bags.
|
||||||
|
bright blue bags contain 4 faded gold bags, 4 faded indigo bags.
|
||||||
|
light purple bags contain 4 muted violet bags, 1 pale red bag.
|
||||||
|
dim indigo bags contain 3 dim silver bags, 2 faded violet bags.
|
||||||
|
dotted green bags contain 5 dotted chartreuse bags, 1 pale black bag.
|
||||||
|
pale yellow bags contain 3 plaid tomato bags.
|
||||||
|
drab tan bags contain 3 dim plum bags, 2 dark fuchsia bags.
|
||||||
|
bright white bags contain 3 muted bronze bags.
|
||||||
|
shiny turquoise bags contain 4 drab brown bags.
|
||||||
|
pale maroon bags contain no other bags.
|
||||||
|
faded indigo bags contain 1 faded tomato bag, 2 light red bags, 5 vibrant bronze bags.
|
||||||
|
dotted black bags contain 1 clear brown bag, 5 mirrored olive bags, 4 dim brown bags, 2 drab red bags.
|
||||||
|
light chartreuse bags contain 5 muted black bags.
|
||||||
|
posh orange bags contain 4 light maroon bags, 1 muted white bag.
|
||||||
|
vibrant turquoise bags contain 1 dark maroon bag, 1 shiny magenta bag, 2 dotted maroon bags.
|
||||||
|
striped fuchsia bags contain 5 clear blue bags, 5 pale black bags, 1 mirrored maroon bag, 2 dotted maroon bags.
|
||||||
|
dark violet bags contain 5 clear white bags.
|
||||||
|
pale salmon bags contain 1 vibrant violet bag, 3 plaid olive bags.
|
||||||
|
pale violet bags contain 4 shiny chartreuse bags, 5 dark salmon bags, 3 bright indigo bags, 4 dark orange bags.
|
||||||
|
faded teal bags contain 2 dark gray bags, 2 posh black bags, 3 plaid maroon bags.
|
||||||
|
drab yellow bags contain 4 mirrored blue bags, 4 mirrored violet bags, 3 dim salmon bags, 1 clear yellow bag.
|
||||||
|
wavy indigo bags contain 2 shiny olive bags, 5 plaid aqua bags.
|
||||||
|
shiny tan bags contain 2 wavy purple bags, 1 dotted aqua bag, 1 light violet bag.
|
||||||
|
dull lime bags contain 1 dull coral bag.
|
||||||
|
clear turquoise bags contain 1 vibrant fuchsia bag, 5 dull beige bags.
|
||||||
|
dark blue bags contain 2 dark violet bags, 2 dotted maroon bags, 4 bright aqua bags, 4 clear black bags.
|
||||||
|
drab black bags contain 2 dim gold bags, 1 plaid crimson bag.
|
||||||
|
dotted bronze bags contain 5 dim bronze bags.
|
||||||
|
mirrored cyan bags contain 3 muted salmon bags.
|
||||||
|
light gray bags contain 1 faded gold bag, 4 faded coral bags, 4 faded silver bags, 2 faded tomato bags.
|
||||||
|
vibrant blue bags contain 2 muted gold bags.
|
||||||
|
dark maroon bags contain 3 mirrored violet bags, 3 muted gold bags, 3 drab brown bags, 4 plaid black bags.
|
||||||
|
pale chartreuse bags contain 5 dotted teal bags, 4 bright gold bags.
|
||||||
|
mirrored yellow bags contain 4 dim cyan bags.
|
||||||
|
shiny plum bags contain 3 dull green bags, 3 vibrant olive bags, 3 dim tan bags.
|
||||||
|
mirrored chartreuse bags contain 1 dark tan bag, 5 drab aqua bags.
|
||||||
|
dark gold bags contain 4 drab yellow bags, 4 pale bronze bags.
|
||||||
|
vibrant lime bags contain 3 dull salmon bags.
|
||||||
|
dim blue bags contain 2 dull cyan bags, 2 dull purple bags, 1 dark indigo bag.
|
||||||
|
dark brown bags contain 5 dull chartreuse bags.
|
||||||
|
light tomato bags contain 5 posh teal bags, 3 wavy yellow bags, 5 bright olive bags, 4 pale brown bags.
|
||||||
|
bright green bags contain 2 bright teal bags.
|
||||||
|
shiny silver bags contain 2 mirrored indigo bags, 4 faded silver bags, 2 dark lavender bags.
|
||||||
|
bright olive bags contain 5 drab turquoise bags.
|
||||||
|
striped teal bags contain 1 vibrant tan bag.
|
||||||
|
dotted yellow bags contain 1 clear tomato bag, 5 muted orange bags, 3 striped turquoise bags, 3 dim lime bags.
|
||||||
|
posh white bags contain no other bags.
|
||||||
|
plaid red bags contain 3 dotted teal bags, 2 light brown bags, 4 vibrant teal bags.
|
||||||
|
drab purple bags contain 5 pale purple bags, 1 shiny blue bag, 2 shiny orange bags.
|
||||||
|
vibrant maroon bags contain 3 shiny cyan bags, 5 striped lavender bags.
|
||||||
|
striped brown bags contain 5 faded salmon bags, 4 clear violet bags, 1 plaid salmon bag, 5 dotted tomato bags.
|
||||||
|
muted blue bags contain 1 drab chartreuse bag.
|
||||||
|
striped blue bags contain 4 dark cyan bags.
|
||||||
|
striped plum bags contain 2 wavy violet bags.
|
||||||
|
clear violet bags contain 2 dotted crimson bags, 3 plaid magenta bags.
|
||||||
|
clear teal bags contain 2 bright gold bags, 4 plaid black bags.
|
||||||
|
dim gold bags contain 5 pale gray bags, 3 drab orange bags, 3 plaid black bags.
|
||||||
|
wavy violet bags contain 3 dull beige bags.
|
||||||
|
wavy lime bags contain 2 bright lavender bags.
|
||||||
|
muted purple bags contain 3 wavy brown bags, 4 muted blue bags.
|
||||||
|
shiny indigo bags contain 1 shiny aqua bag, 4 bright aqua bags, 2 clear turquoise bags.
|
||||||
|
dim orange bags contain 5 striped lime bags.
|
||||||
|
clear bronze bags contain 4 pale black bags, 4 bright olive bags.
|
||||||
|
wavy gray bags contain 3 dotted teal bags, 2 striped lavender bags, 2 wavy aqua bags.
|
||||||
|
dull tan bags contain 5 vibrant violet bags, 2 muted maroon bags, 5 vibrant plum bags, 3 shiny red bags.
|
||||||
|
drab chartreuse bags contain 4 striped gray bags, 4 pale bronze bags, 5 dim aqua bags.
|
||||||
|
plaid gray bags contain 1 shiny blue bag, 4 clear brown bags, 4 shiny tan bags, 4 plaid beige bags.
|
||||||
|
drab plum bags contain 5 vibrant cyan bags, 3 vibrant aqua bags, 5 dim coral bags, 1 dull orange bag.
|
||||||
|
clear gold bags contain 1 drab olive bag, 5 drab orange bags, 4 shiny tan bags.
|
||||||
|
dull tomato bags contain 3 bright teal bags, 1 muted chartreuse bag.
|
||||||
|
bright silver bags contain 1 dull chartreuse bag, 5 bright gold bags, 4 faded silver bags.
|
||||||
|
clear black bags contain 5 dull orange bags, 3 dim black bags, 1 posh beige bag.
|
||||||
|
striped olive bags contain 2 pale maroon bags.
|
||||||
|
light fuchsia bags contain 5 pale silver bags, 4 dark olive bags, 1 clear magenta bag.
|
||||||
|
posh indigo bags contain 2 wavy purple bags, 3 striped beige bags, 4 vibrant white bags.
|
||||||
|
dark aqua bags contain 5 drab tomato bags, 4 faded red bags, 4 light magenta bags, 4 striped tomato bags.
|
||||||
|
plaid olive bags contain 2 posh brown bags.
|
||||||
|
wavy plum bags contain 3 shiny blue bags, 4 dark lavender bags, 5 pale violet bags.
|
||||||
|
vibrant teal bags contain 4 dull purple bags, 4 dull plum bags.
|
||||||
|
dotted gold bags contain 3 wavy maroon bags.
|
||||||
|
drab brown bags contain no other bags.
|
||||||
|
dull teal bags contain 5 wavy beige bags, 1 muted tomato bag, 1 drab aqua bag.
|
||||||
|
mirrored plum bags contain 4 muted chartreuse bags, 5 dull orange bags, 3 clear black bags.
|
||||||
|
wavy beige bags contain 4 pale violet bags, 5 dim tan bags, 3 pale fuchsia bags, 2 wavy tan bags.
|
||||||
|
plaid lime bags contain 3 pale crimson bags.
|
||||||
|
plaid brown bags contain 2 dull green bags.
|
||||||
|
light black bags contain 1 faded gold bag, 1 bright tan bag.
|
||||||
|
dim cyan bags contain 2 clear yellow bags, 3 plaid blue bags, 1 dull purple bag.
|
||||||
|
drab coral bags contain 1 bright gray bag, 1 muted magenta bag, 5 mirrored lime bags, 1 mirrored olive bag.
|
||||||
|
bright coral bags contain 3 plaid blue bags.
|
||||||
|
mirrored silver bags contain 5 clear white bags.
|
||||||
|
plaid tomato bags contain 5 dull red bags, 3 shiny green bags, 5 drab fuchsia bags, 3 dull tomato bags.
|
||||||
|
faded plum bags contain 5 dark violet bags, 3 dim brown bags.
|
||||||
|
light white bags contain 5 dotted teal bags, 2 dim tan bags.
|
||||||
|
dull bronze bags contain 3 vibrant turquoise bags.
|
||||||
|
vibrant coral bags contain 3 faded bronze bags.
|
||||||
|
posh silver bags contain 5 wavy olive bags, 3 dotted red bags, 3 faded violet bags.
|
||||||
|
dim yellow bags contain 4 pale tomato bags, 4 dim tan bags, 3 vibrant gold bags, 2 bright gold bags.
|
||||||
|
bright salmon bags contain 5 shiny orange bags, 2 dark yellow bags, 5 muted gold bags, 4 dark fuchsia bags.
|
||||||
|
light yellow bags contain 3 clear cyan bags.
|
||||||
|
dim red bags contain 3 clear lavender bags, 1 muted bronze bag, 4 vibrant salmon bags.
|
||||||
|
dark silver bags contain 1 dull brown bag, 1 wavy lavender bag, 2 shiny crimson bags, 1 clear tan bag.
|
||||||
|
dull fuchsia bags contain 5 striped cyan bags, 4 mirrored violet bags.
|
||||||
|
drab gold bags contain 5 posh lavender bags, 4 mirrored olive bags, 2 dark tan bags, 3 dotted olive bags.
|
||||||
|
muted gray bags contain 1 striped magenta bag, 2 dull tomato bags, 5 plaid olive bags, 1 faded gray bag.
|
||||||
|
bright bronze bags contain 1 clear silver bag, 4 dim lime bags.
|
||||||
|
dark cyan bags contain 5 dark maroon bags, 3 dull red bags, 1 bright gold bag.
|
||||||
|
dark plum bags contain 1 vibrant turquoise bag.
|
||||||
|
wavy maroon bags contain 5 shiny gold bags, 1 drab black bag.
|
||||||
|
light crimson bags contain 2 light plum bags, 3 plaid purple bags.
|
||||||
|
wavy chartreuse bags contain 2 pale gray bags, 5 dim purple bags, 2 drab turquoise bags.
|
||||||
|
plaid yellow bags contain 5 muted tan bags, 2 wavy cyan bags, 3 light gold bags, 1 dim gold bag.
|
||||||
|
mirrored violet bags contain no other bags.
|
||||||
|
wavy yellow bags contain 2 dim aqua bags, 1 dark fuchsia bag, 5 faded coral bags, 1 faded silver bag.
|
||||||
|
plaid bronze bags contain 1 striped bronze bag.
|
||||||
|
vibrant green bags contain 3 striped chartreuse bags, 3 pale lavender bags, 4 dotted lime bags, 4 plaid lavender bags.
|
||||||
|
muted crimson bags contain 3 dim blue bags, 1 dull lime bag, 3 plaid indigo bags, 1 pale plum bag.
|
||||||
|
posh cyan bags contain 5 drab brown bags, 5 faded blue bags.
|
||||||
|
vibrant black bags contain 3 pale silver bags.
|
||||||
|
light aqua bags contain 2 faded crimson bags, 3 dark bronze bags, 1 dim orange bag.
|
||||||
|
mirrored red bags contain 3 light violet bags.
|
||||||
|
dark lime bags contain 1 striped turquoise bag.
|
||||||
|
mirrored olive bags contain 1 faded bronze bag, 1 drab aqua bag, 1 dark indigo bag, 3 posh white bags.
|
||||||
|
striped chartreuse bags contain 2 mirrored gold bags.
|
||||||
|
dotted lime bags contain 1 vibrant turquoise bag, 2 dotted turquoise bags, 5 dull red bags.
|
||||||
|
vibrant bronze bags contain 1 posh green bag, 3 posh tan bags, 5 light salmon bags.
|
||||||
|
dark teal bags contain 4 shiny lavender bags, 5 dull orange bags.
|
||||||
|
shiny green bags contain 2 bright lavender bags, 3 shiny olive bags, 4 mirrored violet bags, 5 posh white bags.
|
||||||
|
light magenta bags contain 2 pale maroon bags.
|
||||||
|
pale magenta bags contain 5 dull aqua bags.
|
||||||
|
dull plum bags contain 2 vibrant violet bags, 5 pale red bags, 2 wavy fuchsia bags.
|
||||||
|
muted olive bags contain 5 bright teal bags.
|
||||||
|
vibrant fuchsia bags contain 3 posh brown bags.
|
||||||
|
dark olive bags contain 5 dim coral bags, 4 pale red bags, 5 drab aqua bags.
|
||||||
|
posh purple bags contain 2 bright red bags, 4 pale coral bags, 1 dotted bronze bag.
|
||||||
|
dark lavender bags contain 2 striped blue bags, 5 posh blue bags, 2 plaid green bags.
|
154
day7/main.hs
Executable file
154
day7/main.hs
Executable file
|
@ -0,0 +1,154 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [attoparsec multiset containers pretty-simple])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci -Wall' -T main"
|
||||||
|
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
|
import Control.Monad.Zip
|
||||||
|
import Data.Attoparsec.Text (Parser, parseOnly)
|
||||||
|
import Data.Bool (bool)
|
||||||
|
import Data.Map (Map)
|
||||||
|
import Data.Monoid (Sum(..))
|
||||||
|
import Data.MultiSet (MultiSet)
|
||||||
|
import Data.Tree (Tree)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
-- import Debug.Trace (trace)
|
||||||
|
import qualified Data.Attoparsec.Text as A
|
||||||
|
import qualified Data.Map.Strict as M
|
||||||
|
import qualified Data.MultiSet as B
|
||||||
|
import qualified Data.Text as Text
|
||||||
|
import qualified Data.Tree as T
|
||||||
|
|
||||||
|
exampleData :: [String]
|
||||||
|
exampleData =
|
||||||
|
[ "light red bags contain 1 bright white bag, 2 muted yellow bags."
|
||||||
|
, "dark orange bags contain 3 bright white bags, 4 muted yellow bags."
|
||||||
|
, "bright white bags contain 1 shiny gold bag."
|
||||||
|
, "muted yellow bags contain 2 shiny gold bags, 9 faded blue bags."
|
||||||
|
, "shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags."
|
||||||
|
, "dark olive bags contain 3 faded blue bags, 4 dotted black bags."
|
||||||
|
, "vibrant plum bags contain 5 faded blue bags, 6 dotted black bags."
|
||||||
|
, "faded blue bags contain no other bags."
|
||||||
|
, "dotted black bags contain no other bags."
|
||||||
|
]
|
||||||
|
|
||||||
|
exampleData2 :: [String]
|
||||||
|
exampleData2 =
|
||||||
|
[ "shiny gold bags contain 2 dark red bags."
|
||||||
|
, "dark red bags contain 2 dark orange bags."
|
||||||
|
, "dark orange bags contain 2 dark yellow bags."
|
||||||
|
, "dark yellow bags contain 2 dark green bags."
|
||||||
|
, "dark green bags contain 2 dark blue bags."
|
||||||
|
, "dark blue bags contain 2 dark violet bags."
|
||||||
|
, "dark violet bags contain no other bags."
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
data Color = Color String String
|
||||||
|
deriving (Show, Ord, Eq)
|
||||||
|
|
||||||
|
-- An efficient implementation of multisets, also sometimes called bags.
|
||||||
|
type Bag = MultiSet Color
|
||||||
|
|
||||||
|
parseFullColor :: Parser Color
|
||||||
|
parseFullColor = do
|
||||||
|
adjective <- A.many' A.letter
|
||||||
|
A.skipSpace
|
||||||
|
colorName <- A.many' A.letter
|
||||||
|
A.skipSpace
|
||||||
|
_ <- ("bags" <|> "bag")
|
||||||
|
pure $ Color adjective colorName
|
||||||
|
|
||||||
|
parseBag' :: Parser Bag
|
||||||
|
parseBag' = do
|
||||||
|
i <- A.decimal
|
||||||
|
A.skipSpace
|
||||||
|
c <- parseFullColor
|
||||||
|
pure $ B.insertMany c i B.empty
|
||||||
|
|
||||||
|
parseNoBag :: Parser Bag
|
||||||
|
parseNoBag = do
|
||||||
|
_ <- "no other bags"
|
||||||
|
pure $ B.empty
|
||||||
|
|
||||||
|
parseBag :: Parser Bag
|
||||||
|
parseBag = parseNoBag <|> parseBag'
|
||||||
|
|
||||||
|
type Rules = Map Color Bag
|
||||||
|
|
||||||
|
parseRule :: Parser Rules
|
||||||
|
parseRule = do
|
||||||
|
k <- parseFullColor
|
||||||
|
A.skipSpace
|
||||||
|
_ <- "contain"
|
||||||
|
A.skipSpace
|
||||||
|
vx <- parseBag `A.sepBy` (", ")
|
||||||
|
_ <- "."
|
||||||
|
let v = B.unions vx
|
||||||
|
pure $ M.insert k v M.empty
|
||||||
|
|
||||||
|
|
||||||
|
eitherToMaybe :: Either b a -> Maybe a
|
||||||
|
eitherToMaybe (Right v) = Just v
|
||||||
|
eitherToMaybe (Left _) = Nothing
|
||||||
|
|
||||||
|
parseStrs :: [String] -> Maybe Rules
|
||||||
|
parseStrs s = M.unions <$> parse s
|
||||||
|
where
|
||||||
|
parse = eitherToMaybe
|
||||||
|
. sequence
|
||||||
|
. map (parseOnly (parseRule <* A.endOfInput) . Text.pack)
|
||||||
|
|
||||||
|
mkTree :: (Color,Int) -> Rules -> Tree (Color, Int)
|
||||||
|
mkTree color rules = T.unfoldTree mkNode color
|
||||||
|
where
|
||||||
|
mkNode :: (Color, Int) -> ((Color, Int), [(Color, Int)])
|
||||||
|
mkNode n@(c,_) = (n, concat $ B.toOccurList <$> M.lookup c rules)
|
||||||
|
|
||||||
|
mkSimpleTree :: Color -> Rules -> Tree Color
|
||||||
|
mkSimpleTree color rules = T.unfoldTree mkNode color
|
||||||
|
where
|
||||||
|
mkNode :: Color -> (Color, [Color])
|
||||||
|
mkNode c = (c, fmap fst <$> concat $ B.toOccurList <$> M.lookup c rules)
|
||||||
|
|
||||||
|
solvePart1 :: Color -> [String] -> Maybe Int
|
||||||
|
solvePart1 color strs = do
|
||||||
|
rules <- parseStrs strs
|
||||||
|
let trees = map (\c -> mkSimpleTree c rules) (filter (/= color) $ M.keys rules)
|
||||||
|
let containColor = map (elem color) trees
|
||||||
|
pure $ getSum $ foldMap (Sum . bool 0 1) containColor
|
||||||
|
-- ^^ complicated exp for: pure $ length $ filter (== True) containColor
|
||||||
|
|
||||||
|
updateTree :: Tree Int -> Tree Int
|
||||||
|
updateTree t@(T.Node _ []) = t
|
||||||
|
updateTree (T.Node v vx) = T.Node v (fmap ((fmap ((*) v)) . updateTree) vx)
|
||||||
|
|
||||||
|
solvePart2 :: Color -> [String] -> Maybe ( Sum Int )
|
||||||
|
solvePart2 color strs = do
|
||||||
|
rules <- parseStrs strs
|
||||||
|
let tree = mkTree (color,1) rules
|
||||||
|
pure $ foldMap Sum $ (updateTree . snd . munzip) tree
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
input <- lines <$> readFile "day7/input"
|
||||||
|
putStrLn ":: Day 7 - Part 1"
|
||||||
|
print $ exampleData
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
print $ parseOnly (parseFullColor <* A.endOfInput) "light red bag"
|
||||||
|
print $ parseOnly (parseBag <* A.endOfInput) "2 muted blue bags"
|
||||||
|
print $ parseOnly (parseBag <* A.endOfInput) "3 muted red bages"
|
||||||
|
print $ parseOnly (parseRule <* A.endOfInput) "dark orange bags contain 3 bright white bags, 4 muted yellow bags."
|
||||||
|
putStrLn ":: Parsing test data"
|
||||||
|
print $ parseStrs exampleData
|
||||||
|
putStrLn ":: Building tree"
|
||||||
|
pPrint $ mkTree (Color "shiny" "gold", 1) <$> (parseStrs exampleData)
|
||||||
|
putStrLn ":: Solving Part 1"
|
||||||
|
print $ solvePart1 (Color "shiny" "gold") exampleData
|
||||||
|
print $ solvePart1 (Color "shiny" "gold") input
|
||||||
|
putStrLn ":: Solving Part 2"
|
||||||
|
print $ solvePart2 (Color "shiny" "gold") exampleData
|
||||||
|
print $ solvePart2 (Color "shiny" "gold") exampleData2
|
||||||
|
print $ solvePart2 (Color "shiny" "gold") input
|
643
day8/input
Normal file
643
day8/input
Normal file
|
@ -0,0 +1,643 @@
|
||||||
|
acc -15
|
||||||
|
jmp +164
|
||||||
|
nop +157
|
||||||
|
acc -12
|
||||||
|
acc -19
|
||||||
|
acc +41
|
||||||
|
jmp +177
|
||||||
|
acc +36
|
||||||
|
acc +37
|
||||||
|
nop +471
|
||||||
|
jmp +433
|
||||||
|
acc +24
|
||||||
|
acc +13
|
||||||
|
acc -12
|
||||||
|
jmp +556
|
||||||
|
jmp +1
|
||||||
|
acc -15
|
||||||
|
acc +33
|
||||||
|
jmp +299
|
||||||
|
jmp +344
|
||||||
|
acc -3
|
||||||
|
jmp +124
|
||||||
|
acc +10
|
||||||
|
nop +562
|
||||||
|
acc +45
|
||||||
|
jmp +386
|
||||||
|
acc -3
|
||||||
|
jmp +206
|
||||||
|
acc -19
|
||||||
|
acc +12
|
||||||
|
jmp +424
|
||||||
|
acc -18
|
||||||
|
acc +23
|
||||||
|
acc +12
|
||||||
|
acc +0
|
||||||
|
jmp +311
|
||||||
|
nop +327
|
||||||
|
jmp +301
|
||||||
|
acc +20
|
||||||
|
nop +375
|
||||||
|
jmp +25
|
||||||
|
acc -13
|
||||||
|
acc +49
|
||||||
|
acc +23
|
||||||
|
acc -3
|
||||||
|
jmp +346
|
||||||
|
acc +2
|
||||||
|
acc +3
|
||||||
|
jmp +123
|
||||||
|
acc -7
|
||||||
|
nop +183
|
||||||
|
jmp +165
|
||||||
|
acc +47
|
||||||
|
acc +34
|
||||||
|
jmp +1
|
||||||
|
jmp +359
|
||||||
|
acc +12
|
||||||
|
acc +16
|
||||||
|
acc -3
|
||||||
|
acc +0
|
||||||
|
jmp +556
|
||||||
|
acc +14
|
||||||
|
acc -3
|
||||||
|
jmp +559
|
||||||
|
jmp +192
|
||||||
|
jmp +495
|
||||||
|
nop +264
|
||||||
|
acc +3
|
||||||
|
acc +47
|
||||||
|
jmp +187
|
||||||
|
acc -18
|
||||||
|
jmp +1
|
||||||
|
acc -12
|
||||||
|
jmp -58
|
||||||
|
acc +49
|
||||||
|
nop +288
|
||||||
|
jmp +145
|
||||||
|
acc +46
|
||||||
|
jmp +294
|
||||||
|
acc +38
|
||||||
|
nop +400
|
||||||
|
jmp +373
|
||||||
|
acc +7
|
||||||
|
acc +31
|
||||||
|
jmp +492
|
||||||
|
acc +40
|
||||||
|
acc +5
|
||||||
|
acc +11
|
||||||
|
jmp +263
|
||||||
|
acc +29
|
||||||
|
acc +10
|
||||||
|
acc +21
|
||||||
|
acc +14
|
||||||
|
jmp +450
|
||||||
|
nop +458
|
||||||
|
acc +38
|
||||||
|
nop +432
|
||||||
|
acc +42
|
||||||
|
jmp +191
|
||||||
|
jmp +279
|
||||||
|
nop +71
|
||||||
|
acc -17
|
||||||
|
jmp -64
|
||||||
|
acc +17
|
||||||
|
jmp +1
|
||||||
|
acc +29
|
||||||
|
jmp +506
|
||||||
|
jmp +354
|
||||||
|
acc +42
|
||||||
|
acc +32
|
||||||
|
jmp -40
|
||||||
|
jmp +184
|
||||||
|
acc +41
|
||||||
|
acc -7
|
||||||
|
acc +10
|
||||||
|
acc +38
|
||||||
|
jmp +100
|
||||||
|
jmp +104
|
||||||
|
jmp +245
|
||||||
|
jmp +335
|
||||||
|
jmp +20
|
||||||
|
acc +3
|
||||||
|
jmp +490
|
||||||
|
jmp -62
|
||||||
|
acc +34
|
||||||
|
acc +34
|
||||||
|
acc -1
|
||||||
|
jmp +6
|
||||||
|
acc +5
|
||||||
|
acc -9
|
||||||
|
acc -19
|
||||||
|
jmp +397
|
||||||
|
jmp +253
|
||||||
|
acc +9
|
||||||
|
jmp +270
|
||||||
|
acc +8
|
||||||
|
acc -16
|
||||||
|
acc +32
|
||||||
|
acc +48
|
||||||
|
jmp +258
|
||||||
|
acc +4
|
||||||
|
acc +37
|
||||||
|
nop +319
|
||||||
|
jmp +318
|
||||||
|
jmp -4
|
||||||
|
acc -5
|
||||||
|
jmp +32
|
||||||
|
nop -86
|
||||||
|
jmp +306
|
||||||
|
acc -13
|
||||||
|
acc +50
|
||||||
|
acc -16
|
||||||
|
jmp -53
|
||||||
|
acc +31
|
||||||
|
jmp +52
|
||||||
|
acc -11
|
||||||
|
jmp +89
|
||||||
|
acc +21
|
||||||
|
jmp +126
|
||||||
|
acc +44
|
||||||
|
acc +49
|
||||||
|
nop +177
|
||||||
|
jmp +44
|
||||||
|
acc +8
|
||||||
|
jmp +166
|
||||||
|
acc +20
|
||||||
|
acc -8
|
||||||
|
acc +38
|
||||||
|
acc +10
|
||||||
|
jmp +311
|
||||||
|
jmp +21
|
||||||
|
acc -10
|
||||||
|
nop +84
|
||||||
|
acc -7
|
||||||
|
acc +13
|
||||||
|
jmp +78
|
||||||
|
jmp +1
|
||||||
|
jmp +366
|
||||||
|
acc -6
|
||||||
|
acc -12
|
||||||
|
jmp -142
|
||||||
|
nop +223
|
||||||
|
jmp +42
|
||||||
|
acc -6
|
||||||
|
nop +227
|
||||||
|
nop +193
|
||||||
|
acc +23
|
||||||
|
jmp +83
|
||||||
|
acc -10
|
||||||
|
acc +12
|
||||||
|
jmp +1
|
||||||
|
acc -8
|
||||||
|
acc +3
|
||||||
|
nop +28
|
||||||
|
jmp +301
|
||||||
|
acc +23
|
||||||
|
jmp -170
|
||||||
|
nop -79
|
||||||
|
acc +21
|
||||||
|
acc +37
|
||||||
|
jmp +138
|
||||||
|
acc +37
|
||||||
|
acc +24
|
||||||
|
nop +413
|
||||||
|
acc -9
|
||||||
|
jmp -179
|
||||||
|
acc -1
|
||||||
|
acc -10
|
||||||
|
nop +261
|
||||||
|
acc -19
|
||||||
|
jmp +168
|
||||||
|
acc -16
|
||||||
|
acc +19
|
||||||
|
acc +17
|
||||||
|
acc +21
|
||||||
|
jmp -9
|
||||||
|
jmp +46
|
||||||
|
acc +4
|
||||||
|
nop +398
|
||||||
|
acc +28
|
||||||
|
jmp +396
|
||||||
|
acc +11
|
||||||
|
jmp +384
|
||||||
|
jmp +375
|
||||||
|
acc +25
|
||||||
|
acc +30
|
||||||
|
acc -11
|
||||||
|
jmp +371
|
||||||
|
jmp +249
|
||||||
|
acc -10
|
||||||
|
acc -15
|
||||||
|
jmp -7
|
||||||
|
jmp +38
|
||||||
|
acc +29
|
||||||
|
acc +15
|
||||||
|
acc +46
|
||||||
|
jmp -77
|
||||||
|
acc +43
|
||||||
|
jmp -83
|
||||||
|
jmp -42
|
||||||
|
acc +30
|
||||||
|
acc +44
|
||||||
|
acc +33
|
||||||
|
acc +14
|
||||||
|
jmp +326
|
||||||
|
acc -3
|
||||||
|
nop +49
|
||||||
|
acc +12
|
||||||
|
jmp +63
|
||||||
|
acc -13
|
||||||
|
acc -19
|
||||||
|
acc -17
|
||||||
|
jmp +126
|
||||||
|
jmp +293
|
||||||
|
acc +16
|
||||||
|
jmp -185
|
||||||
|
acc -12
|
||||||
|
jmp -92
|
||||||
|
acc -13
|
||||||
|
acc +19
|
||||||
|
acc -1
|
||||||
|
jmp -138
|
||||||
|
acc +28
|
||||||
|
nop -243
|
||||||
|
nop +352
|
||||||
|
acc +43
|
||||||
|
jmp +249
|
||||||
|
acc -5
|
||||||
|
acc +36
|
||||||
|
jmp -217
|
||||||
|
nop +197
|
||||||
|
nop -106
|
||||||
|
acc +30
|
||||||
|
jmp +194
|
||||||
|
acc +7
|
||||||
|
acc -16
|
||||||
|
nop +128
|
||||||
|
jmp -239
|
||||||
|
jmp -258
|
||||||
|
acc +11
|
||||||
|
nop -74
|
||||||
|
acc +42
|
||||||
|
acc +40
|
||||||
|
jmp +72
|
||||||
|
jmp -207
|
||||||
|
nop +337
|
||||||
|
nop -240
|
||||||
|
nop -169
|
||||||
|
jmp -55
|
||||||
|
nop +165
|
||||||
|
acc +27
|
||||||
|
acc +4
|
||||||
|
jmp -169
|
||||||
|
acc -2
|
||||||
|
jmp +69
|
||||||
|
acc +0
|
||||||
|
jmp -250
|
||||||
|
acc +11
|
||||||
|
acc +45
|
||||||
|
acc +31
|
||||||
|
jmp +195
|
||||||
|
acc -10
|
||||||
|
acc -8
|
||||||
|
nop -283
|
||||||
|
acc -2
|
||||||
|
jmp +63
|
||||||
|
acc +17
|
||||||
|
acc +12
|
||||||
|
acc +0
|
||||||
|
nop +243
|
||||||
|
jmp +190
|
||||||
|
acc +17
|
||||||
|
acc -18
|
||||||
|
jmp +78
|
||||||
|
acc +7
|
||||||
|
acc +33
|
||||||
|
jmp +244
|
||||||
|
nop +29
|
||||||
|
acc +20
|
||||||
|
nop +150
|
||||||
|
acc +29
|
||||||
|
jmp -43
|
||||||
|
acc +45
|
||||||
|
nop -132
|
||||||
|
acc +16
|
||||||
|
acc +14
|
||||||
|
jmp -237
|
||||||
|
jmp -199
|
||||||
|
acc -4
|
||||||
|
jmp +179
|
||||||
|
acc +13
|
||||||
|
acc +15
|
||||||
|
acc +6
|
||||||
|
acc +46
|
||||||
|
jmp -222
|
||||||
|
acc -8
|
||||||
|
acc +15
|
||||||
|
jmp -26
|
||||||
|
acc +38
|
||||||
|
jmp +1
|
||||||
|
nop +266
|
||||||
|
jmp +44
|
||||||
|
acc -13
|
||||||
|
nop +209
|
||||||
|
acc +21
|
||||||
|
jmp +201
|
||||||
|
acc +8
|
||||||
|
acc +18
|
||||||
|
jmp +190
|
||||||
|
acc +35
|
||||||
|
jmp -238
|
||||||
|
jmp +69
|
||||||
|
acc -11
|
||||||
|
nop -182
|
||||||
|
jmp -221
|
||||||
|
acc -16
|
||||||
|
acc -5
|
||||||
|
acc +7
|
||||||
|
jmp +39
|
||||||
|
acc +26
|
||||||
|
acc +43
|
||||||
|
acc +20
|
||||||
|
jmp +92
|
||||||
|
acc +22
|
||||||
|
jmp +81
|
||||||
|
acc +32
|
||||||
|
acc -13
|
||||||
|
jmp +30
|
||||||
|
acc +1
|
||||||
|
jmp +201
|
||||||
|
acc +4
|
||||||
|
jmp -165
|
||||||
|
acc -17
|
||||||
|
jmp -84
|
||||||
|
acc -16
|
||||||
|
acc +2
|
||||||
|
acc +47
|
||||||
|
jmp +54
|
||||||
|
jmp -195
|
||||||
|
acc +33
|
||||||
|
acc -17
|
||||||
|
jmp -18
|
||||||
|
jmp +256
|
||||||
|
acc +1
|
||||||
|
jmp -244
|
||||||
|
acc +28
|
||||||
|
acc +35
|
||||||
|
jmp +189
|
||||||
|
nop +32
|
||||||
|
acc +9
|
||||||
|
jmp +24
|
||||||
|
acc +21
|
||||||
|
acc +14
|
||||||
|
acc +17
|
||||||
|
jmp -67
|
||||||
|
acc +21
|
||||||
|
jmp -297
|
||||||
|
acc +36
|
||||||
|
acc +14
|
||||||
|
acc -13
|
||||||
|
jmp +115
|
||||||
|
acc -2
|
||||||
|
acc -13
|
||||||
|
jmp -182
|
||||||
|
nop +119
|
||||||
|
acc -4
|
||||||
|
acc +44
|
||||||
|
acc -14
|
||||||
|
jmp +61
|
||||||
|
acc +41
|
||||||
|
jmp -13
|
||||||
|
nop -116
|
||||||
|
jmp -294
|
||||||
|
jmp +7
|
||||||
|
jmp +17
|
||||||
|
acc -14
|
||||||
|
acc +42
|
||||||
|
acc -6
|
||||||
|
acc +24
|
||||||
|
jmp +151
|
||||||
|
nop -374
|
||||||
|
nop -375
|
||||||
|
acc +4
|
||||||
|
jmp -268
|
||||||
|
nop -27
|
||||||
|
acc +16
|
||||||
|
acc +2
|
||||||
|
jmp -206
|
||||||
|
jmp -320
|
||||||
|
nop -196
|
||||||
|
jmp +168
|
||||||
|
nop +36
|
||||||
|
acc +34
|
||||||
|
jmp -402
|
||||||
|
acc +36
|
||||||
|
acc +38
|
||||||
|
acc -11
|
||||||
|
nop +17
|
||||||
|
jmp -182
|
||||||
|
acc +15
|
||||||
|
jmp -145
|
||||||
|
acc +43
|
||||||
|
jmp -79
|
||||||
|
jmp -391
|
||||||
|
jmp -155
|
||||||
|
nop -94
|
||||||
|
acc +0
|
||||||
|
acc +9
|
||||||
|
jmp -441
|
||||||
|
acc +3
|
||||||
|
acc +6
|
||||||
|
acc +50
|
||||||
|
nop -334
|
||||||
|
jmp +163
|
||||||
|
acc +18
|
||||||
|
acc -11
|
||||||
|
jmp +21
|
||||||
|
acc +10
|
||||||
|
acc +4
|
||||||
|
nop +132
|
||||||
|
jmp -348
|
||||||
|
acc +18
|
||||||
|
nop -1
|
||||||
|
acc -4
|
||||||
|
nop +148
|
||||||
|
jmp +165
|
||||||
|
jmp +146
|
||||||
|
jmp -460
|
||||||
|
jmp -14
|
||||||
|
acc +26
|
||||||
|
nop -388
|
||||||
|
nop -353
|
||||||
|
jmp +119
|
||||||
|
acc +26
|
||||||
|
acc -1
|
||||||
|
acc +9
|
||||||
|
jmp -285
|
||||||
|
acc +37
|
||||||
|
jmp -345
|
||||||
|
jmp -178
|
||||||
|
acc +7
|
||||||
|
acc +13
|
||||||
|
jmp -39
|
||||||
|
acc +29
|
||||||
|
nop -200
|
||||||
|
acc +50
|
||||||
|
acc +24
|
||||||
|
jmp -160
|
||||||
|
acc +18
|
||||||
|
jmp +63
|
||||||
|
acc -11
|
||||||
|
acc +1
|
||||||
|
acc -6
|
||||||
|
acc +33
|
||||||
|
jmp -90
|
||||||
|
acc -3
|
||||||
|
acc +11
|
||||||
|
acc +45
|
||||||
|
jmp -197
|
||||||
|
jmp -169
|
||||||
|
acc +7
|
||||||
|
acc -4
|
||||||
|
jmp -281
|
||||||
|
acc +48
|
||||||
|
nop +19
|
||||||
|
nop -25
|
||||||
|
nop +9
|
||||||
|
jmp -274
|
||||||
|
nop -126
|
||||||
|
acc +22
|
||||||
|
acc -4
|
||||||
|
jmp -408
|
||||||
|
acc +1
|
||||||
|
acc +0
|
||||||
|
jmp +98
|
||||||
|
acc +25
|
||||||
|
acc +12
|
||||||
|
acc -19
|
||||||
|
jmp -90
|
||||||
|
acc +44
|
||||||
|
acc +20
|
||||||
|
acc +21
|
||||||
|
jmp -192
|
||||||
|
acc -12
|
||||||
|
jmp -70
|
||||||
|
nop +3
|
||||||
|
acc +17
|
||||||
|
jmp -349
|
||||||
|
acc +20
|
||||||
|
acc -7
|
||||||
|
acc +6
|
||||||
|
nop -43
|
||||||
|
jmp +53
|
||||||
|
acc +34
|
||||||
|
acc +48
|
||||||
|
acc -4
|
||||||
|
acc +8
|
||||||
|
jmp -126
|
||||||
|
acc +23
|
||||||
|
acc +25
|
||||||
|
jmp -349
|
||||||
|
acc -4
|
||||||
|
jmp -272
|
||||||
|
jmp -129
|
||||||
|
nop -366
|
||||||
|
jmp -292
|
||||||
|
acc +29
|
||||||
|
nop -269
|
||||||
|
acc +50
|
||||||
|
nop -254
|
||||||
|
jmp -321
|
||||||
|
jmp -23
|
||||||
|
acc +11
|
||||||
|
nop -425
|
||||||
|
nop -150
|
||||||
|
acc -9
|
||||||
|
jmp -467
|
||||||
|
acc +18
|
||||||
|
acc +27
|
||||||
|
jmp -338
|
||||||
|
jmp +1
|
||||||
|
acc +21
|
||||||
|
acc +27
|
||||||
|
acc -11
|
||||||
|
jmp -160
|
||||||
|
acc +27
|
||||||
|
acc +15
|
||||||
|
acc +0
|
||||||
|
acc +41
|
||||||
|
jmp -386
|
||||||
|
acc -10
|
||||||
|
acc +14
|
||||||
|
jmp -217
|
||||||
|
nop -484
|
||||||
|
acc +47
|
||||||
|
jmp -529
|
||||||
|
acc -10
|
||||||
|
acc +48
|
||||||
|
acc +0
|
||||||
|
jmp -430
|
||||||
|
acc +45
|
||||||
|
acc -8
|
||||||
|
acc +3
|
||||||
|
nop -103
|
||||||
|
jmp -387
|
||||||
|
acc -16
|
||||||
|
acc +39
|
||||||
|
jmp +1
|
||||||
|
acc +17
|
||||||
|
jmp -350
|
||||||
|
jmp -328
|
||||||
|
acc +30
|
||||||
|
acc +28
|
||||||
|
jmp -309
|
||||||
|
nop -361
|
||||||
|
acc +1
|
||||||
|
nop -468
|
||||||
|
jmp -212
|
||||||
|
acc +29
|
||||||
|
acc -4
|
||||||
|
jmp -249
|
||||||
|
acc +45
|
||||||
|
acc +30
|
||||||
|
acc +40
|
||||||
|
acc -17
|
||||||
|
jmp -579
|
||||||
|
acc +25
|
||||||
|
jmp -525
|
||||||
|
nop -217
|
||||||
|
acc +17
|
||||||
|
acc +3
|
||||||
|
jmp -142
|
||||||
|
nop +18
|
||||||
|
jmp -493
|
||||||
|
jmp +1
|
||||||
|
jmp -495
|
||||||
|
jmp -360
|
||||||
|
acc +7
|
||||||
|
acc +30
|
||||||
|
acc -3
|
||||||
|
nop -449
|
||||||
|
jmp -326
|
||||||
|
acc -10
|
||||||
|
acc -8
|
||||||
|
jmp -371
|
||||||
|
acc +22
|
||||||
|
acc +48
|
||||||
|
acc +6
|
||||||
|
acc +18
|
||||||
|
jmp -59
|
||||||
|
acc +17
|
||||||
|
acc +14
|
||||||
|
jmp -250
|
||||||
|
acc +19
|
||||||
|
acc +25
|
||||||
|
acc -14
|
||||||
|
acc -17
|
||||||
|
jmp -517
|
||||||
|
acc +29
|
||||||
|
acc -4
|
||||||
|
acc +9
|
||||||
|
acc +17
|
||||||
|
jmp +1
|
140
day8/main.hs
Executable file
140
day8/main.hs
Executable file
|
@ -0,0 +1,140 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple vector containers])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-local-binds #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
-- import Data.List.NonEmpty (NonEmpty(..))
|
||||||
|
-- import qualified Data.List.NonEmpty as NE
|
||||||
|
import Data.Vector (Vector)
|
||||||
|
import Debug.Trace (trace)
|
||||||
|
import Data.List (unfoldr, zip4, unzip4)
|
||||||
|
import Data.IntMap.Strict (IntMap)
|
||||||
|
import qualified Data.Vector as V
|
||||||
|
import qualified Data.IntMap.Strict as M
|
||||||
|
|
||||||
|
data Op = OpNop !Int
|
||||||
|
| OpJmp !Int
|
||||||
|
| OpAcc !Int
|
||||||
|
deriving (Show, Ord, Eq)
|
||||||
|
|
||||||
|
data VMState = VMRun | VMHalt
|
||||||
|
deriving (Show, Ord, Eq)
|
||||||
|
|
||||||
|
data VirtualMachine = VM
|
||||||
|
{ pgmCounter :: !Int
|
||||||
|
, pgmAccumulator :: !Int
|
||||||
|
, pgmInstructions :: Vector Op
|
||||||
|
, vmState :: VMState
|
||||||
|
}
|
||||||
|
deriving (Show, Ord, Eq)
|
||||||
|
|
||||||
|
initialVM :: Vector Op -> VirtualMachine
|
||||||
|
initialVM ins = VM 1 0 ins VMRun
|
||||||
|
|
||||||
|
stepVM :: VirtualMachine -> Maybe (VirtualMachine, VirtualMachine)
|
||||||
|
stepVM current@(VM c a ins VMRun) = Just (current, checkHalt next)
|
||||||
|
where
|
||||||
|
next = go (ins V.! (c-1))
|
||||||
|
|
||||||
|
go (OpNop _) = VM (c+1) a ins VMRun
|
||||||
|
go (OpJmp n) = VM (c+n) a ins VMRun
|
||||||
|
go (OpAcc n) = VM (c+1) (a+n) ins VMRun
|
||||||
|
|
||||||
|
checkHalt vm0@(VM c0 a0 _ _) | c0 == lastCount + 1 =
|
||||||
|
trace ("halted, acc="<>show a0) $ vm0 { vmState = VMHalt }
|
||||||
|
checkHalt vm0@(VM _ _ _ _) | otherwise =
|
||||||
|
vm0
|
||||||
|
|
||||||
|
lastCount = V.length ins
|
||||||
|
stepVM (VM _ _ _ VMHalt) = Nothing
|
||||||
|
|
||||||
|
exampleData :: [String]
|
||||||
|
exampleData =
|
||||||
|
[ "nop +0"
|
||||||
|
, "acc +1"
|
||||||
|
, "jmp +4"
|
||||||
|
, "acc +3"
|
||||||
|
, "jmp -3"
|
||||||
|
, "acc -99"
|
||||||
|
, "acc +1"
|
||||||
|
, "jmp -4"
|
||||||
|
, "acc +6"
|
||||||
|
]
|
||||||
|
|
||||||
|
vmFromInput :: [String] -> VirtualMachine
|
||||||
|
vmFromInput input = initialVM (ins input)
|
||||||
|
where
|
||||||
|
ins = V.fromList . map parseOp
|
||||||
|
|
||||||
|
parseOp :: String -> Op
|
||||||
|
parseOp = go . (\(x,y)-> (x,tail y)) . break (== ' ')
|
||||||
|
where
|
||||||
|
go ("nop",'+':s) = OpNop (read s :: Int)
|
||||||
|
go ("acc",'+':s) = OpAcc (read s :: Int)
|
||||||
|
go ("jmp",'+':s) = OpJmp (read s :: Int)
|
||||||
|
go ("nop",s) = OpNop (read s :: Int)
|
||||||
|
go ("acc",s) = OpAcc (read s :: Int)
|
||||||
|
go ("jmp",s) = OpJmp (read s :: Int)
|
||||||
|
go s@_ = trace (show s) $ undefined
|
||||||
|
|
||||||
|
-- Find smallest looping prefix in list of Int, returns associated pgmAccumulator
|
||||||
|
solvePart1 :: VirtualMachine -> Int
|
||||||
|
solvePart1 vm0 =
|
||||||
|
snd . last $ shortestCycleOn $ (\vm -> (pgmCounter vm, pgmAccumulator vm)) <$> unfoldr stepVM vm0
|
||||||
|
|
||||||
|
-- Shortest cycle in [Int]
|
||||||
|
shortestCycle :: [Int] -> [Int]
|
||||||
|
shortestCycle ix = reverse $ go M.empty ix []
|
||||||
|
where
|
||||||
|
go :: (IntMap ()) -> [Int] -> [Int] -> [Int]
|
||||||
|
go mem (x:_ ) ys | (mem M.!? x) /= Nothing = ys
|
||||||
|
go mem (x:xs) ys | otherwise = go (M.insert x () mem) xs (x:ys)
|
||||||
|
go _ [] ys = ys
|
||||||
|
|
||||||
|
shortestCycleOn :: [(Int,Int)] -> [(Int,Int)]
|
||||||
|
shortestCycleOn tx = zip (shortestCycle cx) ax
|
||||||
|
where
|
||||||
|
(cx, ax) = unzip tx
|
||||||
|
|
||||||
|
shortestCycleVm :: [VirtualMachine] -> [VirtualMachine]
|
||||||
|
shortestCycleVm vx = (\(a,b,c,d) -> VM a b c d) <$> zip4 (shortestCycle cx) ax ins state
|
||||||
|
where
|
||||||
|
(cx, ax, ins, state) = unzip4 $ (\(VM a b c d) -> (a,b,c,d)) <$> vx
|
||||||
|
|
||||||
|
-- Try lots of permutations of OpNop -> OpJmp, or OpJmp -> OpNop
|
||||||
|
-- until the VirtualMachine halts, and read the value of the accumulator
|
||||||
|
solvePart2 :: Vector Op -> Vector VMState
|
||||||
|
solvePart2 = fmap (vmState . last . shortestCycleVm . unfoldr stepVM . initialVM) . swapInstructions
|
||||||
|
|
||||||
|
swapInstructions :: Vector Op -> Vector (Vector Op)
|
||||||
|
swapInstructions ins = V.imap swap ins
|
||||||
|
where
|
||||||
|
swap i (OpNop v) = ins V.// [(i,OpJmp v)]
|
||||||
|
swap i (OpJmp v) = ins V.// [(i,OpNop v)]
|
||||||
|
swap _ (OpAcc _) = ins
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn "Day 8 - Part 1"
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
print exampleData
|
||||||
|
print $ parseOp <$> exampleData
|
||||||
|
putStrLn ":: Solving part 1"
|
||||||
|
pPrint $ solvePart1 (vmFromInput exampleData)
|
||||||
|
input <- lines <$> readFile "day8/input"
|
||||||
|
pPrint $ solvePart1 (vmFromInput input)
|
||||||
|
putStrLn ":: Tests"
|
||||||
|
let miniIns = V.fromList [OpJmp 2, OpNop 0, OpAcc (-8)]
|
||||||
|
pPrint $ length $ swapInstructions $ miniIns
|
||||||
|
let miniVM = initialVM $ V.fromList [ OpNop 0 ]
|
||||||
|
pPrint $ miniVM { vmState = VMHalt }
|
||||||
|
pPrint $ (unfoldr stepVM) $ miniVM
|
||||||
|
putStrLn ":: Solving part 2"
|
||||||
|
pPrint $ solvePart2 $ V.fromList $ parseOp <$> exampleData
|
||||||
|
pPrint $ solvePart2 $ V.fromList $ parseOp <$> input
|
||||||
|
|
1000
day9/input
Normal file
1000
day9/input
Normal file
File diff suppressed because it is too large
Load diff
75
day9/main.hs
Executable file
75
day9/main.hs
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
|
#! nix-shell -p ghcid
|
||||||
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple containers])"
|
||||||
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Data.IntMap.Strict (IntMap)
|
||||||
|
import Data.IntSet (IntSet)
|
||||||
|
import Data.List (inits, tails, sortOn)
|
||||||
|
import Data.Monoid
|
||||||
|
import Debug.Trace (trace)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
import qualified Data.IntMap.Strict as M
|
||||||
|
import qualified Data.IntSet as S
|
||||||
|
|
||||||
|
|
||||||
|
exampleData :: [Int]
|
||||||
|
exampleData = [ 35,20,15,25,47,40,62,55,65,95,102,117,150
|
||||||
|
, 182,127,219,299,277,309,576 ];
|
||||||
|
|
||||||
|
pairSums :: [Int] -> IntSet
|
||||||
|
pairSums xs = S.fromList $ do
|
||||||
|
i1 <- xs
|
||||||
|
i2 <- xs
|
||||||
|
pure (i1 + i2)
|
||||||
|
|
||||||
|
isSumOfPreamble :: Int -> [Int] -> Bool
|
||||||
|
isSumOfPreamble size xs = go tx
|
||||||
|
where
|
||||||
|
go (x:_) = x `S.member` (pairSums preamble)
|
||||||
|
go ([]) = False
|
||||||
|
(preamble, tx) = splitAt size xs
|
||||||
|
|
||||||
|
solvePart1 :: Int -> [Int] -> (Int,Bool)
|
||||||
|
solvePart1 size message =
|
||||||
|
head $ dropWhile (snd) $
|
||||||
|
map go ( takeWhile ((> size) . length) $ tails message )
|
||||||
|
where
|
||||||
|
go xs = (head $ drop size xs,isSumOfPreamble size xs)
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
sortedContiguousSubLists :: [Int] -> [[Int]]
|
||||||
|
sortedContiguousSubLists =
|
||||||
|
dropWhile (== []) . sortOn length . concat . fmap inits . tails
|
||||||
|
|
||||||
|
listSums :: [[Int]] -> IntMap [Int]
|
||||||
|
listSums xss = M.fromList $ do
|
||||||
|
xs <- xss
|
||||||
|
pure $ (getSum $ foldMap Sum xs, xs)
|
||||||
|
|
||||||
|
solvePart2 :: Int -> [Int] -> Int
|
||||||
|
solvePart2 target message = (\x -> minimum x + maximum x) $ bigMap M.! target
|
||||||
|
where
|
||||||
|
bigMap = listSums $ sortedContiguousSubLists message
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
putStrLn "Test"
|
||||||
|
print exampleData
|
||||||
|
print $ 1 `S.member` (pairSums [])
|
||||||
|
print $ pairSums exampleData
|
||||||
|
putStrLn "Day 9 - Part 1"
|
||||||
|
print $ solvePart1 5 exampleData
|
||||||
|
input <- lines <$> readFile "day9/input"
|
||||||
|
print $ solvePart1 25 $ map read input
|
||||||
|
putStrLn "Test"
|
||||||
|
print $ take 10 $ drop 20 $ sortedContiguousSubLists exampleData
|
||||||
|
putStrLn "Day 9 - Part 2"
|
||||||
|
print $ solvePart2 127 exampleData
|
||||||
|
print $ solvePart2 3199139634 $ map read input
|
12
template.hs
12
template.hs
|
@ -1,10 +1,16 @@
|
||||||
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
#! /usr/bin/env -S"ANSWER=42" nix-shell
|
||||||
#! nix-shell -p ghcid
|
#! nix-shell -p ghcid
|
||||||
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [shower])"
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple])"
|
||||||
#! nix-shell -i "ghcid -c 'ghci -Wall' -T main"
|
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
||||||
|
|
||||||
|
{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports #-}
|
||||||
|
{-# OPTIONS_GHC -Wno-unused-matches #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
import Debug.Trace (trace)
|
||||||
|
import Text.Pretty.Simple
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
putStrLn "Day 1 - Part 1"
|
putStrLn ":: Day x - Part 1"
|
||||||
|
|
Loading…
Reference in a new issue