36
1
let input = [| -1; 3; -4; 5; 1; -6; 2; 1 |]
2
3
let findEquilibrium (input : int[]) =
4
let front = Array.copy input
5
let rear = Array.copy input
6
7
for i = 1 to input.Length-1 do
8
front.[i] <- front.[i] + front.[i-1]
9
10
for i in input.Length-2 .. -1 .. 0 do
11
rear.[i] <- rear.[i] + rear.[i+1]
12
13
{ 0..input.Length-1 }
14
|> Seq.filter (fun idx -> front.[idx] = rear.[idx])
15
|> Seq.toArray
16
17
let findEquilibrium2 (input : int[]) =
18
let sum = ref (input |> Seq.sum)
19
20
seq {
21
let acc = ref 0
22
23
for i = 0 to input.Length-1 do
24
let n = input.[i]
25
if !sum - n = !acc then yield i
26
27
sum := !sum - n
28
acc := !acc + n
29
}
30
|> Seq.toArray
31
32
33
34
findEquilibrium input |> printfn "%A"
35
36
findEquilibrium2 input |> printfn "%A"
Enter a month in a numeric format:
>