Do not calculate the entire cycle if not necessary
authorUmmon <greg.burri@gmail.com>
Mon, 18 Dec 2017 07:44:14 +0000 (08:44 +0100)
committerUmmon <greg.burri@gmail.com>
Mon, 18 Dec 2017 07:44:14 +0000 (08:44 +0100)
AdventOfCode2017/AdventOfCode2017.fsproj
AdventOfCode2017/Day16.fs

index 57bd951..16d2ffd 100644 (file)
@@ -25,7 +25,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <DocumentationFile>bin\$(Configuration)\$(AssemblyName).XML</DocumentationFile>
     <Prefer32Bit>true</Prefer32Bit>
-    <StartArguments>17</StartArguments>
+    <StartArguments>16</StartArguments>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
index fbe7ee7..bc52286 100644 (file)
@@ -34,7 +34,7 @@ let dance (size : int) (nb : int) (moves : DanceMove list) : string =
         for move in moves do
             match move with
             | Spin s ->
-                let last = danceFloor.[size - s ..] |> Array.rev
+                let last = danceFloor.[size - s ..]
                 Array.Copy (danceFloor, 0, danceFloor, s, size - s)
                 Array.Copy (last, danceFloor, s)
             | Exchange (p1, p2) ->
@@ -50,7 +50,7 @@ let dance (size : int) (nb : int) (moves : DanceMove list) : string =
                 applyMoves current
                 i + 1, current
         )
-        |> Seq.takeWhile (fun (i, state) -> i = 0 || not (state |=| initialState))
+        |> Seq.takeWhile (fun (i, state) -> i = 0 || i <= nb && not (state |=| initialState))
         |> Seq.map snd
         |> Array.ofSeq