gpt4 book ai didi

Scala 找到最小的立方体,它的数字正好有五个排列是立方体

转载 作者:行者123 更新时间:2023-12-01 05:14:47 25 4
gpt4 key购买 nike

我遇到了这个很棒的问题,并试图在 Scala 中解决它以学习语言。问题的简短解释在标题中,这里有更长的解释 http://www.mathblog.dk/project-euler-62-cube-five-permutations/

我在 Javascript 中解决了它,并尝试将逻辑转移到 Scala,但它不太工作。它适用于找到 3 个排列,但不适用于 4、5 和可能向上的排列。

这是代码:

import collection.mutable.Map
import collection.mutable.{Map => MMap}

val mutMap3 = MMap.empty[String, MMap[String, Int]]
def pow(n:Int) : Int = {
val cubed = (n * n * n).toString
val digits = 0 to 9
var str = ""
for (a <- digits) {
val b = cubed.count(_.toString==a.toString)
str += b
}
if (mutMap3 contains str) {
mutMap3(str)("len") += 1
if(mutMap3(str)("len") == 5) {
return mutMap3(str)("first")
}
} else {
mutMap3(str) = MMap("len" -> 1, "first" -> n)
}
return pow(n+1)
}

我的想法是,由于排列只是顺序的重新排列(即 4233 是 3234 的排列),因此您可以计算每个数字出现的次数,这将代表所有可能的排列。在4233的排列中,“0”出现0次,“1”出现0次,“2”出现2次,“4”出现1次,“5”出现0次……一直到9 ,可以将其放入字符串中作为“0012100000”作为整数“0123456789”的出现次数(4233和3234,以及“2”、“3”和“4”的所有其他组合都可以表示为“0012100000”)。所以用简单的英语,取一个数字,把它立方,把它变成一串特定整数的出现,存储它并计算我们看到它的次数,因为我们不断用数字 + 1 调用函数,直到特定的排列出现 5 次,然后返回我们第一次获得该排列时的数字。

我想看到替代方法,但我真的很想知道为什么我的不起作用以及它是否是一个好方法。玩得开心!

最佳答案

不是特别有效但简洁:

scala> val cubes=(0 to 5030).map(c=>c.toLong*c*c).toSet

cubes: scala.collection.immutable.Set[Long] = Set(2628072, ...

scala> cubes.par.filter(_.toString.permutations.map(_.toLong).filter(cubes.contains(_)).length==5)

res6: scala.collection.parallel.immutable.ParSet[Long] = ParSet(38614472000, 10648000000, 10403062487, 91125000000, 65939264000, 54439939000, 95443993000, 122763473000, 116500279104, 114791256000, 40920960536, 103823000000)

关于Scala 找到最小的立方体,它的数字正好有五个排列是立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com