この演習を解決したい: F# を使用してhttp://code.google.com/codejam/contest/351101/dashboard#s=p0 。
関数型プログラミングと F# は初めてですが、この概念と言語はとても気に入っています。そして、私はコードジャムのエクササイズも大好きです。とても簡単に見えますが、現実的です。誰かが私に解決策を指摘できますか?
現時点で、私はこのコードを書いていますが、これは単純に必須であり、機能的な観点からは見苦しく見えます:
(*
C - Credit
L - Items
I - List of Integer, wher P is single integer
How does the data look like inside file
N
[...
* Money
* Items in store
...]
*)
let lines = System.IO.File.ReadAllLines("../../../../data/A-small-practice.in")
let CBounds c = c >= 5 && c <= 1000
let PBounds p = p >= 1 && p <= 1000
let entries = int(lines.[0]) - 1
let mutable index = 1 (* First index is how many entries*)
let mutable case = 1
for i = 0 to entries do
let index = (i*3) + 1
let C = int(lines.[index])
let L = int(lines.[index+1])
let I = lines.[index+2]
let items = I.Split([|' '|]) |> Array.map int
// C must be the sum of some items
// Ugly imperative way which contains duplicates
let mutable nIndex = 0
for n in items do
nIndex <- nIndex + 1
let mutable mIndex = nIndex
for m in items.[nIndex..] do
mIndex <- mIndex + 1
if n + m = C then do
printfn "Case #%A: %A %A" case nIndex mIndex
case <- case + 1
C 値に加算されるが、通常の命令的な方法ではない項目を見つけたいと思います。機能的なアプローチが必要です。