A compact version of day 14
authorUmmon <greg.burri@gmail.com>
Thu, 14 Dec 2017 12:53:04 +0000 (13:53 +0100)
committerUmmon <greg.burri@gmail.com>
Thu, 14 Dec 2017 12:53:04 +0000 (13:53 +0100)
AdventOfCode2017/AdventOfCode2017.fsproj
AdventOfCode2017/Day14Compact.fs [new file with mode: 0644]
Tests/Day14 tests.fs

index 34965a5..436c8cf 100644 (file)
@@ -70,6 +70,7 @@
     <Compile Include="Day12.fs" />
     <Compile Include="Day13.fs" />
     <Compile Include="Day14.fs" />
+    <Compile Include="Day14Compact.fs" />
     <Compile Include="Program.fs" />
     <None Include="App.config" />
     <Content Include="Data\day1.input">
diff --git a/AdventOfCode2017/Day14Compact.fs b/AdventOfCode2017/Day14Compact.fs
new file mode 100644 (file)
index 0000000..3a3b13f
--- /dev/null
@@ -0,0 +1,17 @@
+module AdventOfCode2017.Day14Compact
+
+let regions (input : string) =
+    let m = Array2D.zeroCreate 128 128
+    for i = 0 to 127 do
+        input + "-" + (string i)
+        |> Day10.knotHash2Encoding (fun i -> System.Convert.ToString(i, 2).PadLeft(8, '0'))
+        |> Seq.iteri (fun j c -> m.[i, j] <- int c - int '0')
+    let mutable n = 0
+    let rec remove i j =
+        if i >= 0 && i < 128 && j >= 0 && j < 128 && m.[i, j] = 1 then
+            n <- n + 1
+            m.[i, j] <- 0
+            1 + remove (i + 1) j * remove (i - 1) j * remove i (j + 1) * remove i (j - 1)
+        else
+            0
+    [ for i in 0 .. 127 do for j in 0 .. 127 -> remove i j ] |> List.sum, n
\ No newline at end of file
index d8af382..655d1b2 100644 (file)
@@ -14,4 +14,12 @@ type ``Day14 tests`` (output : ITestOutputHelper) =
 
     [<Fact>]
     let ``(Part2) From web page`` () =
-        Day14.nbOfConnectedRegions "flqrgnkx" =! 1242
\ No newline at end of file
+        Day14.nbOfConnectedRegions "flqrgnkx" =! 1242
+
+    [<Fact>]
+    let ``(Part1, compact) From web page`` () =
+        Day14Compact.regions "flqrgnkx" |> snd =! 8108
+
+    [<Fact>]
+    let ``(Part2, compact) From web page`` () =
+        Day14Compact.regions "flqrgnkx" |> fst =! 1242
\ No newline at end of file