diff options
author | Julien Dessaux | 2023-05-06 00:25:08 +0200 |
---|---|---|
committer | Julien Dessaux | 2023-05-06 00:25:08 +0200 |
commit | dbbabc0154c6138c60eaf39194bbc6003e7ee10d (patch) | |
tree | fc92cb4be6d7ef495001f7c344d71620b69b3ac6 /2020/20-Jurassic_Jigsaw | |
parent | patched 2020-19 in haskell (diff) | |
download | advent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.tar.gz advent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.tar.bz2 advent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.zip |
2020-20 part 1 in haskell
Diffstat (limited to '2020/20-Jurassic_Jigsaw')
-rw-r--r-- | 2020/20-Jurassic_Jigsaw/example | 107 | ||||
-rw-r--r-- | 2020/20-Jurassic_Jigsaw/first.hs | 72 | ||||
-rw-r--r-- | 2020/20-Jurassic_Jigsaw/input | 1727 |
3 files changed, 1906 insertions, 0 deletions
diff --git a/2020/20-Jurassic_Jigsaw/example b/2020/20-Jurassic_Jigsaw/example new file mode 100644 index 0000000..b07aa4b --- /dev/null +++ b/2020/20-Jurassic_Jigsaw/example @@ -0,0 +1,107 @@ +Tile 2311: +..##.#..#. +##..#..... +#...##..#. +####.#...# +##.##.###. +##...#.### +.#.#.#..## +..#....#.. +###...#.#. +..###..### + +Tile 1951: +#.##...##. +#.####...# +.....#..## +#...###### +.##.#....# +.###.##### +###.##.##. +.###....#. +..#.#..#.# +#...##.#.. + +Tile 1171: +####...##. +#..##.#..# +##.#..#.#. +.###.####. +..###.#### +.##....##. +.#...####. +#.##.####. +####..#... +.....##... + +Tile 1427: +###.##.#.. +.#..#.##.. +.#.##.#..# +#.#.#.##.# +....#...## +...##..##. +...#.##### +.#.####.#. +..#..###.# +..##.#..#. + +Tile 1489: +##.#.#.... +..##...#.. +.##..##... +..#...#... +#####...#. +#..#.#.#.# +...#.#.#.. +##.#...##. +..##.##.## +###.##.#.. + +Tile 2473: +#....####. +#..#.##... +#.##..#... +######.#.# +.#...#.#.# +.######### +.###.#..#. +########.# +##...##.#. +..###.#.#. + +Tile 2971: +..#.#....# +#...###... +#.#.###... +##.##..#.. +.#####..## +.#..####.# +#..#.#..#. +..####.### +..#.#.###. +...#.#.#.# + +Tile 2729: +...#.#.#.# +####.#.... +..#.#..... +....#..#.# +.##..##.#. +.#.####... +####.#.#.. +##.####... +##..#.##.. +#.##...##. + +Tile 3079: +#.#.#####. +.#..###### +..#....... +######.... +####.#..#. +.#...#.##. +#.#####.## +..#.###... +..#....... +..#.###... diff --git a/2020/20-Jurassic_Jigsaw/first.hs b/2020/20-Jurassic_Jigsaw/first.hs new file mode 100644 index 0000000..8ec5a76 --- /dev/null +++ b/2020/20-Jurassic_Jigsaw/first.hs @@ -0,0 +1,72 @@ +-- requires cabal install --lib megaparsec parser-combinators +module Main (main) where +import Control.Monad (void, when) +import Data.List (intersect, transpose) +import Data.Void (Void) +import Text.Megaparsec +import Text.Megaparsec.Char +import System.Exit (die) + +exampleExpectedOutput = 20899048083289 + +type TileID = Int +data Tile = Tile { tileID :: TileID + , image :: [[Bool]] + , edgesPermutations :: [[Bool]] + } deriving Show +type Input = [Tile] + +type Parser = Parsec Void String + +parseInt :: Parser Int +parseInt = do + n <- some digitChar + return $ read n + +parseLine :: Parser [Bool] +parseLine = do + elts <- some (char '#' <|> char '.') + void $ char '\n' + return $ map (== '#') elts + +parseTile :: Parser Tile +parseTile = do + void $ string "Tile " + n <- parseInt + void $ string ":\n" + image <- some parseLine + let timage = transpose image + edges = [head image, last image, head timage, last timage] + inverted = map reverse edges + return $ Tile n image (edges ++ inverted) + +parseInput' :: Parser Input +parseInput' = do + tiles <- some $ parseTile <* (optional $ char '\n') + void eof + return tiles + +parseInput :: String -> IO Input +parseInput filename = do + input <- readFile filename + case runParser parseInput' filename input of + Left bundle -> die $ errorBundlePretty bundle + Right input' -> return input' + +compute :: Input -> Int +compute tiles = product . map fst . filter ((== 4) . snd) $ map matchingEdges tiles + where + matchingEdges :: Tile -> (TileID, Int) + matchingEdges tile = (tileID tile, sum $ map (matches tile) tiles) + matches :: Tile -> Tile -> Int + matches Tile{tileID=a, image=_, edgesPermutations=e} Tile{tileID=b, image=_, edgesPermutations=f} + | a == b = 0 + | otherwise = length $ intersect e f + +main :: IO () +main = do + example <- parseInput "example" + let exampleOutput = compute example + when (exampleOutput /= exampleExpectedOutput) (die $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput) + input <- parseInput "input" + print $ compute input diff --git a/2020/20-Jurassic_Jigsaw/input b/2020/20-Jurassic_Jigsaw/input new file mode 100644 index 0000000..3ff9a28 --- /dev/null +++ b/2020/20-Jurassic_Jigsaw/input @@ -0,0 +1,1727 @@ +Tile 2131: +###..#...# +##..#.##.# +..###...#. +......#..# +##.#.....# +..#..#...# +......#... +......#... +.........# +#.##..#.## + +Tile 2441: +..#.#..... +#.#....... +.......... +...#.#.... +....###.#. +#....#...# +#.#...#... +#...#..... +#...#....# +.##.#.#..# + +Tile 1571: +....#....# +...#...##. +.#.....#.. +....#..#.. +#....##.## +###..#.... +....#.#.#. +..#....#.. +#...###..# +#.######## + +Tile 2179: +#####..#.# +##......## +#.....#.#. +#...#....# +.....#.#.. +####.....# +.#..#.#..# +##..###... +##.....##. +..#.####.# + +Tile 1433: +#....#..## +#.##...#.. +.........# +#..#....#. +#......#.. +.#.....### +#......### +#..#..#... +.........# +.#.#.#.... + +Tile 1283: +...#.##... +##.......# +#..#.....# +.####.##.. +..#..#.### +#.....#... +.##..##.## +#........# +.......... +#.##...... + +Tile 1667: +.#####.#.# +...#.....# +##...#...# +#..#....#. +.........# +...##..#.# +...#..#..# +#.#.....## +#......... +#..#..#### + +Tile 1657: +##.#.#..## +#.....#.#. +#........# +....#....# +......#... +......#..# +#..#.....# +.##....... +#...#.##.# +.#.##..##. + +Tile 1259: +..#.....## +##.......# +.......#.# +#..#.....# +.#..#..... +#.#..##..# +.##.....## +##.......# +##...#.... +########.. + +Tile 2161: +.#.#.###.# +....##.#.. +..##.#...# +....#.#..# +#......... +.#.#...... +#.#....... +#.##.....# +##.##....# +.#######.# + +Tile 3793: +.##.##..## +#......... +........#. +.#.......# +.......#.# +.#.......# +#.......## +....#....# +#.#....... +####..##.# + +Tile 2953: +....####.. +#..#...##. +.........# +.#...#..## +..#..#.#.. +.......... +#......... +....##.#.. +##..###.#. +...####.## + +Tile 1979: +.####.###. +.....#.##. +##..#.#..# +.##..#.### +#..#..#..# +.#...####. +#....##..# +###.#...## +.#...##..# +.##.#..##. + +Tile 3061: +...####..# +#...#....# +..#...#... +#.##...... +.........# +#.#....... +#........# +.....#.... +#.#......# +.##....#.. + +Tile 2731: +..#...##.# +#......#.# +.....##... +.....##..# +#.##.#..#. +##....##.. +.......... +#........# +.........# +##..#...#. + +Tile 1439: +..###.#### +....##...# +........## +.........# +#.......## +..##...#.# +....#.#..# +......#... +#.##.#.#.# +##.##...## + +Tile 3347: +..#.##.### +...#...#.# +#.#.#...#. +#..#...### +.##....#.. +##........ +##.#..#..# +..#....#.. +..##..#.#. +..#######. + +Tile 1559: +###.#.#### +#.......#. +#.......#. +..#.##..#. +..#.....#. +#...#..#.# +#..#....## +#.##...... +#.#..#...# +.#..#####. + +Tile 3559: +...##.##.. +#........# +..##...... +#...#..... +##.#..##.. +#......... +#.#....#.# +#......... +....#....# +#...#.###. + +Tile 3109: +.##..#.... +#........# +#.....##.# +.....##.#. +#.#......# +#.##...... +#......#.# +#....##..# +.#.##..### +.#.....#.. + +Tile 3701: +#..#..#... +..#..#...# +#......... +#......... +.....#.### +.....#.... +.#..#...## +#......... +#.#.#....# +#..###..## + +Tile 1597: +.##.#.#.#. +..#.#.#..# +#.......## +...#.....# +#........# +.#.......# +..#.#....# +.......... +#.#.##...# +.....####. + +Tile 1231: +.#####.... +#....##... +##..#..#.# +...#...... +#......... +#..#...... +#.#...#..# +..#..#..## +#..##..#.. +##.###.... + +Tile 3389: +.###....#. +#.......#. +#....#.... +#...#....# +..#.##...# +.....##.## +.......... +###...#..# +#..#.#.#.. +#####..##. + +Tile 3461: +....#.###. +.......... +.......... +...#...#.# +#....##... +..#..#.... +##.#..#..# +#....#...# +...#.#...# +....###### + +Tile 2837: +##..#...## +#....##..# +...#....## +.#...#.... +#.....#... +#.#...##.# +##..###..# +#........# +#......... +..###..#.. + +Tile 1423: +####.#...# +#.#......# +...#.....# +#####.#... +#..#..##.. +.....##... +##.##..... +#.#....#.# +...#.....# +#.#.#..#.. + +Tile 3943: +#.....#..# +...##..#.. +...#...... +.#.#...... +#...#..... +#.#.#..#.. +........## +.........# +##..##.#.# +..#.#.##.. + +Tile 3779: +..#.#..#.# +...##...## +.......#.# +..#.....#. +..##...... +#.#....### +.#.#.....# +#......... +##...#...# +#.#.##.### + +Tile 1583: +##..#.##.# +..#.....#. +#..#...##. +#..#.#.#.# +.......#.# +#.##..###. +#######.#. +..#.....## +#.##....## +#..##.#.## + +Tile 3041: +...#.###.. +#......#.. +..#....#.. +.##.....## +#.#...##.# +......#.#. +.......... +.#...#.#.. +..#..#...# +#.##.##.#. + +Tile 1889: +...#.##.#. +.#..#..... +#..#.....# +........#. +.........# +..#...#..# +###....### +#.#....... +#..#.....# +...##..#.. + +Tile 1493: +....##..#. +#........# +#..#...... +.....#..#. +#......... +...#.....# +.........# +.#.#.....# +.......... +...####### + +Tile 1987: +#..#####.. +#........# +###..##..# +.#....#... +......#... +#...##..## +........#. +.##.....#. +##...###.. +##..##.#.. + +Tile 2003: +..#.#.#### +##..###### +#.#..#.#.# +...#.....# +#......... +......#..# +.......#.# +##........ +##....#..# +..#..#.##. + +Tile 1297: +.....###.. +...#...#.# +...#.#...# +.......... +.....#...# +#.......#. +..#....... +..#....... +....#....# +#.#######. + +Tile 3049: +#..###..#. +..###...## +##........ +#........# +.....#.#.. +##..##..#. +#..#.#.... +#.....#... +###.#..... +#..#....## + +Tile 2143: +#...#.#.#. +#......#.# +#.#..##### +###..#.#.. +#.##...### +....#.#.#. +#........# +.......... +#...#...#. +.##.##..## + +Tile 1753: +#.#.#..##. +....#..... +#...###... +#.....#.#. +#.#..###.. +......#... +...#.....# +..#....#.# +#...##.... +..#.#..##. + +Tile 3407: +..###.##.. +....#.#..# +.#...#.... +....##.... +#..##....# +....#..... +.....#.... +.#.......# +#.....#..# +.##...#.## + +Tile 1783: +.#..####.. +##........ +...###..## +#......#.# +#......... +.......... +##........ +........#. +##.####.## +.####.#.#. + +Tile 3593: +#.#.....## +......#..# +##...#.#.# +#.#.#...#. +.......... +.....###.. +#...#.#... +###...##.. +#.#...#... +..#.....## + +Tile 1249: +###....##. +##..#..#.# +.#.#.##..# +..#....... +.........# +#....#.#.# +..##..#..# +###.####.# +.#.#.....# +....##...# + +Tile 2963: +..##.#..#. +#..##....# +#.#..#..## +.#...####. +..#......# +##...##.#. +.........# +#....#...# +##.....#.# +####.#.... + +Tile 1289: +.#....#... +.##.#..... +.##.#..... +#......... +....#...## +##.......# +...#.....# +.......... +.......... +.#.##.#... + +Tile 2053: +#.#.#...#. +....#.##.# +.........# +#.....#..# +....#..... +.##......# +#...#.#... +#...#.#... +...#..#... +#..#.#.### + +Tile 3001: +.#...#...# +....##..#. +....##...# +...###...# +#..#....## +#.......#. +#.##.....# +....#.#.## +.#..##.#.. +.##.....## + +Tile 2591: +.####.##.. +......#.## +..#......# +....#....# +..#....### +..##...... +#........# +.......#.# +#....#.... +##.###...# + +Tile 1931: +.##..#.#.. +#......... +..#......# +.#.......# +....#..... +..#....... +##...##... +#...###..# +#.#.....#. +#.#..#...# + +Tile 3203: +.###.....# +...#..#..# +##........ +.........# +#.#....#.. +.#........ +#.......## +#....####. +#......... +##....#... + +Tile 1747: +#...##..## +...#.#...# +#.#......# +#....#..## +.##....... +##..#.##.. +##....#..# +#...#..... +#.#....#.. +.##.#.#.## + +Tile 3557: +#.##..#... +#.......## +.#.#.#.... +#...#.#... +#.#.##.... +#...#....# +.......... +#....#.... +#...#..... +####..###. + +Tile 3329: +#..##..... +.......... +..#....... +.....##.## +....#..... +.##....#.. +.....#.... +.......... +#####.#..# +#..#.##... + +Tile 3067: +#..##....# +.#.#..#..# +..#......# +#...#....# +#.....#... +..#.#....# +#.#...#..# +.....#.... +..#......# +.#.##..... + +Tile 3371: +#.###..#.. +#.#....#.. +#....#...# +#.....#..# +..#..##..# +#.#.....#. +.#.#..#### +#.#..#.... +..#..#.... +##......#. + +Tile 3467: +#.#....#.. +##....##.# +...#..#### +...#.#...# +.........# +..#....... +...#...#.# +...#...... +.####....# +..#.....#. + +Tile 3923: +...#...##. +#........# +.#........ +#.......## +#.#.#..... +.........# +....#..... +#......... +...#.#..## +#.######.. + +Tile 1453: +#.#...##.. +##....#..# +#......#.. +.......... +#.#.##...# +#........# +.....#.... +.##....#.. +.......... +#.###.###. + +Tile 3331: +.##.#..#.# +.......#.# +#......#.. +..#......# +#..#.....# +#..#.....# +#.#.....## +#......... +.......... +####.#...# + +Tile 2633: +..#.#....# +###......# +.......#.# +....#....# +###.#...#. +.#....#..# +##.....#.# +.##..#.... +#...#...#. +..#...##.. + +Tile 1811: +#..####### +.##.....#. +#.....##.# +#..#...#.. +#...#..... +##..#..#.. +#.##.#..#. +.#........ +##...#.#.# +.####.#..# + +Tile 1777: +.####...#. +.#....#.#. +###..#.... +..#..#...# +#.#.#.##.. +#...#..### +#....#...# +......#... +.....#...# +####.#..## + +Tile 1697: +#.##..#..# +#........# +##.####... +##......#. +#.##....#. +##..#..#.. +#..#..#..# +#.....#### +...#.#.... +##.###.#.# + +Tile 2551: +#..###..## +..#...#... +.......... +.#..#..... +##.....#.. +...#.#.#.. +..#..##..# +.##....... +.###...... +...###.##. + +Tile 2351: +#...#####. +......##.# +....##...# +.........# +#......... +#.....#..# +#........# +..##.....# +....#..#.. +.#.#....## + +Tile 2689: +..###..### +.........# +#...#..... +##..#..#.. +#.#.###... +....#....# +#........# +......#.#. +#.#..####. +####.###.# + +Tile 3253: +..##...... +..#.#....# +..#.#...#. +#...#..... +#..#.#.... +.#....#... +....#..... +#......... +#......#.. +#..#.##### + +Tile 2843: +####..#... +#.....##.# +##....#... +.##..#.#.. +..###.#... +...#...### +#..#..#... +.....#..## +#....#..## +...#..#.#. + +Tile 1187: +.##.####.# +......#..# +...#.....# +.....#...# +.......#.# +.........# +#..#...... +..#......# +#...#....# +#####...## + +Tile 3529: +.....##### +.#...#.... +#..#.#.... +#........# +.#....#.## +##..##.#.. +..##.#..## +.#........ +......#..# +###..#.##. + +Tile 1489: +.##.#.#### +#.#..#.#.. +#....#.... +#.#..#.... +.#...#.... +.......... +#.#..##..# +.........# +.......#.. +.....###.# + +Tile 1097: +###.###.#. +.#...#.... +.......#.. +.#....#.#. +.....#...# +#.#.....## +####..##.# +###......# +#........# +##..#.#.## + +Tile 3491: +#...#.##.. +...##....# +..#.....#. +#.#.#....# +#..#.#...# +.....#...# +....#..... +....#.#..# +........## +##....#... + +Tile 3947: +######.#.# +#.#.#....# +...#.#..#. +...#.#.... +#...#...## +....#..... +.......#.. +##..#....# +..#..#.... +.###..#### + +Tile 3313: +.#....#.## +.##....... +#.##...... +##........ +#.#....... +...#.....# +...#...... +......#..# +##......#. +####.#..#. + +Tile 1277: +#..###..#. +#....#...# +.##....### +#........# +#....##... +#.#...#..# +#...#....# +...#...#.. +...##....# +.#...#.#.# + +Tile 3121: +.#...#..## +........#. +..#..##### +#.....#.## +..#.....## +.......... +#......... +#..###...# +.........# +###.#.#.#. + +Tile 2287: +#....#.#.# +#.#..#.... +#.....#... +.......... +##.#...... +##..#..### +..##....## +.....#.... +#........# +..#.#...#. + +Tile 1171: +#..#.#...# +..#...#... +##.......# +####...#.# +#.#.#.#... +.#.......# +##....#### +#...##..#. +........#. +##.###.##. + +Tile 2503: +#...#.#..# +..#..##.## +...#...### +.##.#...## +#......... +#........# +##.......# +....#.#... +...#.....# +..#...#.## + +Tile 2579: +#.#..#..## +.........# +####...... +..#....#.. +#.#..##..# +#.....##.# +....#....# +.........# +..#..#..## +#..##.#### + +Tile 1867: +.##.....#. +.........# +.#....#.#. +#....#..## +##........ +...#...... +#....##..# +##..##.#.# +#......... +####..##.# + +Tile 2081: +.##..#...# +......###. +..##.#..## +##..##.... +#..#.#...# +....#...#. +##.....#.# +..#....#.. +#...#...## +.####..#.# + +Tile 3319: +..#...#.#. +.....#.... +.#........ +#.......#. +#......... +.....#...# +#.....###. +#........# +........## +#...#####. + +Tile 3727: +##.#.#...# +#......... +..##.....# +#...#.#... +#.#.#...#. +.###.#.... +......#.## +#...#....# +...#.#...# +#..#.#..## + +Tile 1103: +###.##.#.. +.#..#.##.. +.#..###.#. +#.#..##.#. +.##...##.# +....#....# +....#..#.# +...#...### +...#..#.#. +###.#..##. + +Tile 3463: +##...#.#.# +....#..##. +........## +.#.......# +..#..#.... +#.#....#.. +##....#..# +...#..#..# +#.#......# +#.###..##. + +Tile 3449: +..###.##.. +..#..#.... +#...##.... +.####..### +.#..###.## +#.#....##. +......#..# +.......... +##........ +#.......#. + +Tile 2207: +#...#.#.#. +.##.....#. +#####....# +..#.#..... +#..#....## +.#....##.# +#....#.#.# +...#....#. +..#.#..... +##..#.##.# + +Tile 2647: +.#####..#. +.#..#....# +....#.#..# +.##....... +...#..###. +####...### +##.....#.# +#..#.....# +#.#.....## +..##.##..# + +Tile 2539: +##..#..### +...#..#..# +.#....#... +###....#.. +.#...#.... +...##..... +..#..##.#. +...#...... +#...#....# +#.#.##.... + +Tile 2927: +.#.....##. +#.......#. +#..##..##. +#...#..... +....#...## +.#.#.#..## +........## +###.#...#. +...#.....# +.##.....## + +Tile 2153: +#.#..##..# +...#.####. +#..##..... +.........# +#.....#..# +...##..... +...#...### +..##..#### +...#...### +##.#.##.## + +Tile 3083: +###.#..#.# +...#.....# +#.......## +..#......# +...#.....# +.......... +..#......# +.##....#.. +#......### +..#......# + +Tile 1237: +.#....###. +#......... +#...#...## +.....#.#.. +#......... +....#..#.. +........## +##......#. +#......... +#..##.#... + +Tile 2239: +#.....##.# +##........ +....##.... +#.##....## +###.#..### +#........# +.........# +#..#.#.#.. +.........# +.#..#..... + +Tile 1093: +.####..#.. +##....#... +..#.#...## +...#..#... +#........# +#...#.#..# +#.#####..# +....#.#... +#.#.#..#.# +#.#..##### + +Tile 2221: +......#.#. +....#..#.# +#..#...#.# +.#........ +#........# +##....##.# +##.....#.# +##...#...# +#..#..#... +..##....#. + +Tile 1523: +##.###.### +###..#..#. +#..##...## +#..#.#.... +#..#.....# +#.#......# +#.......#. +#......... +.#.###.##. +...#.#...# + +Tile 3673: +###.##..#. +.......... +.#.......# +#..#.##... +......#..# +#.....##.. +##....#..# +..#...#... +#...#...#. +#####...## + +Tile 2063: +####.....# +#........# +......#..# +#.#..#.... +#.#.....#. +...#.....# +#...##..#. +#.....#... +......#.## +..##.#.##. + +Tile 3631: +#.#.#.#### +...#.#.... +...#.#...# +#....#.#.. +#..#...### +#.##...... +#..#...### +#.#.#..#.. +.......##. +.#.#...... + +Tile 2693: +###.####.# +...#...... +....#.#..# +#.#..#.... +.....###.# +#....#.... +##.###.... +#.....#..# +#.....#... +######.#.# + +Tile 2593: +###.....## +.....#.... +..#...#... +.....#...# +..##...... +###....... +.##......# +#....#...# +#..#..#..# +#.###.#.#. + +Tile 3607: +.##.##.#.. +#...#..##. +....#..#.. +#......#.# +.......... +.......... +.......#.. +#....##..# +.......#.# +.#####.... + +Tile 1223: +.####..#.# +......##.. +.........# +...#....#. +#....#.#.. +##.#...#.. +.#......## +.........# +#.#.#....# +##.#..#..# + +Tile 3433: +##.###..## +#..#.##... +##....#..# +#......... +###.##.#.# +....##.... +#...#.#..# +...#...... +##....#..# +##.#.#...# + +Tile 1217: +#..###.### +#.#...#... +..#.##.... +#.......#. +#.......#. +##...#..## +#..#..#... +#..####..# +#...##...# +.####.###. + +Tile 2861: +#..##.#.#. +#...#.##.. +.#...####. +.......#.# +..#...#..# +#...##...# +#.....#.#. +......##.# +##..#.##.. +###..####. + +Tile 1327: +....#.#### +...####... +....#.#... +..#...#.#. +....#....# +..#..#...# +....##.... +......#... +#....##.## +##.######. + +Tile 3613: +#.##.###.. +#..#..#..# +..##.##... +..#..##### +...###..## +#...#.#.## +#....#.... +...#.....# +.###.#..## +####...### + +Tile 2909: +#####..#.. +#...#..#.. +#.#....#.. +..#....... +...##...#. +.#.##..### +...#.....# +.........# +...#.##..# +#######.## + +Tile 1709: +#.#.##.... +#......#.# +.#........ +#......#.. +.........# +......#.#. +..##...... +.....#.... +..#.##.... +#....##### + +Tile 2857: +###.#...## +#.#....#.. +........## +#.#...#..# +#......#.. +.....####. +......#..# +.......... +#.#.....## +..#..##... + +Tile 3541: +#.#.##.### +.....##..# +..#.#..... +#..#.....# +##....#... +#.#...#... +....##.... +.........# +.##....#.# +...#.....# + +Tile 2459: +##..#.#..# +...#.#.##. +##...#.... +.##.#.#... +#.....#..# +...#.....# +......#... +.....##... +...##...#. +..#..###.. + +Tile 1621: +#.##.###.. +##..#.#... +.#.##...## +.###.#..## +.#..##.#.. +#.......## +.....##... +..#....... +#......... +#..#..###. + +Tile 3833: +#..#...### +.........# +#.....#... +#..#...#.# +#......#.. +.#........ +..#....... +.........# +......##.# +.#..#.#.## + +Tile 1117: +..##.....# +..##...... +#..#.#...# +#...##..## +....#...#. +#...#....# +....#..#.# +...#.....# +#..#.....# +..#.##..## + +Tile 3413: +#.#..#.### +....##.#.# +...#.....# +.........# +#......... +.....##.## +..#....#.. +#.....##.. +#........# +#.######.. + +Tile 2141: +.##.#..#.# +#.###..... +#..#....#. +#..#....#. +..#....... +.#.....#.# +##......#. +..#..#.### +...#.....# +...#..#..# + +Tile 3547: +####.#..## +...#.#...# +......#... +##.#...... +#........# +.##...#..# +.#...#..## +#..#..#... +#.##...... +##.###..#. + +Tile 1069: +##.#..##.# +.#....#..# +.##......# +.#....#.## +#..#..#... +..#.#..... +.......... +#....#..#. +##........ +..#...##.# + +Tile 3169: +##.##.#..# +#.....#### +.##...##.. +#....#.#.# +#.#..##... +#........# +.#.......# +.#........ +.........# +#..#...#.# + +Tile 1307: +..##..#.## +###.#...## +..##.....# +#.##.....# +.....#.#.. +..#....#.. +....#...#. +.....#..## +.#.....#.# +##.#.....# + +Tile 3359: +#.#.#..#.. +........#. +.#...#...# +#....##..# +.#.#...... +#...#.#.#. +.#...###.# +#........# +.#.#.....# +###.#..#.. + +Tile 2713: +#...#...## +##.###.#.. +..##....#. +...#.....# +..#.....#. +#....#...# +....#..... +#..##....# +.........# +#######..# + +Tile 2897: +...####..# +...#...#.# +#.......#. +......#... +.....#...# +.........# +.#.#...... +######..## +...#..#..# +#..###.### + +Tile 3929: +....#.#.#. +.#...#.... +#.##..###. +..##...... +#.##...#.. +#...#..... +.......### +#.##.....# +#...#..... +...####### + +Tile 1031: +#####.#.#. +#....##.#. +#..#..#..# +.........# +##.#...#.# +....#...#. +.......#.. +#......#.. +......#..# +.#.....#.# + +Tile 1361: +#.#.#..... +.#........ +..##...#.# +#..##.#..# +.....##### +.......##. +#........# +.......... +#..#...#.# +##.###.#.# + +Tile 3853: +#..##..... +.........# +#..#...... +#......... +###.....#. +...#.#...# +#......... +.......... +.......... +##.##.#### + +Tile 1009: +...#.#...# +..##....#. +.......#.. +.....#...# +#..#...#.# +.#..#..#.. +..##.#..#. +....#.#..# +#..#.#.... +###.#.#### + +Tile 3761: +.##.#.#.#. +..#......# +#....##... +.#........ +#...#..#.# +.........# +#......... +.........# +.#.......# +#..#...... + +Tile 2521: +.#.....### +#........# +...##....# +###....... +#....#.... +###..#...# +##....#..# +.#........ +.........# +#..#...### + +Tile 1907: +.####.#..# +...#..#..# +#.#..##.## +##....##.# +#........# +#...#..... +#......... +#.#..#...# +##....###. +.##.###.#. + +Tile 2039: +...##..### +###...#... +.#.......# +...##.#... +.........# +......#..# +#........# +###....#.# +#.#......# +#..#...#.. + +Tile 2389: +##.##.###. +#.#....... +........## +.........# +...#...... +.......... +#...#..#.# +#.......#. +....#..### +####.###.# + +Tile 2089: +#.#..#.#.# +#........# +.#.....#.. +.......... +#....#...# +#........# +#......... +#......... +#...#..... +#.#...#..# + +Tile 2137: +.#####..## +..#......# +#.#..#.... +.#......#. +#...#..... +......#... +....##..#. +.##....#.# +#..#..#..# +#..####.## + +Tile 3191: +..###....# +.........# +........## +....#..#.. +.........# +#......... +..#..#..#. +.#....###. +#.....#..# +#..#####.# + +Tile 2789: +#.#.#.##.# +...#.....# +#..###...# +#........# +##.......# +#..##....# +.#........ +.........# +..#......# +......#..# + +Tile 1567: +....#....# +#..##..##. +.....#.... +#.##.##... +....##.... +##...#...# +#.#.#....# +......###. +..#.#..#.# +.#..##.#.# + +Tile 1163: +.###..##.. +.#.....#.# +#...###..# +.....#.... +.........# +..#...#..# +..#..##.## +.##..###.# +.........# +##.##..#.# |