Use a matrix of ints instead of bools
authorUmmon <greg.burri@gmail.com>
Thu, 14 Dec 2017 12:36:19 +0000 (13:36 +0100)
committerUmmon <greg.burri@gmail.com>
Thu, 14 Dec 2017 12:36:19 +0000 (13:36 +0100)
AdventOfCode2017/Day14.fs

index b7e2dc8..ca284a1 100644 (file)
@@ -1,26 +1,26 @@
-    module AdventOfCode2017.Day14
+module AdventOfCode2017.Day14
 
-    let hash = Day10.knotHash2Encoding (fun i -> System.Convert.ToString(i, 2).PadLeft(8, '0'))
+let hash = Day10.knotHash2Encoding (fun i -> System.Convert.ToString(i, 2).PadLeft(8, '0'))
 
-    let buildMatrix (input : string) : bool[,] =
-        let mat = Array2D.zeroCreate 128 128
-        for i = 0 to 127 do
-            input + "-" + (string i) |> hash |> Seq.iteri (fun j c -> if c = '1' then mat.[i, j] <- true)
-        mat
+let buildMatrix (input : string) =
+    let mat = Array2D.zeroCreate 128 128
+    for i = 0 to 127 do
+        input + "-" + (string i) |> hash |> Seq.iteri (fun j c -> mat.[i, j] <- int c - int '0')
+    mat
 
-    let nbOfUsedSquares (input : string) =
-        let mutable i = 0
-        buildMatrix input |> Array2D.iter (fun b -> if b then i <- i + 1)
-        i
+let nbOfUsedSquares (input : string) =
+    let mutable i = 0
+    buildMatrix input |> Array2D.iter (fun b -> i <- i + b)
+    i
 
-    let nbOfConnectedRegions (input : string) =
-        let m = buildMatrix input
+let nbOfConnectedRegions (input : string) =
+    let m = buildMatrix input
 
-        let rec remove i j =
-            if i >= 0 && i < 128 && j >= 0 && j < 128 && m.[i, j] then
-                m.[i, j] <- false
-                1 + remove (i + 1) j * remove (i - 1) j * remove i (j + 1) * remove i (j - 1)
-            else
-                0
+    let rec remove i j =
+        if i >= 0 && i < 128 && j >= 0 && j < 128 && m.[i, j] = 1 then
+            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
\ No newline at end of file
+    [ for i in 0 .. 127 do for j in 0 .. 127 -> remove i j ] |> List.sum
\ No newline at end of file