0
我正在处理一组编码挑战。作为其中的一部分,我需要在列表中找到可以被整除的两个数字。只会有一组数字符合这个标准。查找可以被另一个数字整除的序列中的第一个数字
这是我现在所拥有的
let spreadsheet (s: string) =
s.Split([|"\r\n"|], StringSplitOptions.RemoveEmptyEntries)
|> Seq.map (fun(d: string) -> d.Split([|' '|], StringSplitOptions.RemoveEmptyEntries) |> Seq.map Int32.Parse)
let fourthChallenge() =
// In the real code, this reads from a file. That part works fine though.
let input = spreadsheet "5 9 2 8\r\n9 4 7 3\r\n3 8 6 5"
let firstEvenlyDivisable number data = data |> Seq.collect /number |> Seq.find (fun x -> box x :? int)
let rowChecksums = input |> Seq.map (fun (row: seq<int>) -> Seq.iteri (fun i n -> firstEvenlyDivisable n (Seq.skip i row)))
Seq.sum rowChecksums
我有现在的问题是,firstEvenlyDivisable
似乎是一个seq<int> -> unit
,而不是seq<int> -> int
我期望的功能。
当数据出来Seq.collect /number
它似乎是seq<unit>
,我不清楚为什么。
我建议添加类型注释以帮助追踪问题。 – Foole
@Foole Yup,看起来像'iteri'不会返回一个序列。我完全认为它的确如此。我其实需要'mapi'。 –