From 399663b7f6aee95b6029dac94238ad2965d4a7b3 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 23 Jun 2024 15:21:17 +0200 Subject: 2023-18 part 1 in haskell --- 2023/18-Lavaduct_Lagoon/example | 14 + 2023/18-Lavaduct_Lagoon/first.hs | 95 ++++++ 2023/18-Lavaduct_Lagoon/input | 712 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 821 insertions(+) create mode 100644 2023/18-Lavaduct_Lagoon/example create mode 100644 2023/18-Lavaduct_Lagoon/first.hs create mode 100644 2023/18-Lavaduct_Lagoon/input (limited to '2023/18-Lavaduct_Lagoon') 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) -- cgit v1.2.3