aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2023-05-06 00:25:08 +0200
committerJulien Dessaux2023-05-06 00:25:08 +0200
commitdbbabc0154c6138c60eaf39194bbc6003e7ee10d (patch)
treefc92cb4be6d7ef495001f7c344d71620b69b3ac6
parentpatched 2020-19 in haskell (diff)
downloadadvent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.tar.gz
advent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.tar.bz2
advent-of-code-dbbabc0154c6138c60eaf39194bbc6003e7ee10d.zip
2020-20 part 1 in haskell
-rw-r--r--2020/20-Jurassic_Jigsaw/example107
-rw-r--r--2020/20-Jurassic_Jigsaw/first.hs72
-rw-r--r--2020/20-Jurassic_Jigsaw/input1727
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:
+.###..##..
+.#.....#.#
+#...###..#
+.....#....
+.........#
+..#...#..#
+..#..##.##
+.##..###.#
+.........#
+##.##..#.#