diff --git a/2022/day01.hs b/2022/day01.hs index 58e800f..7c29d8e 100644 --- a/2022/day01.hs +++ b/2022/day01.hs @@ -2,24 +2,14 @@ import Data.List.Split (splitOn) import Data.List (sort) part1 :: [Integer] -> IO () -part1 = \x -> putStr "part 1: " >> print (maximum x) +part1 = (>>) (putStr "part 1: ") . print . maximum part2 :: [Integer] -> IO () -part2 = \x -> putStr "part 2: " >> (print $ sum $ take 3 $ reverse $ sort x) +part2 = (>>) (putStr "part 2: ") . print . sum . take 3 . reverse . sort rmap :: [a -> b] -> a -> [b] rmap xs a = map (\f -> f a) xs main :: IO () main = do - getContents >>= \x -> - let b = (map (sum . map read) . splitOn [""] $ lines x) in - sequence_ $ rmap [part1, part2] b - - -- -- part 1 - -- putStr "part 1: " - -- print $ maximum f - - -- -- part 2 - -- putStr "part 2: " - -- print $ sum $ take 3 $ reverse $ sort f + getContents >>= (sequence_ . rmap [part1, part2]) . map (sum . map read) . splitOn [""] . lines \ No newline at end of file diff --git a/2022/day02.hs b/2022/day02.hs new file mode 100644 index 0000000..5a5b5a4 --- /dev/null +++ b/2022/day02.hs @@ -0,0 +1,60 @@ +data Item = Rock | Paper | Scissors deriving (Eq, Show) + +readItem :: String -> Item +readItem "A" = Rock +readItem "B" = Paper +readItem "C" = Scissors +readItem "X" = Rock +readItem "Y" = Paper +readItem "Z" = Scissors + +wins :: Item -> Item -> Bool +wins Rock Scissors = True +wins Scissors Paper = True +wins Paper Rock = True +wins _ _ = False + +scoreItem :: Item -> Int +scoreItem Rock = 1 +scoreItem Paper = 2 +scoreItem Scissors = 3 + +scoreWin :: Item -> Item -> Int +scoreWin me you + | me `wins` you = 6 + | me == you = 3 + | otherwise = 0 + +score :: Item -> Item -> Int +score me you = scoreWin me you + scoreItem me + +scoreLine1 :: String -> Int +scoreLine1 s = score me you where + [you, me] = map readItem (words s) + +whatToPlay :: Item -> Int -> Item +whatToPlay you score = head $ filter f all where + all = [Rock, Paper, Scissors] + f me = scoreWin me you == score + +neededScore "X" = 0 +neededScore "Y" = 3 +neededScore "Z" = 6 + +scoreLine2 :: String -> Int +scoreLine2 s = score me you where + [you', goal'] = words s + (you, goal) = (readItem you', neededScore goal') + me = whatToPlay you goal + + +main :: IO () +main = do + input <- lines <$> getContents + + putStr "part 1: " + print $ sum $ map scoreLine1 input + + putStr "part 2: " + print $ sum $ map scoreLine2 input + \ No newline at end of file diff --git a/2022/day03.hs b/2022/day03.hs new file mode 100644 index 0000000..da3446e --- /dev/null +++ b/2022/day03.hs @@ -0,0 +1,32 @@ +import Data.Char (ord, isLower, isUpper) +import Data.List (intersect) +import Data.List.Split (chunksOf) + +priority :: Char -> Int +priority c + | isLower c = ord c - ord 'a' + 1 + | isUpper c = ord c - ord 'A' + 27 + +splitHalf :: [a] -> ([a],[a]) +splitHalf xs = splitAt (length xs `div` 2) xs + +findDup :: String -> Char +findDup s = head $ intersect l r where + (l, r) = splitHalf s + +groupDup :: [String] -> Char +groupDup = head . foldr1 intersect + +main :: IO () +main = do + x <- lines <$> getContents + let dups = map findDup x + + -- part 1 + putStr "part 1: " + print $ sum (map priority dups) + + -- part 2 + let groups = chunksOf 3 x + putStr "part 2: " + print $ sum (map (priority . groupDup) groups) \ No newline at end of file diff --git a/2022/inputs/day02 b/2022/inputs/day02 new file mode 100644 index 0000000..c4b1829 --- /dev/null +++ b/2022/inputs/day02 @@ -0,0 +1,2500 @@ +C X +C Y +C X +B X +B Z +A Z +C Y +C Z +B Z +C X +B Y +C Y +C Y +A Y +C Y +C Y +C Z +C X +B Z +C Y +A Y +A Y +C Z +B Y +A Y +C Z +C Y +A Y +A Y +B Y +C Y +C Z +C Y +B X +B Z +C Y +B Z +A X +C Z +A Y +B Y +C Y +C Y +B Z +B Y +A Z +C X +C X +C Y +C X +B Z +A Y +B X +B Z +C Z +C X +C X +B Z +A Y +B Y +C Y +C Y +A Y +C X +A Y +B Z +C Y +C Y +B Y +C Y +A Z +A Z +B X +A Y +C Y +A Y +C Y +C Y +C X +C Y +B Z +C Y +C Z +C X +B X +C Y +C Y +C X +C Z +A Y +C X +B Z +C X +A Y +B Y +C Y +A Y +A Y +A Y +B Y +C Y +A Y +A Y +C Z +C Y +B Y +C X +C Y +B Z +B Z +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C Y +B Y +B Z +A Y +B Y +A Y +A Y +C Y +B X +C Y +C X +A Y +C X +C X +C Y +C Y +B Z +C X +A Y +B Z +C Z +C X +A Y +B Z +C Y +B Y +A Y +A Y +C Y +B Y +C Y +C X +C Y +A Y +C Y +A Y +B Y +C X +C Y +C Y +B Z +B Z +A Y +C Y +C Y +C Y +C Y +A Y +C X +C Z +C X +A Y +A Y +A Y +C Y +B Z +B Z +C Y +C Y +B X +C Y +C Y +B Z +B X +B Y +C Y +C Y +C X +B Y +B Z +B Z +C Y +C Y +C X +C X +A Y +C Y +C Y +B X +B Z +B X +B Z +B Y +C X +B X +B Y +B Z +B Z +B X +B Z +B Y +C X +C Y +C X +C X +B Z +C Y +C Y +C Y +B Z +C Y +C X +C Y +C Y +A Z +C Y +A Y +C Y +A Z +A X +C Y +C Y +C Y +C Z +B Z +B Z +C Y +B Z +B Z +C X +C Y +A Y +A Y +C Y +A Y +C Y +C Y +B Y +A Y +C Y +B Z +A Y +B Z +C X +C Y +A Y +B Z +A Y +C X +C Y +B Y +C Y +A Z +B Z +B X +C Y +A Y +A Z +C X +A Y +B Z +A Y +B Y +C Y +C Y +B Z +B Z +C X +B Z +C X +C Z +C Y +C X +A Y +C X +A Y +A Y +B Z +B Z +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +B Y +A Y +C Z +C Y +A Y +A Y +B Z +C Y +C Y +C Y +B Z +C Y +C Y +A Y +A Y +C Y +C X +B Z +B Z +C X +C X +C Z +A Y +C Y +A Y +A Y +C X +A Z +B Y +A Y +C X +A Y +C X +C X +A Y +A Y +C X +B Y +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Y +A X +B Y +C Y +A Y +C Y +C Y +C Y +A Y +C Y +A Y +C Y +B Z +A Y +C X +C Y +A Y +C Y +A Y +A Y +A Y +B Z +C Y +B Z +A Y +C Y +A Y +C Y +C X +B Z +A Y +C X +B Z +B Y +C Y +C Z +C Y +B Y +B Y +A Y +A Y +C X +B Y +A Y +C Y +B X +C X +A Y +C Y +A Y +C Y +B Z +A Z +B Z +B Z +A Z +C Y +C Y +C X +B Y +C Y +A Y +C Y +C Y +B Y +B Z +C Y +C X +A Y +C X +C X +C Y +B Y +C Y +B Z +C Y +A Y +A Y +C Y +C X +C X +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C X +C X +C X +A Y +B Y +C Y +C Y +C Y +C Y +C Y +A Y +A X +B Z +C X +C Y +C Y +B Z +A Y +A Y +B X +B Z +C Y +C Y +B Z +A Y +A Y +A Y +C Y +C Y +A Y +A Y +C Y +C Y +C X +C X +C X +B Z +C Z +C X +A Z +C Y +C X +A Y +B Y +B Z +C X +C Y +C Y +C Z +C Y +C X +A Z +C Y +A X +B Y +C Y +C Y +C Y +C X +B Y +B Y +C X +B X +A Y +C Y +C Y +C Y +B X +C Y +A Y +C Y +C Y +B Z +C X +B X +C Z +C Y +A Y +B Y +B Z +C Z +C X +C X +A Y +A Y +B Z +A Y +C X +B Y +C Y +A Y +B X +A Y +A Y +C Z +C Y +C Z +B Z +A X +C Y +B Y +C Y +B Z +B Y +C Y +A Y +B Z +B Z +C X +B Z +C Y +B Z +B Z +C Y +C Y +B Z +C Z +C Y +B Z +C Y +B X +A Y +B Z +A Y +C Y +A Y +C Y +C Y +B Y +B Z +B Z +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +C Y +C X +A Y +C Y +C Y +A Y +C X +A Y +A Y +A Y +C Y +C Y +A Y +B Z +A Y +B Y +A Y +A Y +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Y +C Z +C Y +C Y +B Z +C Y +C Y +B Z +B Y +C Y +A Y +C X +C Y +C Z +C Z +C X +C X +C X +C Z +C Y +B Z +A Y +B Z +B Z +A Y +C Y +C Y +C Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Z +A Y +B Y +C Z +C Y +C Y +C Y +B Z +B Z +B Z +C Y +C Y +A Y +C X +C X +A Y +C Y +C Y +C Y +C Y +C X +C Y +C Y +C Y +C X +A Z +B Y +C Y +A Y +A Y +B Z +A Z +C Y +C Y +C Y +C X +B X +B Y +C Y +A Y +A Z +B X +C Y +C Y +B Z +A Y +A Y +B Z +B Z +C Y +C Y +C X +B Y +B Z +C Y +B Y +C Y +A Y +C X +C X +B Z +A Y +C Y +B Z +C X +C Y +B Y +B Z +A Z +B Y +B Y +C X +C Y +A Z +C X +C X +A Y +A Y +C X +A Y +B Y +B Z +A Y +B Z +B X +C Y +C Y +C X +B Z +A Y +B Y +A Y +C Y +C Z +B Z +C Y +A Y +C Y +C Z +A Z +B Z +B X +C Y +C Y +B Y +C X +B Y +B Z +B Z +B X +B Y +C X +C Y +C X +C Y +A Y +A Y +C Y +A Y +C Y +C X +C Y +A Y +B Z +C X +C Y +B Z +C Y +C Y +B Y +B Z +A X +C Y +B Y +B Y +B Z +C Y +B Z +A Y +C Y +B Y +C Y +A Y +C Y +B Z +C Y +A Y +A Y +C Y +A Y +C Y +A Y +A Y +B Z +C X +C Y +B Z +C Y +A X +A Z +C Y +C X +C X +C Y +C Y +B Z +A Z +A Y +C Y +B Z +A Y +A Y +C Y +B Z +A Y +C X +A Y +A Y +C X +B Z +B X +A X +A Y +B Y +A X +B X +C X +C Y +A Y +C Y +A Y +A Y +C X +B Y +C X +B Y +C Y +C Y +A Y +B Z +A Z +B Y +C X +C Y +C Y +B Z +C Z +A Y +A Y +A Z +C Y +A Y +B Z +C Y +C Y +B Y +A Y +A Y +C Y +C X +C X +B Y +B Z +C Y +B Y +B Z +C Y +A Y +B Z +A Y +A Y +A Z +C X +B Z +C Y +B Z +A Y +C X +C Y +C Y +B X +B Z +A Y +A Y +A Y +A Y +A Y +C Y +A Y +A Y +C X +C Y +C Z +B Z +A Z +C Z +A Y +B Z +B Y +A Y +C Y +B Z +A Y +C Y +C Y +A Y +C Y +B Z +B Y +B Z +C Y +C Y +C Y +A Z +C X +B X +B Z +C Z +C Y +C Y +C Y +C X +A Y +C Y +A Y +A Y +B Z +A Y +C Y +C Y +A Y +C Y +A Z +B X +A Y +C Y +A Y +A Z +A Y +A Y +B Z +B Y +B Z +C Y +B Z +C X +A Y +C Y +A Y +A Y +A Y +B Z +B Z +C Y +B Z +B Y +C X +A Y +C Y +A Y +B Z +C X +B Y +C Y +B Z +C Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +B Y +C Y +C X +A Z +C Z +C Y +C Y +A Y +A Y +C X +C Y +C Y +C Y +C X +B Z +C X +C Y +A Y +A Y +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C X +B Z +A Y +B Y +C Y +C X +B Z +C Y +A Y +A Y +B Z +C Y +A Y +C Z +C X +B Z +C Y +A Z +B Z +A Y +A Y +C Y +B Z +B Z +A Y +C Y +B Y +C Y +A Y +A Y +B Y +B X +B Z +C Y +A Y +C Y +A Y +A Y +B Z +B Y +A Y +A Y +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +B Z +B Z +C Y +C Y +A Y +B X +C X +A Y +C Y +C Y +C Y +A Y +C X +B Z +A Y +C Z +B Y +B Y +C Z +A Y +C Z +C Y +C X +B Y +A Y +C X +C X +C Y +C X +C X +B Z +C Y +B Y +A Y +B Y +A Y +B Z +C X +C Y +C X +C Z +C X +B Z +C X +C Y +C Y +C Y +B Z +A Y +C Y +C Y +C Y +B Z +A Y +C X +C Y +C Y +C Y +C X +A Z +C Y +C Y +C X +B X +B Z +A Y +B Z +C Y +B Y +B Z +A Y +B Z +C Y +A Y +A X +C X +C X +C Y +A Y +B X +C Y +B X +B Z +C X +A Y +B X +C X +A Y +C Y +C Y +C Y +A Z +C Y +A Y +B Z +B Z +A Z +C Y +A Y +B Z +C Z +C X +C X +C X +A Y +A X +C Y +A Y +B Y +C Y +C X +C Y +C Y +A Y +B Z +C Y +B Z +A Y +C X +C Y +B Z +C Y +C Y +B Y +A Y +A Y +A Z +C Y +B Z +B Y +B Z +B Y +A Y +C Y +C Y +C X +C Y +C Y +B Z +C Y +C Y +C X +B Y +B Z +C Y +C Y +A Y +C Z +C Y +B Z +A Y +A X +A Y +C X +C Y +C Y +B Z +A Y +B X +C Z +C Z +C X +C Y +B Z +C Z +B Z +C Y +A Y +C Y +A Y +B X +C X +C Y +B Z +C Y +B Y +B X +B X +B Z +C Y +C Y +B Y +B Z +C Y +A Y +B Z +C Y +B Z +C Y +B Z +C Y +A Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +C X +B Z +C Y +B X +C X +B Z +A Y +C X +B Z +C Y +A Y +B Z +A X +B Z +B Z +B Z +C Y +C Y +C Y +C Y +A Y +A Y +B Z +B X +C X +C Y +B Y +A Y +A Y +B Z +C Y +A Y +A Y +C Y +C X +C Y +C X +C Y +C Y +C Y +B Z +C Y +C X +B Y +C Y +C Y +C Y +A Z +C X +C Y +A Y +C Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C X +A Y +C Y +A Z +A Y +B Z +A Y +C X +C Y +C Y +B X +B Z +C X +B X +C Z +C X +B Z +B Z +C Y +C X +B Z +B Z +B Z +C Y +C Y +A Y +C Y +B Y +B X +C Y +C Y +C Y +B X +C X +B X +C Y +A Y +C Y +C X +C Y +C Y +B X +B Z +A Z +B Z +A Y +B Z +C X +B Z +C Y +C Y +C Z +A Y +C Y +C Y +A Z +B Y +C Y +A X +A Y +B Y +C Y +B Z +C Y +C X +C Y +B Z +A Y +C X +C Y +C X +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Z +C Y +A Y +C Y +C Y +C Y +C Y +A Y +C Y +C Y +C Y +C Y +B Z +C X +A Y +A Y +C Y +B Y +C Y +C Y +A Z +C Y +B Y +C Y +B Z +C X +A Y +C Y +C Y +B Z +C Y +A Y +A Y +C Y +B Z +C Y +A Y +B Z +C Y +C Y +B Z +C X +B Z +B Z +C Y +C Y +A Y +C X +A Y +C Y +B Z +A Y +B Z +A Y +C X +C Y +B Z +B Y +B Z +A Y +B Z +C Y +B Z +C Y +B Y +A Y +B Z +B X +B Z +C Y +B Z +B Z +B Z +A Y +A Y +C Y +B Z +B Z +C X +B Z +C Z +A Y +B Z +B Z +C Y +B Z +B Z +C X +C Z +A Z +C Y +C Y +B X +C Z +C Y +A Y +B Z +C X +B Z +C Y +C Y +B Z +B Z +B Z +C X +C Y +C X +C X +A Y +B Z +B Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +C Y +B X +A Y +A Y +B Y +C Y +B Y +C Y +B Y +B Z +C Y +C Y +C X +B Y +A Y +B X +B Z +C X +A X +C Y +A Y +A Y +C X +B Y +A Y +B Z +C X +B Z +C Z +C X +C Y +C X +C Y +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C X +B Y +C Y +C Y +C Z +B Z +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C Y +B Z +C Y +C Y +A Y +B Y +C X +C Y +C Y +C Y +B Y +B Y +C Z +B Z +C Y +B Z +A Z +C X +B X +C X +A Y +C Y +A Z +C X +C Y +A Y +A Y +B Y +A Y +C Y +B Y +C X +C X +C X +C X +C Y +C Y +A Y +B Z +C Y +A Z +C Y +A Y +B Z +B Z +C Y +A Z +C Y +C Y +C Y +B Z +C Y +C Y +A X +A Y +A Z +C Y +A Y +B X +A Y +B Z +B Y +B Z +B Y +C X +C X +A Y +B Z +B Y +C X +B X +B Y +A Y +C Y +C Y +C Y +B Z +C Y +A Y +B Z +C X +B Z +B Z +B X +B Y +C Y +C Y +C X +B Z +C Y +C Y +C Y +A Y +C Y +B Z +B Y +C Y +C X +C X +B X +B Z +A Z +C X +A Y +B Y +C Y +A Y +B Y +C Y +C Y +C Z +C Y +C X +A Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +A Y +B Z +B Z +C Y +C Y +C Y +C Y +C Y +B Z +C Y +C Y +C X +A Y +A Y +C Y +C X +A Y +B Z +A Y +C X +C Y +C Z +C Y +A Z +A Y +A Y +B Y +C Y +C Y +B Y +C Y +A Y +C X +B Z +C X +A Y +B Z +C X +A Y +C X +C X +A Z +A Y +B Y +A Y +B Y +A Z +C Y +C Y +C Y +B Z +C Y +A Y +B Z +B Y +C Y +B Y +C Z +A Y +B Y +C Y +B Y +A Y +B Z +C Y +C X +C Y +A Y +A Z +C Y +B Z +C Y +B Y +A Y +C X +A Z +C Z +C X +A Y +C X +C X +C Y +C Z +A Y +A Y +C Y +A Y +C Y +B Z +C X +A X +C X +C Y +C Y +C Y +C Y +B Z +B Z +B Z +C X +C Y +B Y +C Y +B Y +C Z +A X +B Y +C X +B Y +C X +B Y +C Y +B Z +C X +A Y +B Z +C X +A X +C Y +B Z +B Z +C X +B Z +B Z +C X +C Y +C Z +B Z +C Y +C Y +C Y +B X +A Y +B Y +B Z +B Z +C X +A Z +C Y +C Y +A Y +A X +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +B Z +B Z +A Y +B Y +C Y +C Y +C X +B Z +A Y +C Y +B Z +C Y +A Y +C X +B X +C Z +A Y +C X +B Y +C X +B Z +A Y +C Y +C Y +C Y +B Z +B Z +A Z +C Z +A Y +B Z +C X +C Y +A Y +C Y +C Y +C X +B Z +C Z +C Y +B Z +A X +B Y +A Z +B X +C X +A Y +C Y +B Z +B Z +C Y +A Y +B Z +B Z +A Y +A Y +B Z +B Z +A X +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Z +A X +C X +B Y +B Z +C X +B Z +A X +A Y +A Y +B X +B Y +B Z +C X +C X +C X +C Y +C Y +B X +C Y +C Y +A Y +C X +A Y +B Z +A Y +C Y +B X +C X +C Y +A Y +C X +C Y +C Y +B Z +A Y +A Y +A Z +C Y +B Z +A Z +B X +A Z +C Y +B X +A Y +C Y +C Z +A Z +C X +A Y +B X +C Y +C Y +C X +C Z +A Y +A Y +C Y +B Z +C Y +C X +B X +A Y +B Y +B Z +B Z +C Y +C Y +A Y +B Z +B Z +C Y +C Z +C Y +C Y +C X +C X +A Y +B Z +A Y +B Z +B Z +C X +B X +C X +C Y +B X +B Z +C X +C X +C X +B Z +B Y +B Z +C Y +C Y +B Z +B Y +B Z +C Y +B Y +A Y +A Y +B Y +A Y +B Z +A Y +C X +A Y +C Z +B Y +C Y +C X +C X +C Y +C X +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C Y +B Y +A Y +B Z +C Y +A Z +C Y +B Z +C X +C Z +A Y +B Z +C X +C Y +B Z +C Y +A Y +C Y +C X +C X +C Y +A Y +B Y +A X +C Y +C Y +A Y +C Y +A X +C Y +B Y +C X +B Z +B Z +B Y +C Y +C Z +C X +B Z +B Z +B Y +C Z +A Y +C Y +C Y +B Y +C X +A Y +C Y +C Y +A Z +A Y +B Y +C Y +C Y +C X +B X +C Y +A Y +B Z +B Y +A Y +B Y +C Y +C X +C Y +C Y +C X +A Y +B Z +C X +C Z +B X +C Y +C X +C Y +C X +C Y +B Z +A Y +A Y +B Z +C Y +C Y +B Z +C Y +C X +B Z +C Y +B Z +C X +C Y +C X +A Y +C Y +A X +C Y +C X +A Y +C Y +A Y +C Y +A Y +C X +A Y +A Y +A Y +B Y +B Z +C Y +B Z +A Y +C Y +C X +B X +C Y +B Z +B X +B X +B Y +C Y +C X +C Y +C X +B Y +B Z +A Y +B Y +C Y +C Z +A Y +C Y +B Y +A Y +C X +C Y +A Y +C Y +A Z +C Z +C Y +B Z +C Y +C Y +B Y +A Y +C Z +A X +C Y +B Z +C Z +B X +C Y +C X +C X +B Z +B Z +B X +B Y +C Y +B Z +B Z +B Z +A Y +B Z +C Y +C Y +A Y +A X +C Z +A Y +C Z +C Y +C X +C Y +C X +B Z +C Y +A X +B Z +B Y +C Y +B Y +C Y +C Y +A Y +B Z +B Y +C Y +C X +C Y +C Y +B Z +A Y +B X +C Y +C Y +C Y +A Y +C Y +C Y +C X +C Z +C X +B Y +A Y +C Z +B Z +B Z +A Y +C Y +C X +B X +C X +B Z +A Y +C Y +C Y +B Z +A Y +B Y +C X +B Y +B Z +B Z +B Z +B X +B Y +B Z +C X +A Z +A Y +C Y +A Y +C Y +C Y +B Z +B Z +C X +B X +C Y +A Z +C Y +C X +C Y +B Y +C X +B Z +C Y +C X +B Z +A Y +A Y +C Y +A Y +A Z +C Y +A Z +A Y +C Y +C X +B X +C Y +C Y +C X +A Y +C X +C Y +B Z +B X +C Y +A Y +B X +C Y +B Y +C X +A Y +B Z +C Y +C Y +B Z +A Y +A Z +C Y +C Y +C X +A Y +B Z +B Z +B Y +B Z +A Y +C Y +A Y +B Y +A Y +C X +C Y +A Z +A Z +B Y +A Y +C Y +A X +C Y +C Y +B Z +C Y +C X +C Y +A Y +C Y +C Y +C Y +C Y +A X +C Y +B Y +C Y +A Y +C Y +C X +C X +C Z +B Z +A Y +B X +C Y +C Y +C Y +A Y +B Z +B Z +C Y +A Y +B Z +A Y +C X +C X +A Y +C Z +C Y +B Z +B Z +A Y +A Y +C Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +A Y +A Z +B Y +C Y +C X +A Y +C X +A X +C Y +C Y +B Y +C Y +B Z +A Y +C X +B Z +A Y +C X +B Z +A Y +C Y +B Z +A Y +B Z +C X +C Y +C X +C Y +B Z +C Y +B Y +C Z +B Z +C Y +C Y +A X +C X +A Y +C Y +B Z +A Y +A Z +B Z +C Y +C Y +A Y +A Y +A Y +C X +C Y +A Z +C Y +C Z +A Y +A Y +C Y +C X +C X +C Z +C Y +C Z +B Z +A Y +B Z +B Z +C X +A Y +B Y +A Y +A Z +A Y +C Y +C Y +C Z +A Y +C Y +B Y +C X +C X +B X +C Y +A Y +C Z +A Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +A Y +B Y +A Y +B Y +B Y +C X +C X +C Y +A Y +C Y +C Y +C Z +C Y +C Y +B Y +C Y +B Y +A Y +C Y +B Z +C X +C Y +A Z +A Z diff --git a/2022/inputs/day03 b/2022/inputs/day03 new file mode 100644 index 0000000..3039ac8 --- /dev/null +++ b/2022/inputs/day03 @@ -0,0 +1,300 @@ +MVWpzTTrTFNNLtssjV +hRJncnJCnhPCnBSbCQRhhQRPFHmsbHLzbLNHsjNNFmGGGsGF +lSBQJBBBBcnccnQvBnPQznfrgwlrTZfDwTfWqrrpgMpw +sRPgrzSgrSbfTrgspBPsDWWTmdnvdZWZwTmwvdmd +tVGpCGqCGjlHcNGVNHZDmnZMWdWMWCdZDvnZ +HqpQptLlclLGtlpcjHNhQqfRhrSBrrbfbrSRrsPfBSgg +JpjLbQbFPBjDBBJLWltglfBfhhlcctht +vNFmsdFsnmzGtWvgzhzc +rqwRCCqmCTqHCnqRNTNFsJVMQSjLRbbVVbjQVLbLSV +mLNNCNDwBwDnmCwnJwLRvdlqZclRccsgvcZndc +QWMtVWbpVlgHHcgMHs +VsTVWhThsVQWzjtQPpVWjWbpwJNCJDCzSNNCCCSfmfBCSGLL +NbSfHnwDvwwfHwwQsHbWPgrsZsZjRPLRgLWhWP +lmMlTGFzVmzqjGLLZWWGhrCh +qFclMprqmrvbcnwDQtNQ +tWQZFvvtWQWbqQQggZZLvpLrpzDrmGDmmDHPzPzHrfnHTG +NMlhlTMccTCVBlRNHzJnzDDmnJmnGGBf +NMMSSSSSlNVMdjdNSNNhFwTbvbLqjbtLwWQwZqgg +jPwcJwRmmhJpbhNJVgDbrHzzzQzzBQHg +tdZqlCnnnlvZCqlnlCSqZdFCHGDBgzsDzssBtHGLQtrHsssL +TZZFSdrdlZMFZRMwMPmNcwNmwm +nsdhzmDBGQWQPvJPjbbW +gCgBqCNpMHTwgwqMPRJJTtWjbFRJFJvP +ZlCwBrwgmzhGzDrd +sTBHfcnBTnqHRvqPgFFbLtrQTPLjjm +GWzpwSJSpbwbNNGJPQrrtrrrrgzLtjzm +NNSlCCdplWwplCwSndnssdZfqVbHvfqc +rrfHgqnlllRrDgrCbQfszMPtmzPQzFsFMQ +JJLGVGjcwVcPQNNNtRPmLM +WThVJJWJBdGwBpBTqDrSRCCggShqbSCb +TbCqzqzmbCffzDbHRddLbdRFRS +ZmvZJPjPwwWNZJGtWSDRRDFWSLhhhMVVWL +ZwplGwmptNjZnjvnGGPjJlZppTrTsCczfggBgfgfggCsBrqr +gMBBbfBbBMfnMsvRvWJhDsQW +ZZqHLzczjjsLzlpjqTprNJvhQpRvtRJJQrtQtJ +llZlzZZzPZZqsTZscHczfnSwSPSwwgSBwwSnPwnf +chMtcPPgQtthqgvczhMTcCSBLBlGpsFnBnnsGvLplSFG +bhRmJWDRmHSmFGBnGBps +jdDZWbrDdDbbdbDrRRWwRjZRVqztCzqtcThcTQtgqVMMVzjq +flNmNHgcZwTzRLzMLRPlzz +nntqBJtFbbCbBVCnBtFjJjhVhLzLvRLvgRRvPvpMpvpp +CgJWjJQDjgBtnGNGfcssNfcwNW +MrMpMrGBznjPMGCmCrrjdwndfJLQNfdLQNdNggdL +sJVcZqvhZtVqhDFFsDJslcdwgwvwQwwQNbbTbwfLLTgL +RDDRcsSsstJstVDDqctszzmRmGjpjBRHPmmGHGrj +tdplZtlrBGwTlLQQ +sfsPPvNhWLQBhGQG +zPVfzVbbMcscvVfzzNgcJHnJZgtrrndJqjJqndrL +nglLjRCCHLLCnNCLHQnFNQmmVMbVmwMwlMwMMMWwBTsT +cqtfcqZpzhSvvBfWwbvrbT +PPqpDSqcSJPdPhtPtqZcpPtGjFRFFFNLJFGRgjFbGRNbHn +gjtRSLMqLdSgLMCltTSDQcQQqhDcfcfrWDhWrr +GwFZCwNzFJsPmFFmZmPPNhvDDfDWWmpvQWWfVDQppW +swNGZbPBGwnCgBBlBljl +BsrDsnQGwFFQQtfNTBNSffBgBt +VJlhWVLlRppLQZTCbtZTttgJ +ppLqqRhQdRPhqPVhdPjhljqHFnGnzFrjFFDznHFHrmwwnH +CJMmmJLmlshCCdmzjHjPWztgdnjttt +GwZvGwrgTcFpzHWjnT +GbqrvrRwbrbGbwwZBbgfhmJMmsDJhNRfLChhCh +CfgfjCLCgfgFgBhBsccswQwtsQHvBBtc +SbSMGbnmDMGJWmRmDmvzwtcscWtQzsrPsvHc +DbJdNpJSnMSJmpSSNVqgqgTTFVQTFqdZLq +MBMCmlllPSSlmmPPjCMpPgggJcnZgntJsDvHsDZt +hrNzhrRNbrhbGRbfpVLRGNqqngvnttngJctgDZJGcZvHvZnc +LTTzVqppSmwdTmQW +mmlBQmLbsbmRnFnwlqqprF +dZScZSZSdHcNMDcJwLqRfppzpzfTpHfF +JLWJLJJJdMmGtgCWjQjt +PPMzpVDblwGVMMzDLLjrcrjdzjdTzLjd +RRcCJRcNQRBqtCFBRJJsZWBWrjLWLHZZWndBLWjh +qQQtttNqsqqtJRgqQfcpcgDcbggplGbfMp +QmmSTQPmLSmjpczMJtwPzg +BHHHdwdvDpllvctjZv +HdrDHNfrrBDGGBhBNfHNsLFqmbRQSwqmGTLnTbSF +gcMmgRQPqqPPsgjFSvctCHvHllSSHcvd +JTWfZwhTwzbWwTFTrZnTrDDlDSVtVHLVShtvSHvlHL +bWbWBfzTfwrWJNbTrnzfTwJFpmMQgqsFRsQGqRMggPmPBG +GqCWpGGLpmpWjbSDGjGGmwCzZlvMBTrCvsrlwwswCl +FPFHFVdJgQHJZnslrgvsTrwMlNgw +hQVchcdcZZpZqcDG +JbBRgBsRffgPPFQttQvQQMvG +dmNZgmZVtGTNtNGC +ZqqndLZnccqRbsrgpggsBc +DDvMVmTjwFWPBBTzBF +cqnggcbNNCqbQQqbZbpfQpqgRWlFhLRBhRzRPLFJhlJBfPLh +dpscpcncbbqcpMVSvSrPDMsrjr +hGCGZmVRRcMVsGMtmZWssmFLzbFblnnzfmqbfnzNNb +wjrSPBJdSjjDrggpSJpdrSnlFNlzLTnqNLqqpbqqfMln +dMwPBHPPJHDdvrBBhshWCGcsQRcHRZGV +vdHwhqdtLdVnHBZbFBFzbBPS +TmNCLNDpWfCNmpCgTWNTDMMZlzSggBMzlZlMBlBbZZ +NQfWcscDNQrhqvGLrdhVjh +lZLqzzqvgrCRcQcCLD +HSVVwNTJzwVNTDQrRrrdrBwdhd +TpNTzsfSTVsSpHVppzFpgvvlqZWZPMvMjPPGGsgP +BCMLshLdLDDCgwFRwHHqqRqRWd +QnSqQlGSfpQzTQJNTPNwNPFRFcccHc +mfJJmztnQpGpvnSzGrsqgrhrBBhqjBrthL +BSlmzmlvdNnlQlQQJnJHRVFVFVVqMtqRMfSfCw +WBPsDPBBjfssFHMRRq +DLWpGhbPjbhZrhZDnBQgdNZmQNgmvdzg +WWvgBFgHWChBzgBFbjbtPtnPrsHlsRMrwRrMRR +SGfNpfdGfVpVSGGppSDdwRwclMlfPMwccsntPqPw +TVdpQDSpQZJpVpDQQFBbthvmWzmgvhbjzJ +VVCCbzqdbzhFHvbdhZFPmhCPSNRNGSrPJfTNRSGJfGwPST +LngtBnlcnDvLcTTRfTTwRtGNTG +DpnBjMpLlLDQWDgvpLvbqzmbjzVjVHqbFFqbFq +SbzMbNQQSDdmvqqzdSlWFpwZnvpFWWllpFww +CjLPTPjjLCPtBCLJjBLPLBTFsFFgfwwpZgplpgFnWWRl +nPncrBHGnmrbdmdmNN +FnlblGlTTbNVLVtRvQQvgqRQBCvgNr +DPMDMpMHmnzjPqDhQWvvQvhghq +zMMcddznsjFTldVGlFGT +cLSNGLhmRRVmlVCq +HvzbQBzBMQMpQDpCSlSVZRSCqV +QwWznWnTbQSMMJQHnvwbWjrhNhLFgsGNNrFLNnFNhd +dBrWNQWWcTNqqnNN +bPlmgRgRghlCVlbhwZccCZjZqvmqvmTTvGqmJTvqnGTGvLLJ +DCDZhjllcpDMrSQS +ddtNNTFTwRzGRGCwqnBMjlqMHMfqnB +hDpPsQLLSprhnHVhqhVfHM +QWLWDQZpgpWbQgfspGGRdcGcCcCcztTGZC +GGHFdGwFlswcFtnvTfjMjBFfNBjNBZ +JWmSJLPSRprWWPWVMMVQpZfBvvfQtj +RzPSPDbDDhbhPDLRhCgGHHccsqGCqqtHzG +dbSdptWddDMNtdFvttFclqMTZJlJTlMZqJTJTqjC +BzfwRzrwPzfzLNGmZZCZBTGBqqlH +hVNVQPNQQQVLPwhRrQwgWWvFdDsFWSbdWgdFSFDb +hhSnmhtZSFSqZBJSSqqmJJRHPPLgHtPcGGGcWGtvvHwgvG +fCMpfTQjTrzrzCQMsQdHGHvPGPwLppPRvWPLLc +MdTzCsCMzNzDCTjlmNhRmRnZBllRVh +RrFglccgBVVvFNvCvWlgmDbbDfQDtCdjjDbDwmZD +STnMqSLHJhHHnqLqtnBndbBdfQQZDtZD +GHJPTBsTSsMMSpSBHJFNlWzcvFlzsVzvzgsv +lplNdrVrVrWMMVcJfcDDzbqCCpDL +SSSgvBRSjggPgzvTTRHTvFnfJLbcLsCDLnCLDCcJBsJq +GmHjjRwvHSjHTRjrlZrNMzVMhVrmVW +gdtFtgStSbHCbHMPZrFLPLrVlrVZrP +hQnjMGfDqTvzvpBjVVjPRLRRjJ +QmsQmhvvMtssHtWw +RNjTGSCLJCGdRqMRFvMrfzMvzz +ZpcWcVDpWBmWQMZZpZDpwBcznrshtntvfvhfFtzmvnzvhf +WHHHcVWgQVCbCllbgMLN +ZjjdJHSdSzvcZFMhhhDqDHtthw +rNTlNqVWTmRPlshsDPDlph +WbTNGNmQBRQbRNQgNGmCLdvvjzcCSBqLcLnScL +bZwpSpBvSHCBqNzpdFffqQft +nWRnGRnVnljmlDnzdPfQfdcQPWWfNq +dmRDGMMlDmnVjgMlhBSwCbCgwHbBHhvv +NwqLgLBLgnwNNBGpgsQsddhhpQQg +JcztcZnzVtZvnVcJMTvTJtWtppsQHGdQhhHHQsPhWdPS +fJTJnMmvZvMvRDqFblNBNNjlBf +drZVzZzzNWWzwwTWTZrjWcLCqnRqNnLNLqCqnsPPRL +JhlBgvHBBLnwMBqDwC +GmGFSHmhJSGJwgFJmwJhJhgQVWVdbSWZQzZTrWtZzjzjTz +wPGRPpnzgwwGgLddFBFrnrnJdc +jCsVclQWmCTrJJddrdFs +lWjlCqfmlWccpGPPSgcf +hCThCzTdPcPhzqTzMfVfHrhMMmhVHgVM +lJSJNqwJsZBSsSBFsMprDmFmFDfDDHgHDf +JNGQsSSNGsbZZZSBwZLPtdLjttnqPCbtPbjC +vnlWNpbrNrpShhQDLRLB +MzCjPgffVTVgCJSRQhBdRdJS +VPHcfcBfTzVMTttMzMfgzMfHvrllWvlnvNvlmGwWNwwNmw +BwwsqPJqwBssLlFqLRCDzWwzDGRGGWfSRG +vTtmmthvpphpnNgNvvpvRrDCddDQrCQCzCDrCfnf +pppccNpTVVlqssHHVzBH +HWHphZWVWvMZNvpMtfJZgssffsjJgBlslJ +RLmrFFnGFrFFrrFCRwCrLNPwqfjSJjqJSJBbsqjbbsblfq +LnFLPPGLrGNRQPmndLzPmPmpcDcMHhcMhVHvczcpHHchcV +zwqqvNDVggwqVfNQRlszFBsCCJFtFlFPsz +MSrrGTZPGSSMSjPbTmtlHBBFrFHFsHlsJsct +MnmMPMSZZGSZWmSjnWgfqdgVQDvnqvRDggDV +SQCSBShsQnSsSJswsNpVppPPMVpGpnDVgg +WWjHvmtWZrwvtzzjTTRPrRRrMVNVVGgVGpGR +lTvWjWLfWwbJCQqBSlbB +cjPChhswrNVtMZJjVM +pfvTFvTzLBFndGTlJmVJZmNlCMGtCJ +nfvFTfpbBFdSFpTLswsWDbchwHCWHrbw +lNdNPLJJLHHHlpPJcvtVcsBBrrBvBqrVrC +wDTbwTQRZTMWsVWtmWhhTr +nzRMbSZtMQDnpzzJHLHNflHP +HrwwmwcRbmwcbrrTbwwcrTJWLlPshllhLccqLhnnlljhZhjZ +GMFMSNSpCBSFSdGpNFpBznLlzzhzshlGhhqPhGGL +nFFSCCSSfttBdddDQNDBQpSSrbrmWJwrHfJHWJrbVwWHrgVr +SdddNNCmpNNDhMswhsmbhvHM +frtzqqqFjgrWfgfqtthsnvRHZRRvFlhnvRZb +rtrgqzzrbWtqLGLLtBWzfGcTNCCVGpSNDppTJJVddNpPSG +WWJvJvBgpHSHScQRQSVQLzqL +ddZTlZGZVfQhZRLLMqsR +rPfwrGGrFjjNTGNCCVBggDJHmNDvbmmpmNJJ +bbGrJPRVPtfsVfFlMjBV +WQzhQQQNZQCWNnQDhzWdNjFZggmlHjjmMmMFjFHpMs +CzQCSWDTWhNhzWhTGJwtRRqTblwcclvP +HLDvZgZldDTnLLsswMpVLn +FNVQzQSPznCMmpBwCF +SqfJPfttqffjJPVlhvhZZtvdVDRZ +jVsLvHvvdrSjpJFsGzmnmltnml +nTNTRCTBTmmmFPMJ +CQnCggWQDgBrrSqHjDDfSS +ZpNlrZNcmctZbcZlmcmZhhpPvPHvwBMHJPMTMHBTFJvJ +zmdCnGzGRnLDjQnzPvMFVHMVMLTVwMJv +GGjqssqgzCnCzQsshcffmrbNrrNZtW +DNpTwhpLlWMDWNMhbJjGttJFHgDcjtjG +wqQrdCdqbFtCtJtJ +vffdrwfPrsmqVBBWRVlRRlTSTWSTlR +ZqTCTQQTFvsDSsBDvWBd +hfBLzRLtHHLDDWRRWWDNbd +pHhhnPzLfJcJhzHLzZjcmwCTqTQgwBqqwg +WJHgqgFqrVrqgqCHwsJHHVFZzppZFGGfTtpcfbdpzzpd +RvNMQlMBhwMdMfcpbM +LLRQNBDSSNSwmDDBQRBRBCHsgrgHLVnJVqLsJsnCPJ +BFhGsDsDsBtsPGtQDrrMdbdrffrffbJbRt +cVVqScVSWWvVWgVZjnrHJgLfdrLrnrLLLQ +WmvqNZzzzZSvVzqvcccSzSmqFGCDTGBPQGDhwCDhNDCwPBQp +RqTlHHTTrQqHlTqsrVDqHbrZFZwhpBhphZBFhZpDpLLLfB +nSzGCGdvzdGNPBQQBfhLZfFwFN +WPPPCJMtJSQMJQCCWMJslRrrRgrMRbRqVqqTRR +BMtfLsLZfTPmCtGWZrZqJNJqvpZdWr +bRwgHhhRhbbSRbjSglcgwHHJWPcJdPrnNWrnqnWVVqpdnq +bgjlSgDljHhjgwMPCLPFDMFPGGBC +zJWjczcWjSWghZgzgSSSZflTqwlfqTTbnQwhdTnMdl +NrGVCmNpHFPsrJFbFQMJbJdQTn +JvrtpHHmrCGJCJmNvNpVCsHVgzWgWDDcjjgjDRStWWDLSgzz +HzdFsBBVsfnTfsPmPtDcZqtMhDDz +wrjjRQLlwwwrJQLQbCrbwlJDSlcSDtPZmPSDclWDtcDqWh +RwgprLbNLrLbCCpRCrJLRLFfsGTNNZHBZnnBvvfffnvd +MlqqlWZclnPtZtDSSvwQQjgQpNQSRM +rLJTsBrsJBhshTNNwSQBWNvNgNSg +JbbbChCHsJzHzbWdGHThlFnnPqlPlGPPGncPtFlD +WcMVvwNNvjRcwTQwVcpNRcspPCFtbPztbCTFmtPtCJtbCzmz +grrgDhrnDLnLrdfdLZlLZhmCqzlCbtJlSSStFmttqsJJ +GHHDdgnLDDhrrrgZrZgLNVVVVcRNvcwjWvpWGcRs +qhGhPSJtGhGtJtvNjnJjnvmNQQmj +sRBFlbZsrdBRRGbVGBDwDMDQwQwMNDjjjVNV +CzCflffbBszdBCbdbrtLcfhhgHLGgPccLSPh +zShhHFzgJWFVFFHFHhRPNjwqPLPtLbtrbwVjjr +ssnvTmvCDfpCZTnsfCqwNLNPwbJqNJPwrjZw +vDvpmcnmnBDnsnJTJmQWMHMWzScFggRFRFSW +nnVHHPLrnpssLnrpLRnHtHrjJcCdzCjcDzMzdqwRdjdDcJ +WWTGQQzSGWlTmBbDJJjwMJjcvvlDjw +TGTWBTWmTbgzghZhgzBgpVNrZPPfntfNrVLNNnZP +TqhQnqqLnnqddttNqQWdtqQmppSSFFClRmzmFZFLSmSlFF +BcHjGclVPPBrVrcjrGGDrMgcmmRJbRCFzpZmSDRpRZJJmRzz +ccGjMgvPvsHMgvBHWlhQdqwtllwNdThs +WjddwRGgHRRdMbrwHRwWjHDtDZplslnJnZrsDvCprJPJ +QSLLFqQBffCFststlFnn +CSSmSqzmVVjWMdMjVWgT +lTfQRhVpRzjThpRQTTTlvHrvBvHnPMHgHqHJvn +cGDctCwCdDCGSFcJsFJsFBvgnMBrHvvrqngHgmgssg +SCbSDSFScNpfbRVVJf +RrwmdwMVjMjMTghDWNTJDpWfWG +SbPvNbvbSsPbSvZsPJtJWhHpGGGgJWgJ +lSFvsLNcqzqLrwnFQMnVdmnn +FgCJFTWntWTFtPLmJmmQJmCMMpljWZBwlGMljjjlwvwBvZ +SDSbVbdScSDzbLZMBrjlZpVrZp +ccsSDhSDffzbLNscfcfDcgqhPgTntqmnQmCgtgQCTJ +VnCnrHnPPrCwHmVWtqfMQQqzCqffCZ +DDbDcJJJbpJDGppFpqGZRWfGfddzMWtfWM +tTTglDcgFjwNPHPPwHlH +bMGbqqgPqqVVMGnbVqSMmRfPcJmCTPDDLJDTCmDm +FFjjZvFRsFCctmtvtJWD +wwFhHjQjwQhZrFjQbngglGbRMnSzgbRH +GPTTJSgTPrPPmcTPpdJsGGGjqbRvqlztqlRqMzGjRv +LwnfWLNwwHHQwHnjbbMMjWttqtMmMj +mhwfBDhnQTpJBcBJps +HQQHwMfwlltzMlVljQhVjjHPPPFGPFcCGprPTPPfDrDcGf +pRLdvRvJgqLRBSJCcvFnCDTPTcTGnT +LBLSJbRSLSqbSdBdgJRRqRbwjHHblQttlwtwhzpjMlwhpw +NWLNSNSDtgSgghgdcwccmwGntwclnT +FRCQzJRsvfVVjvzFJfQnffwCcmdwmHmmHmTwmCmdGBcq +sjfJvjfzPRPzvPPVFMssvSLhSSWrMZnSDNrDDhSLZZ +FvLpSLtCfPCWhRSZZMZJSW +jbbjwbHjQmHjHsQrQFMnwTnJznwRzhJRnNTM +gVrjqGqjgrgsFGLDtDBLLfLB +cgTvRWWLVScRWflNJJDfVJmVlG +nPPnnmqjmZHCHBHFdfwNsDhzzfJznhsfhw +bddmQqQjpdFCQWtLQMMSvMMQRS +wjnmPwCgjPnRlwnmvmvvPnTwbSSLLvsLDWdbbWzvsLzWbzbz +NqrGqFHqJlfhhJGbszdWQzzLNtQDzz +FfHFpphrJqJrpGBffcTnBjCnVTMjMRCnVljT +SrfSJGJpSgMprMHdhBGhsdsshdGsmm +nRTRPvQllQlblwvCjTwLTnvBqdhmHDPVsmDmdqshDVhNsP +lbRFHvRwlnlLbnbjLbLjLCzggSpWfMFzSZpzZFJJWpJr +vNLlFldlvPtHFPHQRt +jcpRsScDgshzjqzfVStntBTPMTnmWttntMpp +fSssgVjDsbqSVbCJClLRJLCZRZZb +wnHmCJccDDcrNnrNMRDtTzpTlMpTzpBp +PjSPPGjWjLzTjjMtzzMj +hWvLLFWvHvczVcVn +jgtngnnhMthcnLjMgCZvChDsmdNCvNNZDN +bWqFPbFbLzRFfZBNDNNPZsNd +RbJzGpzVLLLWHHQgTMwcTptQ +sJBhsMWQnhhrFBsFhlQQMfrDCDpLlVCddjTdDDpqDLTLdj +tZHHSRmNHcgmNzpDPJtttqjLqdpL +HbNbZmcHQJbsFWvs +VgPNWGbgSjGjfhRRFfzThtmtzF +qLCQJBqqcPPmLHhHFz +CcJvplQswNgZlNPSbS