查找可以被另一个数字整除的序列中的第一个数字

我正在处理一组编码挑战。作为其中的一部分,我需要在列表中找到可以被整除的两个数字。只会有一组数字符合这个标准。查找可以被另一个数字整除的序列中的第一个数字

这是我现在所拥有的

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>,我不清楚为什么。

回答:

问题是Seq.iteri没有返回生成的序列。要在运行项目功能后返回序列,您需要mapi

您还需要明确地将row作为第二个参数传递给Seq.mapi

这是代码的工作版本。

let fourthChallenge() = 

let input = spreadsheet (readChallengeInput 3)

let firstEvenlyDivisable number (data: seq<int>) = data |> Seq.map (fun (i: int) -> i/number) |> Seq.find (fun x -> box x :? int)

let rowChecksums = input |> Seq.collect (fun (row: seq<int>) -> Seq.mapi (fun i n -> firstEvenlyDivisable n (Seq.skip i row)) row)

Seq.sum rowChecksums

以上是 查找可以被另一个数字整除的序列中的第一个数字 的全部内容, 来源链接: utcz.com/qa/258226.html

回到顶部