-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday17_part01.fs
28 lines (23 loc) · 1.16 KB
/
day17_part01.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module day17_part01
open AdventOfCode_2017.Modules
let startInsertions (buffer: int array) (numsteps: int) (stopat: int) =
let rec insertElement (index: int) (currentvalue: int) (currentBuffer: int array) =
if currentvalue = stopat+1 then
currentBuffer[index+1]
else
let newindex = (index + numsteps) % currentBuffer.Length
match newindex = currentBuffer.Length-1 with
| true ->
let newbuffer = Array.concat [| currentBuffer; [| currentvalue |] |]
insertElement (newindex+1) (currentvalue+1) newbuffer
| false ->
let leftpart = Array.sub currentBuffer 0 (newindex + 1)
let rightpart = Array.sub currentBuffer (newindex + 1) (currentBuffer.Length - newindex - 1)
let newbuffer = Array.concat [| leftpart; [| currentvalue |]; rightpart |]
insertElement (newindex+1) (currentvalue+1) newbuffer
insertElement 0 1 buffer
let execute() =
let path = "day17/day17_input.txt"
let steps = LocalHelper.GetContentFromFile path |> int
let buffer = [| 0 |]
startInsertions buffer steps 2017