F#项目Euler#8

时间:2014-11-22 21:45:11

标签: f#

我沮丧,我被困住了,我真的无法绕过错误。问题在于。

  

查找具有最大产品的1000位数字中的13个相邻数字。这个产品有什么价值?

现在我将数字存储为字符串,我只获取数字,然后循环并抓取每个13位"子串"作为一个数组,将它们相乘并进行比较。现在我已经确认我只获得了一个1000位数的字符数组,我已经确认我得到了相同大小的75个字符数组。但我没有得到正确的答案。

这是代码

let problem8() = 
    let str = @"731671765313306..."
                |> Seq.filter (Char.IsDigit)
                |> Seq.toArray

    (* We only need to go to 987 because 1000 isn't divisble by 13 and if we were to take the last 11 digits from 987 
       we would end up with 0 anyhow. *)
    seq { for i in 0.. 13 ..987 -> str.[i..i + 12] } 
    |> Seq.map (Seq.fold (fun acc chr -> acc * int64 (Char.GetNumericValue(chr))) 1L)
    |> Seq.max

problem8() 
|> printfn "%d"

1 个答案:

答案 0 :(得分:1)

如果在序列表达式中使用0 .. 13 .. 987,那么就像这样对数组进行分区(为简单起见,使用10位数的3个大小的块):

[012][345][678]9

我想这个问题要你找所有可能的子字符串,即

[012][345][678]9
0[123][456][789]
01[234][567]89

因此,您可能需要使用0 .. 987尝试所有索引。

顺便说一句,我怀疑使用int64将char转换为int64 c - 48L会更快。