Done day 9 part 1
authorNeil Smith <NeilNjae@users.noreply.github.com>
Sat, 10 Dec 2022 17:20:09 +0000 (19:20 +0200)
committerNeil Smith <NeilNjae@users.noreply.github.com>
Sat, 10 Dec 2022 17:20:09 +0000 (19:20 +0200)
advent-of-code22.cabal
advent09/Main.hs [new file with mode: 0644]
data/advent09.txt [new file with mode: 0644]
data/advent09a.txt [new file with mode: 0644]

index 0f7e6b55d2154da02b3b9a466ab48e78592feb3f..1e73cd1e300303a1207c2ac4016e55296372a2ba 100644 (file)
@@ -140,4 +140,8 @@ executable advent07
 executable advent08
   import: common-extensions, build-directives
   main-is: advent08/Main.hs
-  -- build-depends: text, attoparsec, containers, path-tree, rosezipper
+
+executable advent09
+  import: common-extensions, build-directives
+  main-is: advent09/Main.hs
+  build-depends: text, attoparsec, containers, linear, lens
diff --git a/advent09/Main.hs b/advent09/Main.hs
new file mode 100644 (file)
index 0000000..0f7714d
--- /dev/null
@@ -0,0 +1,90 @@
+-- Writeup at https://work.njae.me.uk/2022/12/04/advent-of-code-2022-day-4/
+
+import AoC
+import Data.Text (Text)
+import qualified Data.Text.IO as TIO
+import Data.Attoparsec.Text hiding (take, D)
+import Control.Applicative
+import Data.List
+import qualified Data.Set as S
+import Linear hiding (Trace, trace, distance)
+import Control.Lens
+
+type Position = V2 Int
+type Trace = S.Set Position
+type Path = [Position]
+
+data Rope = Rope 
+  { _headR :: Position
+  , _tailR :: Position
+  , _trace :: Trace
+  } deriving (Show, Eq)
+makeLenses ''Rope
+
+data Direction = U Int | R Int | D Int | L Int
+  deriving (Show, Eq, Ord)
+
+main :: IO ()
+main = 
+  do  dataFileName <- getDataFileName
+      text <- TIO.readFile dataFileName
+      let path = successfulParse text
+      let steps = expandPath path
+      print $ part1 steps
+
+part1 :: Path -> Int
+part1 steps = S.size $ rope' ^. trace
+  where rope' = ropeSteps newRope steps
+
+expandPath :: [Direction] -> Path
+expandPath = concatMap expandStep
+  where expandStep (U n) = replicate n (V2  0  1)
+        expandStep (L n) = replicate n (V2 -1  0)
+        expandStep (D n) = replicate n (V2  0 -1)
+        expandStep (R n) = replicate n (V2  1  0)
+
+
+manhattan :: Position -> Position -> Int
+manhattan p1 p2 = max dx dy
+  where V2 dx dy = abs $ p1 ^-^ p2
+
+touching :: Position -> Position -> Bool
+touching p1 p2 =  (manhattan p1 p2) <= 1
+
+towards :: Position -> Position -> Position
+towards p1 p2 = signum $ p2 ^-^ p1
+
+newRope :: Rope
+newRope = Rope { _headR = V2 0 0, _tailR = V2 0 0, _trace = S.singleton (V2 0 0) }
+
+ropeSteps :: Rope -> Path -> Rope
+ropeSteps rope steps = foldl' ropeStep rope steps
+
+ropeStep :: Rope -> Position -> Rope
+ropeStep rope step = rope & headR .~ hr 
+                          & tailR .~ tailR'
+                          & trace %~ S.insert tailR'
+  where hr = (rope ^. headR) ^+^ step
+        tr = rope ^. tailR
+        tailR' = if tr `touching` hr
+                 then rope ^. tailR
+                 else tr ^+^ (tr `towards` hr)
+
+-- Parse the input file
+
+pathP :: Parser [Direction]
+directionP, upP, leftP, downP, rightP :: Parser Direction
+
+pathP = directionP `sepBy` endOfLine
+directionP = upP <|> leftP <|> downP <|> rightP
+upP    = U <$> ("U " *> decimal)
+leftP  = L <$> ("L " *> decimal)
+downP  = D <$> ("D " *> decimal)
+rightP = R <$> ("R " *> decimal)
+
+
+successfulParse :: Text -> [Direction]
+successfulParse input = 
+  case parseOnly pathP input of
+    Left  _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
+    Right path -> path
diff --git a/data/advent09.txt b/data/advent09.txt
new file mode 100644 (file)
index 0000000..31b7fd1
--- /dev/null
@@ -0,0 +1,2000 @@
+R 2
+D 2
+U 2
+D 1
+L 1
+D 2
+R 2
+L 2
+R 1
+D 2
+L 1
+U 2
+R 1
+D 1
+R 1
+L 1
+D 1
+R 2
+U 2
+L 2
+R 2
+U 2
+R 1
+L 1
+D 2
+R 1
+D 1
+R 1
+D 1
+R 1
+L 2
+R 1
+D 1
+L 1
+U 2
+L 1
+D 1
+L 1
+R 1
+U 2
+D 1
+U 2
+L 2
+R 2
+D 1
+L 1
+R 1
+D 1
+L 1
+U 1
+R 2
+D 1
+R 1
+D 2
+L 1
+D 2
+L 1
+D 2
+R 1
+L 1
+D 2
+L 1
+R 1
+D 2
+L 2
+R 2
+L 1
+U 2
+R 1
+U 2
+R 2
+U 1
+D 1
+U 2
+L 1
+D 2
+L 2
+R 2
+L 1
+R 1
+U 2
+D 1
+R 1
+L 2
+U 1
+D 2
+U 1
+L 2
+R 2
+D 1
+U 1
+L 2
+U 2
+L 1
+R 1
+D 1
+R 2
+D 1
+R 1
+D 2
+R 1
+D 1
+R 1
+D 2
+L 2
+U 2
+L 1
+D 1
+L 1
+R 2
+U 1
+D 1
+U 2
+L 2
+D 3
+L 3
+U 3
+R 1
+D 3
+R 1
+D 3
+R 2
+D 2
+U 3
+D 2
+L 3
+R 3
+U 3
+R 1
+U 3
+D 3
+L 1
+D 2
+U 1
+R 2
+L 2
+R 3
+L 2
+D 3
+L 2
+R 1
+D 1
+U 1
+D 2
+R 2
+L 1
+U 1
+R 3
+U 2
+D 3
+L 3
+U 2
+L 3
+R 2
+D 2
+U 2
+R 1
+U 3
+R 2
+D 1
+U 2
+D 3
+U 2
+R 3
+U 2
+L 3
+U 3
+D 2
+R 3
+U 3
+L 3
+U 2
+L 1
+D 3
+L 2
+D 3
+R 3
+L 2
+R 3
+D 1
+U 1
+L 3
+R 3
+D 2
+L 3
+U 2
+R 2
+U 1
+R 3
+D 3
+R 1
+U 2
+L 2
+U 1
+R 1
+U 1
+D 2
+L 2
+R 1
+D 3
+R 1
+D 3
+U 1
+R 2
+U 2
+L 2
+U 2
+L 3
+D 3
+U 2
+L 3
+U 1
+L 2
+D 1
+U 3
+L 2
+R 3
+D 1
+R 3
+L 3
+U 1
+L 3
+R 2
+D 3
+U 3
+L 3
+D 4
+L 1
+U 1
+R 3
+L 1
+D 4
+U 4
+L 4
+D 4
+U 1
+D 3
+R 1
+D 4
+L 1
+U 2
+D 1
+R 3
+L 4
+D 2
+U 2
+R 1
+L 4
+U 4
+R 4
+D 1
+R 3
+D 1
+R 4
+U 4
+D 1
+U 3
+D 4
+L 3
+R 2
+D 4
+L 2
+U 4
+D 3
+U 4
+D 2
+U 2
+L 3
+R 4
+L 4
+U 2
+L 1
+U 4
+D 4
+R 4
+U 4
+R 2
+U 4
+R 1
+U 3
+R 3
+U 4
+R 4
+U 2
+L 1
+U 3
+D 4
+L 1
+R 1
+L 2
+R 2
+D 2
+U 3
+R 3
+L 1
+D 2
+R 4
+D 1
+R 4
+L 2
+U 4
+D 2
+R 4
+U 2
+D 4
+R 1
+U 3
+L 3
+D 2
+R 2
+U 1
+L 4
+R 1
+U 2
+R 4
+D 3
+R 1
+L 2
+U 1
+R 2
+L 2
+U 2
+R 3
+L 2
+D 4
+U 4
+L 1
+U 2
+D 1
+U 2
+D 1
+L 2
+R 4
+L 5
+D 2
+U 5
+L 1
+R 2
+L 3
+U 3
+D 3
+L 1
+D 1
+U 4
+L 4
+U 3
+D 5
+R 1
+L 4
+U 1
+L 2
+R 4
+D 1
+L 4
+D 1
+U 4
+D 1
+L 2
+D 5
+L 5
+D 4
+R 3
+U 2
+L 4
+U 4
+L 4
+R 5
+D 1
+L 2
+R 5
+U 4
+D 5
+L 2
+U 4
+D 1
+L 3
+R 5
+D 4
+L 1
+D 3
+L 3
+U 2
+R 2
+D 4
+L 4
+U 1
+D 2
+L 5
+D 2
+L 2
+U 3
+R 3
+U 3
+D 2
+U 4
+R 3
+L 3
+D 2
+L 2
+R 3
+D 2
+L 3
+R 4
+U 4
+R 4
+D 2
+R 1
+D 1
+L 4
+R 4
+D 3
+R 2
+U 4
+L 2
+D 3
+U 4
+L 3
+R 5
+L 2
+R 1
+D 4
+L 5
+D 2
+U 5
+L 4
+U 2
+R 3
+L 4
+R 1
+U 3
+R 3
+L 2
+U 2
+L 3
+R 5
+L 3
+R 3
+U 3
+L 3
+U 5
+D 4
+U 5
+D 4
+L 4
+D 2
+R 5
+L 3
+U 2
+D 3
+L 4
+R 1
+D 1
+R 5
+L 3
+R 2
+L 3
+U 3
+D 1
+U 5
+R 2
+L 2
+D 5
+R 3
+U 4
+R 3
+L 1
+R 6
+L 4
+D 4
+U 4
+R 4
+U 2
+R 4
+D 1
+U 3
+R 1
+U 5
+D 3
+L 4
+R 5
+L 3
+U 6
+L 5
+D 3
+R 1
+D 2
+U 5
+L 1
+R 5
+U 4
+R 1
+U 1
+R 3
+L 2
+D 5
+U 4
+L 1
+U 2
+R 3
+L 5
+R 2
+D 3
+U 3
+D 6
+R 1
+D 2
+L 3
+R 3
+L 3
+U 4
+R 4
+U 4
+R 6
+U 1
+L 6
+R 6
+L 4
+U 6
+L 2
+D 1
+R 5
+L 5
+U 3
+D 6
+U 5
+L 4
+U 2
+R 1
+L 3
+D 6
+U 5
+R 4
+U 2
+D 3
+R 4
+L 1
+D 4
+U 6
+R 1
+D 6
+U 2
+D 5
+U 4
+L 4
+R 6
+D 2
+R 6
+L 1
+R 3
+D 4
+R 5
+L 6
+U 5
+L 3
+R 6
+U 1
+L 3
+D 7
+U 2
+D 5
+R 5
+D 7
+R 6
+D 6
+R 7
+D 7
+L 3
+R 4
+L 1
+U 6
+R 2
+L 7
+U 7
+D 1
+R 1
+D 1
+U 5
+R 4
+U 2
+D 5
+U 6
+L 2
+R 1
+U 5
+L 1
+U 7
+R 1
+D 2
+L 4
+D 4
+L 5
+U 4
+L 2
+D 5
+R 7
+D 7
+R 5
+L 3
+U 7
+R 7
+D 1
+L 2
+U 3
+L 2
+U 7
+L 2
+U 3
+L 6
+D 6
+L 2
+D 6
+L 6
+U 3
+L 3
+U 7
+D 3
+L 4
+U 5
+D 5
+L 4
+D 7
+U 3
+R 7
+D 5
+R 3
+L 6
+U 2
+L 2
+U 1
+L 1
+U 4
+D 7
+L 7
+D 2
+U 6
+L 2
+U 2
+L 4
+R 3
+L 6
+R 2
+D 7
+L 6
+D 3
+L 6
+R 1
+U 4
+R 6
+L 7
+D 7
+R 4
+U 7
+L 6
+R 3
+D 1
+U 3
+D 2
+U 3
+R 2
+L 7
+U 1
+R 4
+D 4
+U 2
+R 5
+D 5
+R 4
+L 3
+U 1
+R 7
+L 5
+D 4
+L 3
+D 7
+U 2
+D 4
+U 4
+L 1
+D 4
+R 7
+L 6
+U 3
+L 4
+D 5
+U 1
+D 1
+L 6
+R 7
+D 1
+L 4
+D 1
+L 5
+R 8
+D 4
+L 8
+R 4
+D 4
+U 3
+L 5
+R 5
+L 8
+U 4
+R 2
+D 6
+R 5
+L 1
+U 8
+L 1
+D 5
+U 5
+D 4
+L 6
+U 6
+D 8
+R 6
+D 3
+U 7
+R 8
+D 7
+L 2
+U 4
+D 4
+L 2
+R 2
+U 5
+L 4
+R 3
+L 2
+U 5
+D 8
+L 8
+D 3
+U 4
+D 2
+L 2
+U 4
+R 5
+L 6
+U 4
+R 5
+U 4
+L 7
+D 8
+R 8
+D 7
+R 5
+D 6
+U 2
+R 1
+D 3
+L 6
+U 3
+D 5
+U 6
+L 7
+R 1
+L 4
+R 4
+L 4
+R 3
+L 4
+U 3
+D 7
+U 8
+D 4
+R 6
+L 7
+R 2
+L 2
+U 7
+D 2
+R 1
+D 5
+U 1
+D 7
+R 2
+L 8
+R 8
+U 4
+R 9
+L 4
+R 5
+L 2
+D 6
+L 9
+U 2
+R 5
+D 4
+R 9
+U 4
+D 8
+R 9
+U 5
+D 4
+U 4
+L 4
+U 3
+R 5
+L 8
+D 9
+U 2
+L 8
+U 5
+D 4
+L 1
+D 4
+U 3
+D 7
+U 5
+D 5
+R 9
+L 2
+D 5
+L 7
+D 1
+L 2
+R 6
+D 9
+U 1
+L 6
+R 2
+D 2
+R 5
+D 8
+R 2
+D 3
+L 4
+D 5
+R 2
+D 8
+L 3
+D 6
+U 2
+L 4
+D 9
+L 6
+R 5
+L 7
+U 2
+D 8
+U 5
+L 6
+U 1
+L 9
+R 9
+D 1
+R 3
+U 9
+L 2
+U 8
+R 8
+D 8
+R 7
+U 7
+R 6
+L 2
+U 4
+D 2
+L 4
+U 4
+D 2
+R 8
+L 6
+R 9
+D 9
+L 6
+D 4
+L 5
+U 8
+D 2
+R 6
+D 7
+U 3
+R 6
+L 9
+U 6
+L 8
+U 8
+D 6
+U 9
+D 5
+U 8
+L 6
+R 6
+L 6
+R 9
+L 2
+U 4
+L 4
+U 1
+D 4
+R 1
+U 7
+D 5
+R 4
+U 4
+D 5
+L 9
+R 2
+U 5
+L 2
+R 10
+L 5
+R 1
+L 2
+U 3
+D 2
+R 7
+L 2
+R 6
+L 3
+R 6
+U 7
+L 1
+U 6
+R 6
+U 2
+L 3
+R 3
+L 1
+R 9
+L 5
+U 9
+L 9
+D 9
+U 4
+D 2
+R 6
+D 6
+R 8
+D 2
+U 6
+L 5
+R 2
+U 10
+L 3
+D 6
+R 3
+D 6
+U 2
+D 7
+R 1
+U 7
+D 2
+R 8
+L 5
+U 4
+L 5
+R 6
+U 6
+D 1
+L 5
+D 5
+R 5
+D 4
+L 5
+U 3
+R 4
+L 5
+R 2
+L 5
+D 10
+R 4
+L 2
+R 4
+L 7
+U 9
+R 3
+D 6
+R 7
+L 10
+D 7
+U 4
+L 9
+D 6
+L 7
+R 3
+U 7
+R 5
+U 6
+L 1
+U 2
+L 5
+D 6
+R 8
+L 7
+R 7
+D 1
+U 9
+R 1
+L 4
+U 4
+R 1
+L 3
+D 2
+L 8
+D 10
+L 9
+D 8
+R 5
+D 6
+L 7
+D 2
+U 11
+D 2
+U 6
+L 3
+U 8
+D 11
+U 9
+D 9
+R 11
+U 11
+L 8
+U 11
+R 11
+U 2
+D 6
+R 11
+D 7
+L 6
+U 5
+R 1
+L 3
+D 11
+U 3
+D 5
+R 4
+U 4
+D 8
+L 6
+U 1
+R 10
+L 5
+D 3
+U 8
+R 7
+L 8
+R 2
+U 6
+D 9
+R 1
+D 1
+R 3
+U 3
+L 10
+U 7
+R 1
+D 3
+U 6
+L 10
+R 6
+L 6
+R 4
+L 2
+R 10
+L 11
+U 5
+R 5
+U 5
+R 2
+D 10
+L 8
+U 9
+D 11
+R 10
+D 11
+R 11
+D 2
+U 7
+R 11
+U 2
+L 9
+R 11
+U 1
+R 8
+L 5
+U 6
+D 5
+L 10
+U 1
+L 4
+R 7
+L 5
+D 2
+R 9
+D 10
+U 4
+R 1
+D 7
+R 10
+D 10
+L 5
+R 3
+L 8
+R 8
+U 10
+R 9
+D 11
+R 1
+D 9
+R 5
+L 3
+D 5
+L 8
+U 8
+R 10
+D 10
+U 1
+D 3
+R 6
+U 1
+L 2
+U 6
+L 7
+R 11
+U 2
+R 2
+L 5
+U 5
+R 2
+D 12
+U 3
+L 2
+D 5
+U 3
+R 11
+D 5
+R 10
+U 8
+L 7
+R 6
+D 2
+U 11
+L 10
+R 12
+D 8
+U 12
+L 7
+D 5
+R 11
+U 10
+R 12
+U 1
+L 1
+U 10
+L 2
+R 9
+U 1
+R 4
+U 2
+R 8
+D 1
+R 2
+L 3
+R 7
+D 7
+L 10
+R 2
+U 11
+R 8
+U 11
+D 12
+U 8
+L 5
+U 12
+L 12
+U 12
+L 7
+R 5
+D 4
+U 9
+L 5
+R 7
+L 10
+R 4
+L 11
+D 3
+R 1
+D 12
+U 10
+R 10
+D 5
+R 11
+U 2
+L 8
+R 4
+D 1
+L 10
+R 2
+D 11
+L 4
+U 12
+D 11
+L 11
+U 3
+L 9
+U 8
+D 8
+R 10
+L 8
+U 2
+D 9
+U 12
+D 7
+U 8
+L 8
+D 9
+L 6
+U 8
+D 11
+U 12
+D 9
+L 1
+D 4
+R 2
+U 10
+D 2
+L 10
+U 6
+L 9
+D 4
+U 4
+R 4
+L 5
+R 9
+U 2
+R 5
+U 4
+D 12
+R 3
+L 10
+U 7
+D 1
+U 9
+R 6
+L 4
+U 9
+L 13
+D 2
+L 8
+R 12
+D 7
+U 13
+D 6
+U 12
+L 4
+R 4
+D 10
+U 8
+L 4
+R 4
+D 2
+U 9
+L 9
+D 11
+L 6
+R 2
+L 8
+R 9
+L 6
+U 13
+R 10
+D 3
+U 10
+L 12
+R 9
+U 12
+R 10
+U 10
+D 11
+L 7
+R 5
+L 13
+U 11
+R 13
+U 11
+R 12
+U 8
+R 12
+D 4
+L 10
+R 1
+L 9
+R 13
+L 2
+U 7
+L 13
+R 4
+U 13
+L 6
+R 12
+D 1
+U 7
+L 10
+R 6
+D 6
+U 2
+R 2
+L 8
+D 5
+U 9
+D 5
+L 9
+R 1
+U 5
+L 13
+D 1
+R 5
+L 8
+U 5
+R 2
+U 8
+L 1
+U 13
+R 6
+U 12
+L 3
+D 1
+U 4
+L 12
+R 1
+D 6
+L 11
+U 7
+D 1
+L 9
+R 4
+U 7
+D 7
+U 9
+D 1
+L 10
+D 14
+U 3
+D 9
+L 7
+U 1
+L 9
+R 13
+L 14
+R 11
+D 8
+L 12
+U 11
+R 11
+U 9
+R 2
+U 13
+R 5
+D 3
+U 3
+R 9
+D 14
+U 2
+D 8
+L 7
+D 2
+U 8
+L 12
+U 7
+D 12
+R 11
+D 14
+R 13
+L 13
+R 9
+L 7
+U 4
+D 9
+U 9
+L 12
+U 3
+D 4
+R 5
+D 14
+L 9
+D 14
+U 3
+L 8
+R 1
+U 2
+R 14
+D 5
+L 6
+R 9
+D 12
+R 3
+D 1
+L 8
+U 11
+D 11
+L 7
+R 14
+D 9
+L 9
+R 13
+L 4
+D 11
+R 14
+U 6
+L 10
+R 7
+D 9
+U 7
+D 5
+R 8
+U 2
+R 9
+D 6
+R 13
+U 1
+L 14
+R 6
+L 9
+D 11
+L 3
+U 5
+R 12
+U 8
+L 3
+D 5
+U 7
+R 2
+D 14
+R 14
+L 2
+U 5
+L 11
+U 7
+L 14
+U 5
+D 6
+R 14
+D 12
+U 4
+D 5
+R 14
+L 14
+D 12
+L 10
+D 2
+L 1
+R 5
+D 8
+R 2
+L 14
+R 5
+L 12
+D 9
+L 6
+D 8
+L 8
+R 12
+U 1
+L 11
+U 3
+D 7
+R 11
+D 15
+L 4
+U 9
+R 15
+U 8
+D 4
+L 10
+U 2
+L 13
+U 9
+L 5
+D 13
+L 5
+R 1
+D 3
+U 11
+D 5
+L 13
+R 3
+D 4
+U 3
+R 5
+U 14
+R 4
+D 9
+R 3
+D 11
+U 13
+R 7
+U 10
+R 1
+L 9
+D 15
+R 6
+U 12
+L 4
+R 13
+U 7
+D 10
+R 13
+U 1
+R 4
+D 15
+L 10
+R 11
+U 9
+L 1
+D 6
+R 15
+U 10
+L 10
+D 6
+U 10
+L 8
+R 5
+L 14
+D 6
+L 2
+U 2
+L 9
+U 2
+L 7
+U 9
+L 2
+D 8
+R 6
+D 6
+R 7
+U 2
+L 13
+R 13
+U 3
+D 13
+U 14
+R 9
+L 4
+U 15
+R 1
+D 2
+U 15
+R 12
+U 12
+L 12
+U 9
+R 8
+U 3
+L 7
+D 3
+U 2
+R 7
+D 4
+R 6
+U 13
+D 7
+U 7
+D 8
+R 13
+U 10
+D 16
+L 12
+U 8
+R 6
+U 10
+L 14
+D 12
+R 2
+L 9
+U 8
+D 7
+U 6
+R 7
+L 14
+D 6
+L 10
+U 11
+L 3
+D 6
+R 2
+U 8
+L 2
+D 10
+R 16
+U 14
+R 10
+D 13
+R 3
+D 8
+R 2
+D 16
+L 12
+D 13
+U 6
+D 2
+L 4
+R 14
+D 16
+U 12
+L 1
+D 9
+L 7
+U 1
+L 3
+U 7
+R 7
+D 3
+L 11
+R 9
+D 5
+R 10
+D 12
+R 1
+U 8
+L 8
+D 5
+R 12
+U 8
+R 11
+U 3
+D 5
+R 9
+L 11
+U 14
+L 14
+D 5
+U 12
+L 9
+D 2
+U 6
+L 7
+D 6
+L 2
+R 2
+D 11
+R 13
+D 10
+U 4
+L 13
+U 5
+L 6
+R 3
+U 16
+D 13
+R 1
+U 2
+D 4
+R 3
+U 10
+D 16
+L 1
+U 1
+R 16
+D 6
+U 7
+D 3
+R 4
+U 2
+D 4
+L 8
+U 9
+R 8
+U 15
+D 4
+R 11
+D 4
+R 12
+U 1
+D 2
+R 4
+D 17
+L 4
+U 1
+D 1
+L 3
+R 16
+D 12
+R 6
+U 3
+R 4
+U 2
+D 8
+R 5
+D 4
+R 1
+U 5
+L 12
+D 1
+R 12
+U 3
+D 13
+L 13
+U 11
+D 8
+R 3
+D 14
+L 10
+D 1
+L 4
+D 4
+R 9
+L 10
+U 6
+L 8
+R 7
+L 2
+R 1
+L 4
+D 8
+R 14
+U 8
+L 13
+D 12
+R 17
+D 2
+R 5
+U 12
+R 8
+D 16
+L 6
+R 14
+D 9
+U 7
+L 5
+U 14
+L 10
+U 5
+L 4
+U 7
+R 17
+D 1
+U 6
+L 12
+D 10
+L 2
+D 17
+L 14
+R 3
+D 6
+U 11
+R 14
+L 11
+D 8
+U 1
+R 1
+L 14
+U 17
+L 15
+U 3
+R 5
+D 3
+L 12
+R 10
+U 17
+R 7
+D 2
+U 16
+D 10
+L 12
+R 5
+D 10
+L 14
+D 17
+U 4
+L 9
+D 11
+R 5
+D 4
+U 5
+L 16
+D 16
+L 5
+U 10
+D 8
+L 14
+U 11
+L 17
+D 1
+U 10
+R 9
+U 17
+L 8
+R 11
+L 15
+D 9
+U 18
+D 3
+R 4
+L 7
+R 2
+U 5
+L 17
+U 2
+R 11
+L 11
+U 7
+D 17
+U 11
+R 5
+D 14
+U 7
+R 17
+D 10
+U 18
+D 15
+L 7
+U 2
+D 3
+U 14
+R 6
+D 2
+L 5
+R 16
+D 8
+U 2
+D 16
+R 9
+U 12
+R 4
+D 14
+R 10
+U 1
+R 1
+L 8
+D 15
+L 8
+D 16
+U 9
+R 11
+L 17
+U 18
+L 2
+R 4
+L 1
+U 9
+L 13
+R 1
+U 17
+L 12
+R 3
+D 15
+R 3
+U 3
+D 8
+L 6
+R 4
+D 13
+U 2
+R 1
+L 10
+U 9
+R 2
+D 16
+R 9
+U 15
+R 10
+U 4
+R 6
+D 10
+U 4
+R 11
+D 1
+R 10
+U 17
+R 4
+D 9
+U 17
+R 7
+U 11
+L 10
+R 10
+L 10
+U 8
+L 18
+U 14
+R 16
+L 12
+U 18
+R 1
+D 4
+L 9
+R 18
+D 12
+L 17
+D 12
+U 4
+D 1
+U 16
+R 17
+U 3
+D 13
+L 14
+D 9
+L 19
+U 13
+L 2
+U 9
+D 7
+U 7
+D 4
+L 10
+R 6
+D 11
+R 7
+U 10
+D 13
+U 18
+L 14
+D 7
+L 4
+R 11
+D 8
+L 8
+R 9
+L 2
+U 11
+R 13
+L 13
+R 11
+L 16
+D 10
+L 6
+R 3
+D 8
+L 19
+U 18
+L 14
+D 15
+U 10
+D 11
+R 19
+D 14
+U 2
+R 7
+U 6
+D 15
+U 10
+D 4
+U 10
+L 9
+R 15
+L 8
+U 7
+R 4
+D 5
+R 18
+L 3
+R 11
+D 11
+R 2
+U 1
+L 6
+D 18
+R 15
+U 2
+R 10
+L 18
+R 1
+U 19
+D 15
+R 18
+L 18
+R 4
+L 7
+D 18
+R 19
+U 11
+D 3
+L 3
+R 11
+U 16
+R 3
+D 4
+U 2
+R 10
+U 9
+L 18
+U 6
+L 5
+D 7
+L 17
+U 3
+L 5
+D 6
+U 19
+R 14
+U 3
+D 1
+U 16
+L 16
+D 12
+L 11
+D 16
+R 15
+U 5
+D 14
+L 3
+U 18
+L 8
+U 10
+L 10
+D 10
+R 5
\ No newline at end of file
diff --git a/data/advent09a.txt b/data/advent09a.txt
new file mode 100644 (file)
index 0000000..cbea2b3
--- /dev/null
@@ -0,0 +1,8 @@
+R 4
+U 4
+L 3
+D 1
+R 4
+D 1
+L 5
+R 2
\ No newline at end of file