aboutsummaryrefslogtreecommitdiff
path: root/2023/18-Lavaduct_Lagoon
diff options
context:
space:
mode:
authorJulien Dessaux2024-06-23 15:21:17 +0200
committerJulien Dessaux2024-06-23 15:21:17 +0200
commit399663b7f6aee95b6029dac94238ad2965d4a7b3 (patch)
tree612dddf2a40ac479f65f0c08b059ad4b4e4e710f /2023/18-Lavaduct_Lagoon
parent2023-17 part 2 in haskell (diff)
downloadadvent-of-code-399663b7f6aee95b6029dac94238ad2965d4a7b3.tar.gz
advent-of-code-399663b7f6aee95b6029dac94238ad2965d4a7b3.tar.bz2
advent-of-code-399663b7f6aee95b6029dac94238ad2965d4a7b3.zip
2023-18 part 1 in haskell
Diffstat (limited to '2023/18-Lavaduct_Lagoon')
-rw-r--r--2023/18-Lavaduct_Lagoon/example14
-rw-r--r--2023/18-Lavaduct_Lagoon/first.hs95
-rw-r--r--2023/18-Lavaduct_Lagoon/input712
3 files changed, 821 insertions, 0 deletions
diff --git a/2023/18-Lavaduct_Lagoon/example b/2023/18-Lavaduct_Lagoon/example
new file mode 100644
index 0000000..fc7612e
--- /dev/null
+++ b/2023/18-Lavaduct_Lagoon/example
@@ -0,0 +1,14 @@
+R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)
diff --git a/2023/18-Lavaduct_Lagoon/first.hs b/2023/18-Lavaduct_Lagoon/first.hs
new file mode 100644
index 0000000..0197ccd
--- /dev/null
+++ b/2023/18-Lavaduct_Lagoon/first.hs
@@ -0,0 +1,95 @@
+-- requires cabal install --lib megaparsec parser-combinators heap vector
+module Main (main) where
+
+import Control.Applicative.Permutations
+import Control.Monad (void, when)
+import qualified Data.Char as C
+import Data.Either
+import Data.Functor
+import qualified Data.Heap as H
+import qualified Data.List as L
+import qualified Data.Map as M
+import Data.Maybe
+import qualified Data.Set as S
+import qualified Data.Vector as V
+import qualified Data.Vector.Unboxed as VU
+import Data.Void (Void)
+import Text.Megaparsec
+import Text.Megaparsec.Char
+
+import Debug.Trace
+
+exampleExpectedOutput = 62
+
+data Heading = U | D | L | R deriving (Eq, Show)
+data Line = Line Heading Int String
+type Input = [Line]
+
+type Parser = Parsec Void String
+
+parseHeading :: Parser Heading
+parseHeading = char 'U' $> U
+ <|> char 'D' $> D
+ <|> char 'L' $> L
+ <|> char 'R' $> R
+
+parseLine :: Parser Line
+parseLine = Line <$> parseHeading <* space
+ <*> (read <$> some digitChar) <* space
+ <*> (string "(#" *> some alphaNumChar <* char ')' <* eol)
+
+parseInput' :: Parser Input
+parseInput' = some parseLine <* eof
+
+parseInput :: String -> IO Input
+parseInput filename = do
+ input <- readFile filename
+ case runParser parseInput' filename input of
+ Left bundle -> error $ errorBundlePretty bundle
+ Right input' -> return input'
+
+type Map = M.Map (Int, Int) Bool
+type Plan = (Map, Int, Int)
+
+compute :: Input -> Int
+compute input = xlen * ylen - M.size (M.filter not floodedPit) -- L.foldl' countLine 0 [ymin..ymax]
+ where
+ -- filling
+ (xs, ys) = unzip $ M.keys trenches
+ xmin = minimum xs - 1
+ xmax = maximum xs + 1
+ xlen = xmax - xmin + 1
+ ymin = minimum ys - 1
+ ymax = maximum ys + 1
+ ylen = ymax - ymin + 1
+ floodedPit = flood (xmin, ymin) trenches
+ flood (x, y) m | x < xmin || x > xmax || y < ymin || y > ymax = m
+ | M.member (x, y) m = m
+ | otherwise = flood (x-1, y) $ flood (x+1, y) $ flood (x, y-1) $ flood (x, y+1) $ M.insert (x, y) False m
+ ---- digging
+ (trenches, _, _) = L.foldl' digOne (M.singleton (0, 0) True, 0, 0) input
+ digOne :: Plan-> Line -> Plan
+ digOne (m, x, y) (Line h l _) = (digTrench m h l, x', y')
+ where
+ digTrench :: Map -> Heading -> Int -> Map
+ digTrench m _ (-1) = m
+ digTrench m U i = digTrench (M.insert (x, y-i) True m) U (i - 1)
+ digTrench m D i = digTrench (M.insert (x, y+i) True m) D (i - 1)
+ digTrench m L i = digTrench (M.insert (x-i, y) True m) L (i - 1)
+ digTrench m R i = digTrench (M.insert (x+i, y) True m) R (i - 1)
+ x' | h == U = x
+ | h == D = x
+ | h == L = x - l
+ | h == R = x + l
+ y' | h == U = y - l
+ | h == D = y + l
+ | h == L = y
+ | h == R = y
+
+main :: IO ()
+main = do
+ example <- parseInput "example"
+ let exampleOutput = compute example
+ when (exampleOutput /= exampleExpectedOutput) (error $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput)
+ input <- parseInput "input"
+ print $ compute input
diff --git a/2023/18-Lavaduct_Lagoon/input b/2023/18-Lavaduct_Lagoon/input
new file mode 100644
index 0000000..f882a55
--- /dev/null
+++ b/2023/18-Lavaduct_Lagoon/input
@@ -0,0 +1,712 @@
+L 4 (#38ce32)
+U 3 (#55f513)
+L 6 (#46c2c2)
+U 3 (#2c5aa3)
+R 7 (#3137a2)
+U 4 (#3bc623)
+R 6 (#924a52)
+D 4 (#2880c3)
+R 7 (#924a50)
+U 6 (#639303)
+R 5 (#3137a0)
+U 3 (#6ada33)
+L 6 (#3f9e92)
+U 4 (#2f1fa3)
+R 6 (#471352)
+U 4 (#2fd2a3)
+L 5 (#09d272)
+U 4 (#213a13)
+L 6 (#78b222)
+U 3 (#2fc1a3)
+L 3 (#4cbb52)
+U 3 (#4ac623)
+R 4 (#70efe2)
+U 2 (#5eb1f3)
+R 5 (#70efe0)
+U 3 (#2bf113)
+L 6 (#1882e2)
+U 3 (#3fca23)
+R 4 (#62ba80)
+U 5 (#2c54c3)
+L 4 (#1dee90)
+U 6 (#73a233)
+R 5 (#2c7800)
+U 4 (#4ad3a3)
+L 7 (#4f8940)
+U 3 (#48d041)
+R 7 (#5221c0)
+U 4 (#75a591)
+R 2 (#03ec80)
+U 4 (#2c54c1)
+R 4 (#1bbc10)
+D 4 (#4f1b13)
+R 4 (#7f90f0)
+D 5 (#2752d3)
+R 4 (#1eae30)
+D 3 (#2a9653)
+L 6 (#36eb10)
+D 2 (#2a9651)
+L 2 (#454ad0)
+D 3 (#1557e3)
+R 3 (#7707d0)
+D 4 (#73c6b3)
+R 5 (#295690)
+D 6 (#24a233)
+R 3 (#7bc852)
+U 6 (#15b743)
+R 3 (#224732)
+U 4 (#4a0323)
+R 4 (#810412)
+U 7 (#5fba61)
+L 4 (#1c2ee2)
+U 4 (#6977f3)
+R 4 (#3ff1b0)
+U 6 (#8ee1f3)
+R 4 (#544e00)
+U 4 (#244c23)
+R 2 (#5bc1f0)
+U 4 (#1e5873)
+L 3 (#6420d2)
+U 4 (#836a83)
+R 6 (#6420d0)
+U 3 (#024693)
+L 6 (#0a2540)
+U 4 (#65eda3)
+L 2 (#2649e0)
+U 2 (#195ba3)
+L 4 (#74d120)
+U 3 (#795ca3)
+R 3 (#31c470)
+U 2 (#59afe3)
+R 6 (#873020)
+U 4 (#695263)
+L 9 (#1dc2b0)
+U 3 (#288a33)
+L 4 (#090860)
+D 8 (#00eb93)
+L 4 (#5de760)
+D 2 (#00eb91)
+L 3 (#5ae5c0)
+D 4 (#162813)
+L 3 (#182e50)
+D 5 (#5848f1)
+L 2 (#89c410)
+D 6 (#5848f3)
+L 4 (#549dc0)
+D 4 (#7e5a93)
+L 2 (#5ac572)
+U 4 (#39f613)
+L 4 (#300c42)
+U 3 (#2c94e1)
+R 6 (#68ae32)
+U 7 (#2c94e3)
+L 3 (#289422)
+U 5 (#06ded3)
+L 3 (#025d52)
+U 2 (#1c4373)
+L 5 (#21b252)
+U 4 (#8646d3)
+L 3 (#764a62)
+U 5 (#8646d1)
+L 6 (#6d5762)
+U 6 (#1c4371)
+R 3 (#3c7462)
+U 3 (#041483)
+R 4 (#01cab2)
+U 5 (#784883)
+R 3 (#60f6c2)
+U 6 (#057d73)
+R 2 (#1fb832)
+U 2 (#775953)
+R 4 (#3c9532)
+U 4 (#404733)
+R 7 (#2423b2)
+U 3 (#1eee81)
+R 7 (#797832)
+U 3 (#1eee83)
+R 4 (#220652)
+U 5 (#15f0b3)
+R 3 (#4c0d62)
+D 4 (#2083c3)
+R 4 (#1c5cf2)
+D 3 (#5f0f33)
+R 3 (#5494e2)
+D 5 (#684523)
+R 4 (#1202b2)
+U 9 (#455503)
+R 2 (#15d2a2)
+D 9 (#36e533)
+R 4 (#1c78a0)
+D 3 (#4bcc43)
+R 6 (#4baf50)
+D 3 (#66edf3)
+R 4 (#4baf52)
+D 4 (#222a23)
+L 9 (#1c78a2)
+D 2 (#043003)
+R 9 (#1d0a42)
+D 4 (#1e6941)
+R 5 (#3a6662)
+U 4 (#1df801)
+R 3 (#8b8d92)
+U 7 (#35c951)
+R 4 (#8b8d90)
+U 3 (#4d8771)
+R 3 (#1b5502)
+U 3 (#4a6233)
+R 5 (#71c6c2)
+D 4 (#408383)
+R 5 (#057732)
+U 4 (#076963)
+R 4 (#045692)
+U 6 (#4e80e1)
+R 3 (#5f77d2)
+U 3 (#114573)
+R 2 (#6c4b92)
+U 3 (#114571)
+L 8 (#07cc82)
+U 3 (#4e80e3)
+R 8 (#166fe2)
+U 4 (#924f11)
+R 3 (#496b52)
+U 2 (#912dc3)
+R 3 (#0e9052)
+D 3 (#2e8443)
+R 4 (#572312)
+D 4 (#31d0d3)
+L 5 (#745c00)
+D 5 (#058313)
+R 5 (#2847e0)
+D 3 (#5ba6c3)
+R 7 (#58b860)
+U 4 (#560193)
+R 4 (#5e3d90)
+U 7 (#36d363)
+R 6 (#02d030)
+D 7 (#49d633)
+R 4 (#4e03d2)
+U 4 (#8d4853)
+R 8 (#3b9d12)
+U 4 (#8d4851)
+R 5 (#302542)
+U 6 (#40e003)
+R 7 (#130d32)
+D 4 (#5323d1)
+R 6 (#4ed652)
+D 6 (#5323d3)
+R 4 (#541fd2)
+U 2 (#0f08e3)
+R 3 (#16bd42)
+U 5 (#603191)
+R 6 (#3545f2)
+U 3 (#011651)
+R 4 (#3ecb62)
+U 6 (#963781)
+R 5 (#2c7612)
+D 6 (#509971)
+R 6 (#885a52)
+D 6 (#3b0dd3)
+R 2 (#2afe62)
+D 4 (#1f4e53)
+R 3 (#2c0ab2)
+D 5 (#3be5a3)
+L 3 (#2c0ab0)
+D 4 (#55e5c3)
+L 7 (#2afe60)
+D 4 (#5bf153)
+L 5 (#617782)
+U 4 (#094123)
+L 4 (#5186f2)
+U 4 (#544353)
+L 3 (#40f5c2)
+D 3 (#325493)
+L 6 (#40b782)
+D 5 (#713cc3)
+L 4 (#3fdd60)
+D 8 (#0b87f3)
+L 5 (#41cfe0)
+D 3 (#340bf3)
+L 2 (#718d12)
+D 7 (#6a0d63)
+R 6 (#88f440)
+U 3 (#612011)
+R 2 (#4eb270)
+U 4 (#6f7821)
+R 5 (#077c50)
+U 6 (#209901)
+R 4 (#1eeaa0)
+D 3 (#1176f1)
+R 2 (#2b79f0)
+D 5 (#6cd941)
+R 5 (#72d3a0)
+D 3 (#25a453)
+R 3 (#09e140)
+D 3 (#7944e3)
+R 4 (#071320)
+U 9 (#540d61)
+R 2 (#63bb30)
+U 5 (#317753)
+R 3 (#5a9e00)
+D 5 (#056963)
+R 3 (#385080)
+D 3 (#75cda3)
+R 2 (#331280)
+D 7 (#23db43)
+R 2 (#11d3e2)
+D 3 (#2f8123)
+R 4 (#77eef2)
+D 3 (#2f8121)
+R 4 (#3c3e32)
+D 5 (#541c03)
+R 6 (#531fb0)
+D 3 (#43a463)
+R 3 (#2a8950)
+D 6 (#2a8193)
+R 3 (#078660)
+D 3 (#668ce3)
+R 3 (#640a50)
+D 3 (#64e5a3)
+R 5 (#961a02)
+D 6 (#492053)
+R 4 (#4d71d0)
+D 3 (#48f563)
+R 4 (#14d310)
+D 5 (#48f561)
+R 5 (#53be70)
+U 5 (#195313)
+R 3 (#0b2550)
+U 2 (#5fde13)
+R 2 (#7dbeb0)
+U 4 (#5fde11)
+R 6 (#145d90)
+U 4 (#34b771)
+R 6 (#834300)
+U 3 (#34b773)
+L 6 (#0387d0)
+U 4 (#469471)
+R 6 (#9406f0)
+U 6 (#469473)
+R 3 (#2a4d50)
+D 5 (#037633)
+R 7 (#14d340)
+D 6 (#11daf1)
+R 7 (#337f90)
+D 4 (#526051)
+R 4 (#757a30)
+D 8 (#643b43)
+R 3 (#1185a0)
+D 6 (#07f453)
+R 3 (#621c50)
+D 2 (#07f451)
+R 3 (#30dcf0)
+D 4 (#0a7101)
+L 4 (#08b2b0)
+D 3 (#0c9b51)
+L 2 (#1c5e10)
+D 7 (#6bf7c1)
+L 4 (#5702a0)
+D 2 (#6bf7c3)
+L 8 (#2d1240)
+D 5 (#5cf4e1)
+L 6 (#14c4d2)
+D 4 (#98b1f1)
+L 3 (#4b01e2)
+D 8 (#2711a1)
+L 2 (#4dca52)
+U 8 (#41b261)
+L 3 (#114f32)
+U 5 (#842761)
+L 6 (#3f4122)
+U 4 (#842763)
+L 3 (#4d3102)
+D 3 (#41b263)
+L 2 (#1118e2)
+D 5 (#59cc03)
+L 8 (#8b9742)
+D 2 (#65f793)
+R 8 (#328982)
+D 4 (#85c501)
+L 3 (#441702)
+D 5 (#0a1f51)
+L 8 (#2ccc92)
+D 3 (#52f541)
+L 6 (#5dfc42)
+D 5 (#52f543)
+L 4 (#1d83f2)
+D 6 (#5eeab1)
+R 4 (#4634e0)
+D 4 (#968ca1)
+L 3 (#437e40)
+D 7 (#968ca3)
+L 3 (#62b0a0)
+D 5 (#38aa71)
+L 5 (#3c8e22)
+U 5 (#7bb931)
+L 6 (#172202)
+U 3 (#809981)
+L 5 (#172200)
+D 4 (#0b1ac1)
+L 2 (#3c8e20)
+D 4 (#1d0d71)
+L 6 (#82ea50)
+D 2 (#373bd1)
+L 2 (#1ec200)
+D 7 (#471d01)
+R 6 (#3b6472)
+D 4 (#0273b3)
+R 3 (#2b4df2)
+D 2 (#0273b1)
+R 7 (#3af9f2)
+D 4 (#432781)
+R 6 (#161170)
+D 3 (#682741)
+L 6 (#5aee90)
+D 4 (#574c13)
+L 4 (#4c3770)
+D 2 (#5eadb3)
+R 4 (#3b4a30)
+D 5 (#5eadb1)
+L 3 (#4700c0)
+D 5 (#574c11)
+L 5 (#4569e0)
+D 5 (#250471)
+L 5 (#014740)
+D 4 (#61e5f1)
+L 3 (#772650)
+D 3 (#1e6f21)
+R 3 (#1d3220)
+D 6 (#430041)
+R 2 (#608810)
+D 6 (#341ae3)
+R 4 (#5bd730)
+U 6 (#3132d3)
+R 2 (#3fab42)
+U 6 (#90b273)
+R 4 (#3fab40)
+D 7 (#263173)
+R 4 (#5bd732)
+D 5 (#423813)
+R 5 (#6ba250)
+D 2 (#773ab1)
+R 5 (#37ed60)
+D 4 (#048871)
+L 10 (#4de780)
+D 3 (#185e81)
+R 3 (#40d660)
+D 6 (#5dd3d3)
+L 7 (#4d2210)
+U 3 (#364dd3)
+L 4 (#2208a0)
+U 7 (#13db53)
+L 4 (#1ff800)
+D 3 (#74fa63)
+L 8 (#5405c0)
+D 6 (#7a2ee3)
+L 2 (#4ac3c0)
+D 3 (#30c2e3)
+L 2 (#15a070)
+D 6 (#0cac13)
+L 5 (#495b10)
+U 8 (#8c3253)
+L 3 (#495b12)
+U 2 (#2b5c03)
+L 5 (#1bbdb0)
+U 8 (#203f53)
+L 3 (#57a1e2)
+U 3 (#5032f3)
+L 4 (#57a1e0)
+U 6 (#327c63)
+R 4 (#50a820)
+U 4 (#2b3343)
+L 3 (#7014d0)
+U 4 (#12bef3)
+L 3 (#656f40)
+U 4 (#2dc663)
+L 6 (#113020)
+U 4 (#3a26d3)
+L 5 (#133f60)
+U 8 (#024a51)
+L 2 (#584c70)
+U 3 (#024a53)
+L 4 (#364750)
+U 4 (#3a26d1)
+L 3 (#023e50)
+U 6 (#07ffd3)
+R 6 (#6a4610)
+U 3 (#0a1a53)
+R 4 (#1d5f72)
+U 4 (#3dc7a3)
+L 10 (#43bdc0)
+U 3 (#2c8853)
+L 8 (#43bdc2)
+U 6 (#646bb3)
+R 6 (#1d5f70)
+U 7 (#2d4373)
+R 3 (#8264e0)
+U 5 (#35f151)
+R 4 (#2b1760)
+U 4 (#999c03)
+R 3 (#4175f0)
+D 8 (#999c01)
+R 5 (#3c0e70)
+D 2 (#32a5e1)
+R 3 (#1b64a0)
+D 6 (#261bc1)
+R 3 (#0b6c22)
+U 2 (#2d3081)
+R 4 (#72b8a2)
+U 4 (#236cb1)
+R 6 (#45dba2)
+U 4 (#209921)
+L 6 (#128470)
+U 6 (#4d6b01)
+L 2 (#190550)
+U 3 (#40f381)
+L 7 (#804a40)
+U 4 (#1accd1)
+L 4 (#5d9a40)
+U 2 (#042311)
+L 6 (#1fa392)
+U 3 (#3b7471)
+L 3 (#565ac2)
+U 5 (#3b7473)
+L 7 (#4c7822)
+U 7 (#47ab31)
+L 3 (#184fa2)
+U 7 (#417391)
+L 4 (#4cffd2)
+U 3 (#3bf361)
+L 3 (#84fdd0)
+D 7 (#178953)
+L 2 (#5ddab0)
+D 3 (#178951)
+L 5 (#44ed60)
+D 5 (#6eb101)
+L 3 (#455aa0)
+U 4 (#231db1)
+L 8 (#2511b0)
+U 4 (#886b31)
+R 4 (#2511b2)
+U 3 (#36b861)
+R 4 (#421320)
+U 4 (#267471)
+L 3 (#43b980)
+U 3 (#214141)
+R 3 (#2491c0)
+U 2 (#214143)
+R 7 (#4ae330)
+U 3 (#4c5d41)
+R 8 (#1897d0)
+D 5 (#39eba1)
+R 5 (#6c3442)
+D 7 (#439aa1)
+R 4 (#652a42)
+U 7 (#5437e1)
+R 3 (#3c7ae2)
+U 6 (#3653c1)
+L 5 (#6b4d52)
+U 4 (#5cb7f1)
+L 3 (#073a02)
+U 5 (#360581)
+L 3 (#6d9fd2)
+U 7 (#7901a1)
+L 2 (#123b32)
+U 3 (#4b1f83)
+L 4 (#2d6582)
+U 10 (#342933)
+R 4 (#538792)
+U 5 (#263fd3)
+L 5 (#0a3c42)
+D 2 (#433c41)
+L 3 (#4c3042)
+D 5 (#35f621)
+L 6 (#42f670)
+D 6 (#466371)
+R 6 (#42f672)
+D 7 (#6248a1)
+L 2 (#670152)
+D 5 (#90e203)
+L 5 (#4495b2)
+U 4 (#90fc73)
+L 2 (#5707b2)
+U 8 (#4c76e1)
+L 4 (#540512)
+U 3 (#492111)
+R 4 (#540510)
+U 6 (#0ff091)
+L 4 (#2b4272)
+U 5 (#05b161)
+L 3 (#7483e2)
+D 6 (#6b3f11)
+L 3 (#480342)
+D 6 (#307111)
+L 5 (#0f29d2)
+D 6 (#019f91)
+L 6 (#342822)
+D 4 (#180cb1)
+R 8 (#00f720)
+D 4 (#31b091)
+L 8 (#2f1380)
+D 3 (#4ab461)
+L 6 (#2194c0)
+U 5 (#6bee03)
+L 5 (#65f3b0)
+U 8 (#1076f3)
+L 3 (#1c34c0)
+U 3 (#1151c1)
+R 6 (#0bed40)
+U 3 (#3db921)
+L 4 (#4e4190)
+U 2 (#674151)
+L 2 (#2f95c0)
+U 8 (#097d01)
+L 3 (#4f5a20)
+D 2 (#69a8c1)
+L 2 (#04b560)
+D 3 (#2ca343)
+L 4 (#70ccd0)
+D 5 (#6c7323)
+R 4 (#377f50)
+D 4 (#3ae061)
+L 2 (#5883f0)
+D 6 (#5e3601)
+L 2 (#27eb00)
+D 7 (#6fffc3)
+L 4 (#06e992)
+D 4 (#43dee3)
+L 4 (#06e990)
+D 4 (#759353)
+L 6 (#7da150)
+D 5 (#5f0761)
+R 5 (#0ec360)
+D 3 (#4b82f1)
+R 3 (#400b40)
+D 3 (#72f301)
+R 4 (#288900)
+D 3 (#4b0f11)
+R 8 (#288902)
+D 4 (#471d21)
+L 8 (#708912)
+D 4 (#2264e1)
+R 4 (#708910)
+D 6 (#3c2e31)
+R 2 (#23e370)
+D 2 (#6e40f1)
+R 4 (#2ccbc0)
+U 9 (#51a4c1)
+R 4 (#1e2560)
+D 9 (#1dafa1)
+R 3 (#44ac70)
+D 5 (#028461)
+R 9 (#3d9be0)
+D 4 (#929d31)
+L 6 (#5e7b02)
+D 6 (#559df1)
+L 8 (#5e7b00)
+D 4 (#48ec01)
+L 5 (#93cfe2)
+D 8 (#1cafe1)
+L 4 (#0459f2)
+U 8 (#724081)
+L 4 (#47c962)
+D 4 (#5e74e1)
+L 3 (#495f80)
+D 5 (#7299e1)
+L 5 (#495f82)
+D 5 (#045f61)
+R 7 (#47c960)
+D 3 (#2335f1)
+R 6 (#499fd2)
+D 6 (#43b841)
+R 6 (#031222)
+D 6 (#48f681)
+L 5 (#727da2)
+D 4 (#41d7e1)
+R 5 (#113942)
+D 5 (#03ee33)
+R 4 (#0350c2)
+D 2 (#4727a3)
+R 4 (#148620)
+D 4 (#33d453)
+R 8 (#148622)
+D 3 (#210703)
+L 3 (#1c3d42)
+D 3 (#19c743)
+L 7 (#3991b2)
+D 4 (#4fb431)
+L 3 (#0563c2)
+D 4 (#6a0431)
+L 5 (#592952)
+D 6 (#0898b1)
+L 4 (#1f2f32)
+D 6 (#42ac11)
+L 3 (#045bb2)
+D 5 (#62d0c1)
+L 6 (#84e602)
+D 2 (#68e891)
+L 6 (#2c8512)
+D 5 (#16e5c1)
+L 5 (#2dc202)
+U 3 (#08e561)
+L 2 (#1d84c0)
+U 8 (#64b671)
+L 4 (#1d84c2)
+U 3 (#2d4741)
+L 4 (#5342c2)
+D 3 (#012ce1)
+L 6 (#229ca2)
+D 3 (#5d0f51)
+L 2 (#6f27a2)
+D 5 (#3102b1)
+L 2 (#39f292)
+D 3 (#0e1d31)
+L 4 (#1fe602)
+U 6 (#1fbbb1)
+L 6 (#001c52)
+U 3 (#880b71)
+L 4 (#001c50)
+U 7 (#12db41)
+L 2 (#2d7072)
+U 3 (#941843)
+R 8 (#255d72)
+U 3 (#0ac063)
+L 5 (#481670)
+U 4 (#7f2aa3)
+L 5 (#481672)
+U 3 (#379e93)
+L 4 (#255d70)
+U 5 (#025ca3)
+R 3 (#958792)
+U 2 (#258701)
+R 5 (#32e690)
+D 4 (#6c9431)
+R 2 (#32e692)
+U 4 (#850cf1)
+R 4 (#1f6942)
+U 4 (#8dc581)
+L 8 (#5949e2)
+U 3 (#62cf01)
+R 3 (#930cf2)
+U 2 (#014781)
+R 5 (#39d8b2)
+U 4 (#9a50e1)
+R 2 (#4e2032)
+D 4 (#1129e1)
+R 4 (#68c522)
+U 5 (#030c91)
+R 6 (#46e632)
+U 3 (#54c0c1)
+R 3 (#1104c2)
+U 6 (#3b3a11)
+L 7 (#72ea42)
+U 7 (#5eaf41)
+L 3 (#140192)
+D 4 (#05dbd1)
+L 2 (#507802)
+D 2 (#05dbd3)
+L 7 (#732442)
+U 6 (#144931)
+L 4 (#2e2f92)
+U 7 (#29bd33)
+L 4 (#1b1ca2)
+U 4 (#89f183)