Add a functional version of day 17 part 2.
authorGreg Burri <greg.burri@gmail.com>
Sun, 17 Dec 2017 16:28:55 +0000 (17:28 +0100)
committerGreg Burri <greg.burri@gmail.com>
Sun, 17 Dec 2017 16:28:55 +0000 (17:28 +0100)
AdventOfCode2017/AdventOfCode2017.fsproj
AdventOfCode2017/Day17.fs

index 57bd951..2fbe84d 100644 (file)
@@ -37,7 +37,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <DocumentationFile>bin\$(Configuration)\$(AssemblyName).XML</DocumentationFile>
     <Prefer32Bit>true</Prefer32Bit>
-    <StartArguments>16</StartArguments>
+    <StartArguments>17</StartArguments>
   </PropertyGroup>
   <PropertyGroup>
     <MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
index ead02fd..5aba6d3 100644 (file)
@@ -16,4 +16,13 @@ let spinLock2 (moves : int) =
     for i = 1 to 50_000_000 do
         pos <- (pos + moves) % i + 1
         if pos = 1 then valueAt1 <- i
-    valueAt1
\ No newline at end of file
+    valueAt1
+
+// Four times slower than 'spinLock2'.
+let spinLock2' (moves : int) =
+    seq { 1 .. 50_000_000 }
+    |> Seq.fold (
+        fun (pos, valueAt1) i ->
+            let pos' = (pos + moves) % i + 1
+            pos', if pos' = 1 then i else valueAt1
+    ) (0, 0) |> snd
\ No newline at end of file