From: Ummon Date: Thu, 14 Dec 2017 12:36:19 +0000 (+0100) Subject: Use a matrix of ints instead of bools X-Git-Url: https://git.euphorik.ch/?a=commitdiff_plain;h=04fe0fac7082cbfe923623b343f23fea50e2a628;p=advent_of_code_2017.git Use a matrix of ints instead of bools --- diff --git a/AdventOfCode2017/Day14.fs b/AdventOfCode2017/Day14.fs index b7e2dc8..ca284a1 100644 --- a/AdventOfCode2017/Day14.fs +++ b/AdventOfCode2017/Day14.fs @@ -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