let rec opCycle (xs : int[]) i su =
if i >= xs.Length then false else
let x = xs.[i]
su := !su - 2 * x
xs.[i] <- -x
if x > 0 then true else opCycle xs (i + 1) su
do
let m, origin = 209, [| 1; 24; 2; 2; 8; 44; 3; 42; 4; 8; 9; 2; 2; 7; 9; 4; 3; 5; 2; 4; 9; 5; 3; 2; 3; 2; 1; 1 |]
//let m, origin = 99, [| 1; 8; 4; 3; 2; 4; 8; 9; 2; 2; 7; 9; 4; 3; 5; 2; 4; 9; 5; 3; 2; 3; 2; 1; 1 |]
//let m, origin = 5, [| 1; 4; -2; 2 |]
let xs = Array.copy origin
let su = Array.sum origin |> ref
let rec run su =
if !su = m then
Array.
iter2 (fun x o
-> printf " %s %i" (if x
= o then
"+" else "-") o
) xs.
[1..
] origin.
[1..
] printfn " = %i" m
if opCycle xs 1 su then run su
run su
bGV0IHJlYyBvcEN5Y2xlICh4cyA6IGludFtdKSBpIHN1ID0gCiAgICAgICAgaWYgaSA+PSB4cy5MZW5ndGggdGhlbiBmYWxzZSBlbHNlCiAgICAgICAgbGV0IHggPSB4cy5baV0KICAgICAgICBzdSA6PSAhc3UgLSAyICogeAogICAgICAgIHhzLltpXSA8LSAteAogICAgICAgIGlmIHggPiAwIHRoZW4gdHJ1ZSBlbHNlIG9wQ3ljbGUgeHMgKGkgKyAxKSBzdQoKZG8gCiAgICBsZXQgbSwgb3JpZ2luID0gMjA5LCBbfCAxOyAyNDsgMjsgMjsgODsgNDQ7IDM7IDQyOyA0OyA4OyA5OyAyOyAyOyA3OyA5OyA0OyAzOyA1OyAyOyA0OyA5OyA1OyAzOyAyOyAzOyAyOyAxOyAxIHxdCiAgICAvL2xldCBtLCBvcmlnaW4gPSA5OSwgW3wgMTsgODsgNDsgMzsgMjsgNDsgODsgOTsgMjsgMjsgNzsgOTsgNDsgMzsgNTsgMjsgNDsgOTsgNTsgMzsgMjsgMzsgMjsgMTsgMSB8XQogICAgLy9sZXQgbSwgb3JpZ2luID0gNSwgW3wgMTsgNDsgLTI7IDIgfF0KICAgIGxldCB4cyA9IEFycmF5LmNvcHkgb3JpZ2luCiAgICBsZXQgc3UgPSBBcnJheS5zdW0gb3JpZ2luIHw+IHJlZgoKICAgIGxldCByZWMgcnVuIHN1ID0gCiAgICAgICAgaWYgIXN1ID0gbSB0aGVuIAogICAgICAgICAgICAgICAgcHJpbnRmICIlaSIgeHMuWzBdIAogICAgICAgICAgICAgICAgQXJyYXkuaXRlcjIgKGZ1biB4IG8gLT4gcHJpbnRmICIgJXMgJWkiIChpZiB4ID0gbyB0aGVuICIrIiBlbHNlICItIikgbykgeHMuWzEuLl0gb3JpZ2luLlsxLi5dCiAgICAgICAgICAgICAgICBwcmludGZuICIgPSAlaSIgbQogICAgICAgIGlmIG9wQ3ljbGUgeHMgMSBzdSB0aGVuIHJ1biBzdQogICAgcnVuIHN1