Compare commits
No commits in common. "main" and "day4" have entirely different histories.
18 changed files with 3 additions and 7184 deletions
95
day10/input
95
day10/input
|
@ -1,95 +0,0 @@
|
||||||
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
|
|
|
@ -1,92 +0,0 @@
|
||||||
#! /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
786
day12/input
|
@ -1,786 +0,0 @@
|
||||||
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
130
day12/main.hs
|
@ -1,130 +0,0 @@
|
||||||
#! /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
|
|
|
@ -1,2 +0,0 @@
|
||||||
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
129
day13/main.hs
|
@ -1,129 +0,0 @@
|
||||||
#! /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
|
|
|
@ -1,73 +0,0 @@
|
||||||
#! /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
965
day5/input
|
@ -1,965 +0,0 @@
|
||||||
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
47
day5/main.hs
|
@ -1,47 +0,0 @@
|
||||||
#! /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
2178
day6/input
File diff suppressed because it is too large
Load diff
72
day6/main.hs
72
day6/main.hs
|
@ -1,72 +0,0 @@
|
||||||
#! /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
594
day7/input
|
@ -1,594 +0,0 @@
|
||||||
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
154
day7/main.hs
|
@ -1,154 +0,0 @@
|
||||||
#! /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
643
day8/input
|
@ -1,643 +0,0 @@
|
||||||
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
140
day8/main.hs
|
@ -1,140 +0,0 @@
|
||||||
#! /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
1000
day9/input
File diff suppressed because it is too large
Load diff
75
day9/main.hs
75
day9/main.hs
|
@ -1,75 +0,0 @@
|
||||||
#! /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,16 +1,10 @@
|
||||||
#! /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; [pretty-simple])"
|
#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [shower])"
|
||||||
#! nix-shell -i "ghcid -c 'ghci' -T main"
|
#! nix-shell -i "ghcid -c 'ghci -Wall' -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 x - Part 1"
|
putStrLn "Day 1 - Part 1"
|
||||||
|
|
Loading…
Reference in a new issue