From: Neil Smith Date: Fri, 11 Dec 2020 09:45:15 +0000 (+0000) Subject: Done day 5 X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-20.git;a=commitdiff_plain;h=55b6bbccec21b1f2560c84f3578dbafd32a2cede;hp=bbe358123c653438963826025c69e6ab86e4733a Done day 5 --- diff --git a/advent05/package.yaml b/advent05/package.yaml new file mode 100644 index 0000000..c0b12aa --- /dev/null +++ b/advent05/package.yaml @@ -0,0 +1,61 @@ +# This YAML file describes your package. Stack will automatically generate a +# Cabal file when you run `stack build`. See the hpack website for help with +# this file: . + +name: advent05 +synopsis: Advent of Code +version: '0.0.1' + +default-extensions: +- AllowAmbiguousTypes +- ApplicativeDo +- BangPatterns +- BlockArguments +- DataKinds +- DeriveFoldable +- DeriveFunctor +- DeriveGeneric +- DeriveTraversable +- EmptyCase +- FlexibleContexts +- FlexibleInstances +- FunctionalDependencies +- GADTs +- GeneralizedNewtypeDeriving +- ImplicitParams +- KindSignatures +- LambdaCase +- MonadComprehensions +- MonoLocalBinds +- MultiParamTypeClasses +- MultiWayIf +- NamedFieldPuns +- NegativeLiterals +- NumDecimals +# - OverloadedLists +# - OverloadedStrings +- PartialTypeSignatures +- PatternGuards +- PatternSynonyms +- PolyKinds +- RankNTypes +- RecordWildCards +- ScopedTypeVariables +- TemplateHaskell +- TransformListComp +- TupleSections +- TypeApplications +- TypeFamilies +- TypeInType +- TypeOperators +- ViewPatterns + +executables: + advent05: + main: advent05.hs + source-dirs: src + dependencies: + - base >= 2 && < 6 + - text + - megaparsec + - containers \ No newline at end of file diff --git a/advent05/src/advent05.hs b/advent05/src/advent05.hs new file mode 100644 index 0000000..06d0ecc --- /dev/null +++ b/advent05/src/advent05.hs @@ -0,0 +1,26 @@ +-- import Debug.Trace + +import Numeric +import qualified Data.Set as S + +main :: IO () +main = + do text <- readFile "data/advent05.txt" + let passes = lines text + print $ part1 passes + print $ part2 passes + +part1 = maximum . map convert + +part2 passes = S.elemAt 0 $ expecteds `S.difference` knowns + where ns = map convert passes + highest = maximum ns + lowest = minimum ns + knowns = S.fromList ns + expecteds = S.fromList [lowest..highest] + +directionToInt :: Char -> Int +directionToInt dir = if dir `elem` "BR" then 1 else 0 + +convert :: String -> Int +convert = fst . head . readInt 2 (`elem` "FBLR") directionToInt diff --git a/data/advent05.txt b/data/advent05.txt new file mode 100644 index 0000000..acff32c --- /dev/null +++ b/data/advent05.txt @@ -0,0 +1,874 @@ +FBFBFFFLLL +FFBBBBFLRR +BFBFBBBLLL +FFBBBBBLLL +BFFBBBBRLL +BBBFFBFRLL +FFBBFFFRRR +FFBFFBBLRL +FBFFBFBRRR +FBFFBFBRLL +BFFBFFFRLR +FFFBBFFRRR +BFBFBBFLLL +FBFBBFFRRL +BFFBFBFLRL +FBFFFBFRRL +FBFBFFBRRR +FBFBFFBRLL +BFBFFFBLLL +BFBFFBBLRL +FBFFFFBRRL +BFFFBFFRRL +FBFBFFFRLR +BFFFFBBLLR +FFBFFFFRLR +BBFBBFFLLL +FFBFFBFRRR +FBFBFBBRRR +BBBFFFFLRR +FFFBFFBRRR +BFFBFBFLRR +BFFFBBBRLL +FFBFBBBRLR +FBFFFFBLLR +FBBFBFFLRL +FBFFFFFRLL +FBBBBFBRLL +BFBBBBFLLL +FBBBFBBRRR +BFFFBFBLLL +FBBBBBFLRL +BFBBBFFLRR +BFBBFBBLRR +FFBBBFFLRR +FFBBBBFRLR +BFFFBFFLLR +FBBFFFBRRL +FBBBFBBLRR +FFBBFBFRRL +FFFBFBBLRR +FBFBBBBRLR +FBFFBFBLLL +FBBFFFFRLL +BBBFFFBLRL +FBBFBBBLLL +FFBBFBBLLR +FBFFFBBRLR +BBFBBFFRRL +FFFBBFFRLL +FBFFBBBLRL +BFFBFFFLRL +FFFFBBFRRR +FBBFBBFLLR +BFBFBFBRRL +BBFBFBBRRR +BBBFFFBLLL +BFBFFBFRLL +FFBBFFBRRR +BFBBFFFRRL +BFBBBFBRRL +BFBBBBBRRR +BBFBFBFRLL +BBFFBFFLRL +BFFBBFFLLL +BFBFBFFLLL +FBBBFFFRLR +BFFFBBBLRL +FBFBFFFLRR +FBBBFBBLRL +FFBBFBBRLR +FBBFFFFLRL +FFFBFBBLLL +FBFBFFBRRL +BBFFBBFRRR +BFFFFBFRLR +FBFBFFBLRL +FFBFFBBLLL +FBFBBFBRLR +BFFBBFBRLR +FFBFBFBLLL +FFBBFFBRLR +FBBBBBBLLL +FFFBBBBRRL +BFBBFBBRLL +BBFFFBFLLR +FFBBBBFRRR +BFBFFFBRLL +BFBFFBFLRR +FFFFBBBLLR +FBFFBBFRLL +FFFFBBBRRL +FFBFFBBLLR +FBFFFBBLLL +FFBBBBFRLL +BBFFBFFLLL +BFBBBBBRRL +BFFBFBFLLL +FFBFBBFLLR +FFBFBBBLRL +BFFBFFBLRL +FBBBFFFRRR +FBBFFBBRRL +FBBFFBBLLR +BBFBBBFLRR +BBFFFBFRRL +FBFBFBFRRL +FFBFBBFRRR +FBFFBBBLLR +BBFBFFBRLL +BFBBBFBLRL +FFBBFFFLRR +BFFFBFFLRL +BFFBBBFLLL +FBBFFFBLRL +BBBFFBFLLL +BFBBFBBRLR +FBBBBBFRLL +FBBBBFBLRR +FFBFBBFRLR +BBFFFFBLLL +FBFBBBFRLR +FBBFBBBLRL +BBFFBBBRLL +FFBFBFFLLR +FFFBBFBRLL +FFBBBFFRLL +BFBBFFFLRR +FBBBFBFRLL +BBFBFBFLRR +BFBBBFFRLL +FFBFFFFRRR +BFBBBBBLLR +FBBBBBBRRR +BBFBBFFLRR +BFBFFBBLRR +BFFBFBBLRR +BFFBBFFRLR +FBBBFFBRRR +FFFFBBBRLR +FBFFFFFLLL +BBFFFBFLRR +BFFFFBFLRL +BFFBFFBLLL +BFFBBFBRRL +FFFBBFFLLR +FBFFFFBLRL +FBFFFBFLLR +FFBBFBBRLL +FFBFFBBRLR +FFBFFFBRRL +FFFBFBFLRR +BBFFBFFRRR +BBFFFFFLLL +FBBFBFBRLR +BBFBBFBLLR +BBFBBBFRRL +BFBFFBBLLR +FBBFFFFLLR +FFBFBFFRRL +FFFBFFBRRL +FBFBFFBRLR +BFBBFBFRLL +BBFBBBBLLR +BFBBBFFLLL +BBFBBBBRRL +BFBFBFBRLR +BFFFBFBRRL +BFFBBBFRRL +BFFFBFBRLL +FBFBFBFLRR +FFBFFBFLRR +BBFBBBBRLL +BFBBBFFLRL +FBBBBFBLLL +BBFBBBFLRL +BFBBFBFLLL +FBBBBBBLRL +FFBFFFBLLL +FFBBBBBRRL +FBBFFFBLLL +FBBBFFBLRR +BBBFFBFLLR +FFFFBBBLLL +FBBBBBBRLR +FFBFFBBRRR +BFFFBFFRLL +BBBFFFBRRR +FBBFBFFLLL +FBFBFBBRLR +FBFFFFFLRL +FFBBBBBRLR +FBBBFFBRRL +BFBBBBFRRL +FBFBBFBLLR +BBFFBBBLLL +BBBFFBFRLR +FFBBFFFLLL +FFBFFBBRRL +FBBBBFFLLL +FBBBBBFRRR +FBFFBBFLLR +FFFBFFFLRL +FFFBFBBRRL +BFFFBFFLLL +FBBBFBBLLL +FFBFBBBLLL +BFFFFFBLRL +FBBBFBFLRR +BBFFBBFLLR +FBFFBBBRLR +BFBFFFFLLR +BFBBBFBLLL +BBFBFBBRLR +FFFBBFBLLR +BFFBFBBRRL +BBFFBBFLRR +BFFBBBFLRR +FBFBBBBRRL +BFBFBFFRRL +BBFBBFFRLR +BBFBBBBRLR +FFBBFFFLLR +BBFBFBBLRR +FBFBFBFLLL +BFFFFBBRRR +BFBBBBFRRR +BFFFFFFLRL +BBBFFBFLRR +FFFBBBBRLR +FBBFFFBRLL +BBFFBBFLRL +FFBBBBBRRR +BBFFBFFRLL +BFFFFFBRRR +FBBFBFBRRR +BFFFFBFRRR +FBBFBBBRLL +FFFBFBBRLR +FBBBBFFRLR +FBBFFFBLLR +FFBBFFBLLR +BFBFFFBLRR +FFBFBBBRRR +BFBFBFBLRR +BFFBBFBLRR +FBFFBFFRLL +BFFBBBFRLR +FBFFFBFRLR +FFFBFBFRLL +FBBFBBFLLL +BFBBFFFLRL +FBBFBFFLRR +BBFFFBFRRR +FBBFBFBLRL +FBBBFBFLLR +FBFBBBBLLR +BBBFFFFLLR +BFBBFBFRRR +FFBFBFFRLR +FFBBFBBLLL +BFFFFFBLLR +FBBBFBFLLL +FBBFBBFRLR +BBFFFFFRLL +BFBFBFFLRR +FBFBBFFLRR +BBFBBFBRLR +BFFFBBFRLR +FBFFBBFRRR +FBFFFBFLLL +FBBFBBBRRR +BBFFFBBLRL +FFBFFBFLLR +BBFFBFFLLR +BBBFFBFRRL +FBFBBFBRRR +FBBBBBBRLL +FBFFFBBLRR +FFFBFFFLLL +BBFBBFFRLL +BBFFFBFRLL +BBFFFBFLLL +FFBBFBBRRL +FFFFBBFLRL +BFBBBBFLRL +BBFBBFFLLR +BBFFBFBRRR +FBFBBFFRLL +FBFBBFBLLL +BFBBBFFRRR +FFBBBFBRLL +FFBFBBBRRL +BFBBFBFRLR +BBFBFBFRLR +FBFBBBFLLR +FBFBBBFLRL +BBFFBBFRLR +FFBBFFFLRL +FFFFBBFLRR +FFFBBFFLRL +FFFBFBFRRR +FBBFFBBLRR +BBFBBFBLRR +BFFBBBFLRL +FBFFBFFRLR +FBFFFBFRRR +BFFBBFFRRL +BFFFBBFRLL +BFBFBBBLRR +FFBFFFBLRL +FBFBBFBRLL +FBBBBFBLLR +FFBFBFBLRL +FBFBBBFLRR +FFBBBBBLRR +FFBFFFBLLR +BBFFFBBRLL +BBFFBBFLLL +FFFBBFBLRL +FBBBFBFRRR +BBFBBBBRRR +FBBBFFBLLR +FBBBBFBLRL +FBFBFFFRRL +FBBFFFFLRR +BFFFBFBLRL +BFFBFFBRLL +BFBFFFBLRL +FBFBFBFRLL +BBFBFBFLLL +FBBBBBFRRL +BFFBFFFRLL +FBBBFBBRRL +BFBBFFBRLR +FFBFBFFLLL +FFBBBBBLLR +FFBFBFBRRL +FFFBFFBLRL +BBFFFBFLRL +FBFBFBBRRL +BFFBFFBRRL +BBFBFBBLRL +BBFBFBFRRR +FBFFBBFRLR +FBFBBFBLRR +FBBFFFFLLL +FFFBFFFLRR +FFFBBBBRRR +BBFFFBBRLR +FFBFFFFRLL +FBFFBFBRLR +FBFBFBBRLL +FBBBBFFLRR +FBBFBFBRLL +FBBBFBFLRL +BBFBBBFLLR +FFBFBBBLLR +BFFBBBFRRR +FFBBFBFLLL +BFBBBFBRLR +FFBFBBBRLL +FFBFBFFLRR +FBFBFBBLLL +BFBBBBFLLR +FFBBFBFRRR +FBFBFBBLRR +BFFFBFBLLR +BFFBFBFRRL +FFFBBBFRLR +FFFBBFFRRL +FFFBBBFLRL +FFFFBBFLLL +BBBFFFBLRR +FBFFFFBRRR +FFFFBBFRRL +FBFBBFFRLR +BFFBBBBLRL +FBFFFFBLRR +FFFBBFBLRR +FFFFBBFRLL +FFFBBFBRRR +FBFFBBBRRL +BBFFFFFLRL +BBFFBBFRRL +BFFFBBBLLL +FBBBBBBLRR +FBBBFFFRLL +FBFFBFFLRR +FFBFBBFLLL +FFBBBFBRRR +BFFFBFBRRR +BBFFBFBRRL +BFFFBBBRLR +FBFFFBBRRR +BBFBBFBRLL +BBFFBBBRRR +FBFFBFBLLR +FFBFFBBLRR +FBBFBBFLRL +FFBFFBFLLL +FFFBFFFRRL +BBBFFFBRLL +BFBFBBBRRL +FFBFBFBLLR +FFFBBBFRLL +BFFFBBFRRR +BFBBFFFRLR +FBBFFBBRLL +BFBBBBBLRL +BBFBFBFLRL +BFBBBFBLLR +FBBFFBBRRR +BFFFFBBLRR +FBBFBBBLLR +BFBFBFBRLL +BFBFBFBRRR +BFFFFBFRRL +FBFBBFFLLR +FBBFBBFRRL +BBFBFBBLLL +BFFBFFBRRR +FBBFBFBLRR +BFFBBFBLLR +BFBFBBBRLL +FBFFBBBLRR +BBFFBFBLRR +BBFFFFFRLR +BBBFFBBLLR +BBFBBFFRRR +BBFFFBBLLR +BFFBFFBRLR +FBFFBFFLLL +BFBBFFFRLL +FFFBFBBRLL +FBFBFBBLRL +FFFBBBFRRL +BFBFBBFRLR +BBFFFFFRRL +FBBFBFFLLR +BFFFBBFLRR +BBFBBFBRRR +BBFFBBBLRR +FBFBBFFRRR +BFFFBFFRLR +FFBBFBFLLR +FBFBFFBLRR +FBFFBFBLRL +FFBFBFBRLR +FBBFBBBRRL +FFBBFFFRLR +FFFBFBBRRR +FBBFBFFRLL +FFBFBFFRLL +FFBFBBBLRR +FFBBBFFLLR +BFBFFFFLRR +FFBBBFBLRL +BBFFFBBRRL +FFBFFBFRRL +FFBBBFBRLR +BFBFFBFLLL +BBFBBBFRLR +BFBFFBFRLR +FFBBBBBLRL +FFFBBFFLLL +BBFFBFFRRL +BFBBFBBLRL +BFFBFFFLRR +BBBFFFFLRL +BFBFFBBRLL +FBBBFFBLLL +FBBFFBBLLL +BBFFFFFLLR +FFBBFFBLRR +BFBBFBFLRR +BBFFFFFLRR +BFFBFBFLLR +FBFBBBBLLL +FBBBFFBRLR +FBBBFBBLLR +BFBFBBBLRL +BFFFBFBRLR +FBBFFBFRRR +BFFFBBFLLL +FFBFFFBRLR +FFBFFFBRRR +FFFBFFBRLR +BBFBFFFRLL +BFBFFBFRRL +BFBFBBFRRL +FBBBBBFLRR +BFFBBBBLRR +FFBFFBFLRL +BFBFBBFLRL +BFFFFFFLLR +FBFFBBBRRR +BFBFFBBRLR +FBBFBFFRLR +BFFBBBFLLR +BFBFFFBLLR +FFBFFFFRRL +FFFBBBBLRR +FFFBBFBLLL +BFFBFBBLLR +FBFFBFBLRR +FFFBBBBRLL +BBBFFFBRLR +BFBBFFFLLL +BFBBBFFLLR +BFBFBFFRRR +BFFFFBFLLR +FBBBBFBRLR +BFFBBBBRRL +FBFBFBFRLR +FFBFBBFRRL +BFFFBBFLLR +FFBBBFBLLL +FFBFBBFLRR +BFFFFBFLLL +FBBBBBFRLR +BBFBBBFLLL +FBFBBFBRRL +FFBBFBFRLL +BFBFFFFRRR +FBFFFFFRLR +FFBBFFBLRL +BBFBBBBLRL +FBBFFBFLRL +BFFFBFBLRR +FBFFFBBRRL +BBFBFFBRLR +FFBBFBBLRL +FBBBBFFLRL +BFFFFBBRLR +FBFFBBFLRR +FFBFBFFRRR +FFBBFBFLRR +BFFBFFFRRL +FBBFFBFRLR +FBBFBFBLLR +BFBFFBBRRL +FBFFFBFLRR +FBFBBFBLRL +BFFFFBFRLL +BFBFBBBRRR +FFFBFFFLLR +FBBBFFFLRR +FFBFBBFLRL +BFFFFBBLRL +BBFFBFFLRR +FBBFFFFRRR +FFFBFBBLRL +BFFFBFFLRR +BFBBFBFLRL +FBFFBFBRRL +BFBFFFFLRL +FBBFFFBRRR +FFBBFFBRLL +FFBFFBFRLL +BBFBFBBLLR +BFBFBFFLLR +BFFFBBBRRL +BBFBFFFLLR +FBFBFFFLRL +BFFBBFFRRR +BFFBFBBRLR +BBBFFBFLRL +BBFBFFBLRR +BBFBFFFLLL +FFBBBBFLLL +BFBBFBBRRR +BBFFFFBRRL +FFBFFBBRLL +FBBFFFBLRR +FFFFBBBLRL +FFBFBFFLRL +FBBBBFBRRR +BFFBBFBRRR +BFFFBBBLLR +BFFBFBFRLR +BFFBBBFRLL +FFFFBBBLRR +BFBFBBBRLR +BFBFBFFRLL +FFBBFFFRRL +FBBFFBFRRL +BBFFBBFRLL +FBBFFBBRLR +BFBBFFFRRR +BFBBFFBRRL +FBFFFBBRLL +FBBBBBBRRL +FBFFFFBRLR +BFBBFFBLLR +BBFBFFBRRL +BFFBBFFLLR +BFFFFBBRLL +BBFFBFBLLL +FBBFFFFRLR +FBBFFBFLRR +BFFBBFFRLL +BFBBFBBLLL +FBFBFBFLLR +BFFFBBBLRR +BFBFBFBLRL +BBBFFFFRRR +FFBFBFBRLL +FBFFBFFRRR +FFBFFFBRLL +FBBFBBFRRR +FFFBBBFRRR +FBFFBFFRRL +FFBBFFBRRL +FBBBFFFLLR +BBFBBFBRRL +BBFBFFFRRL +FFFBBBBLRL +FBBBFFFRRL +BFBBFFBLRL +FBFFFFFLRR +FBFFBBFLRL +BBFFBBBRRL +BBBFFBBLLL +FBFFBBBRLL +BBBFFFFRLL +FFBBBFFRLR +BBFFFFBRLL +FBFFFBBLLR +BFFBFBFRRR +FBFFBBBLLL +FBFBBBFRLL +BFFFFFBLRR +BFFBBFFLRL +FFBBFBBRRR +FBFFBFFLLR +BFFBBBBLLR +BFFFFFFRRR +BBFBBBFRRR +BBFFFFBLRR +BFFBBFBLLL +FFBBFFBLLL +BBBFFFFRRL +FBBFBBFLRR +FBBFFFBRLR +FBFBBFFLRL +FBFBFFFRLL +FBBFFBBLRL +BFFBBBBRRR +FFFFBBFLLR +BBFFBBBRLR +BFFFFFFRLL +FBBBBBBLLR +BBFFFBBLRR +BFFFFFBLLL +FBBBBFFLLR +BBFBFFFRRR +FBFBFFBLLL +FBFFFFBLLL +FFBFFBFRLR +BFBFFBBLLL +BFFBBFFLRR +FBBBBBFLLL +FFBBBFBLRR +BFFFFFBRLR +BBFBFBBRRL +BBFFFFBRRR +FFFBFBFLRL +FBFBBBBLRR +BFBFFBBRRR +FFBFFFFLLL +BFBFFBFLLR +FBBFBBBRLR +FFFBFFFRLL +FFFBFBFRLR +FFBBBFFLRL +BFFBBBBRLR +FBFFBBFLLL +FFFBBFFLRR +BBFBFBFLLR +FFBBFBFLRL +BBFFBBBLRL +BBFFFFBLLR +FFBFFFBLRR +BFBBFBFLLR +BFBBBBBLLL +BBFBBFBLRL +BBFBFFFRLR +BFFBFFFLLL +BBFBFFBRRR +FBFBBBFRRR +FBBBBFFRLL +BFFBBFBLRL +BBFBFFBLRL +BFBBFFBRRR +BBBFFFFLLL +BFBFFFFRRL +FBFFFFFRRR +BFFFFBBLLL +BFBBFFBRLL +FFBBBBBRLL +BFFBFBBRRR +BFBBFFFLLR +BFBBFBBLLR +FBBBBFBRRL +FBFBFBFLRL +BFBBBBFRLL +FFFBFFBLLL +BFFBFFFLLR +BFBBBFBRLL +FFFBBFBRRL +FFBFBFBRRR +FFFBFBBLLR +BFBBBFBRRR +FBBFBBFRLL +BFBBFBBRRL +BFBBBBFRLR +FFFBBBBLLL +BBFFFBBLLL +FFBBBBFLRL +BFBBBBBRLL +FBBFFBFRLL +FBFFFBBLRL +FBBFBFFRRR +FFFBFBFLLR +FFBBBFFRRL +FBBBFBBRLR +BBFBFFFLRR +FBFBBFFLLL +BBFFBFFRLR +BBFBFFFLRL +FBBBBFFRRR +FFBBBFBLLR +BBBFFFBRRL +FBFBFFFLLR +BBFBFFBLLL +FFFBBFBRLR +FBFFFBFLRL +BFFBFBBLLL +BBFBFBBRLL +FBFFBBFRRL +BFBFFFFRLL +BBBFFBBLRL +FFFBFFBLLR +BFFBFBBRLL +FFBFBFBLRR +BBFBFBFRRL +FBBBFBFRRL +FFFBBBBLLR +FBBBFBBRLL +BFBFBBFLRR +BFFFFFFLLL +FFFBFFFRLR +BFBBBFFRLR +BFFFFFBRLL +FBFFFFFLLR +FBBBFFBRLL +FBBFFBFLLR +BFFBFFBLRR +FBFBBBFLLL +FBFFFFFRRL +BBFFFFBLRL +BFBFFFFRLR +FBBFFFFRRL +BFFBBBBLLL +FFFFBBBRRR +FFBBFBBLRR +FBBFFBFLLL +BFFFFBBRRL +FFBBBBFRRL +BFFFFBFLRR +BFFFBBFRRL +BFBBBFFRRL +BFFFBFFRRR +FBFBBBBRRR +FBFFBFFLRL +FBBBBBFLLR +BFBFBBFLLR +BBBFFBFRRR +BFBBFFBLRR +FBBFBFFRRL +BBFBBFBLLL +BFBBFFBLLL +FFBBBFBRRL +BFBFBFBLLL +BFFBFBFRLL +BBFFBBBLLR +FFFBFBFLLL +FFBBBBFLLR +FFFBFBFRRL +BFBFFFBRRR +FFBFBBFRLL +FFFBBBFLLR +FBBFBFBLLL +BBFFFFFRRR +FFFBFFFRRR +BFFFBBBRRR +FFBFFFFLRL +FFFBFFBLRR +FFBBFBFRLR +FBBFBBBLRR +BFFBBFBRLL +BBFFFBBRRR +FFFFBBFRLR +FBBFBFBRRL +FBFBFFBLLR +FBFBFBBLLR +BFBFBBFRRR +BBFFBFBLLR +FFBBBFFLLL +BBFFBFBRLL +BFFFBBFLRL +BFBFBFFRLR +BFBFFFFLLL +FFBBBFFRRR +BBFBFFBLLR +BFBBBBFLRR +BFFBFBBLRL +FFBBFFFRLL +FFBFFFFLLR +BFBFFFBRRL +BFBFBFFLRL +BFFFFFFLRR +BBFBBFFLRL +FBFFFFBRLL +BBFFBFBRLR +FBBBFFFLLL +FFFBBBFLLL +BFFBFFFRRR +BBFBBBBLLL +BBFFFBFRLR +FBFBFFFRRR +FFFBBFFRLR +BFFBFFBLLR +BBFFBFBLRL +BFBFBFBLLR +FBFFFBFRLL +BBFBBBFRLL +BFBBBBBRLR +BFBFFFBRLR +FFFBBBFLRR +BFBFFBFLRL +BBFBBBBLRR +BFBFBBFRLL +FFFFBBBRLL +BFBBBBBLRR +FBFBBBBRLL +BFBBFBFRRL +BBFFFFBRLR +FBBBFBFRLR +BFBFFBFRRR +FBFBBBBLRL +BFBFBBBLLR +FFBFFFFLRR +FBFBBBFRRL +FBFBFBFRRR +BFFFFFFRLR +FBBBBFFRRL +BFFFFFBRRL +BBBFFFFRLR +FBBBFFBLRL +FBBBFFFLRL +FFFBFFBRLL +BFFFFFFRRL +BBBFFFBLLR