- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经开始着手解决 Project Euler Problem #2 的 Shapeless 解决方案.
我可以将所有偶数的谎言加在一起,直到 Nth
即使是使用此代码的人:
import shapeless._, nat._, ops.nat.Sum
trait Fibonacci[N <: Nat] { type Out <: Nat }
object Fibonacci {
type Aux[N <: Nat, Out0 <: Nat] = Fibonacci[N] { type Out = Out0 }
def apply[N <: Nat](i: Nat)(implicit fib: Aux[i.N, N], n: Witness.Aux[N]):N = n.value
implicit val fib0 = new Fibonacci[_0] { type Out = _2 }
implicit val fib1 = new Fibonacci[_1] { type Out = _3 }
implicit def fibN[I <: Nat, L <: Nat, M <: Nat](implicit l: Aux[I, L],
m: Aux[Succ[I], M],
sum: Sum[L, M]) =
new Fibonacci[Succ[Succ[I]]] { type Out = sum.Out }
}
trait Fibs[N <: Nat] { type Out <: Nat }
object Fibs {
type Aux[N <: Nat, Out0 <: Nat] = Fibs[N] { type Out = Out0 }
def apply[N <: Nat](i: Nat)(implicit fibs: Aux[i.N, N], n: Witness.Aux[N]):N = n.value
implicit def fibs0(implicit f: Fibonacci[_0]) = new Fibs[_0] { type Out = f.Out }
implicit def fibsN[N <: Nat, R <: Nat, Z <: Nat](implicit fib: Fibonacci.Aux[Succ[Succ[Succ[N]]], R],
fibs: Aux[N, Z],
sum: Sum[R, Z]) =
new Fibs[Succ[N]] {
type Out = sum.Out
}
}
val (evenFibs0, evenFibs1) = (Fibs(0), Fibs(1))
typed[_2](evenFibs0)
typed[_10](evenFibs1)
takeWhile
的功能,所以我可以编写一个接受
limit
的函数并返回条款不超过该限制的偶数 fib 的总和。有任何想法吗?
trait EvenFibsWithLimit[N <: Nat, M <: Nat] { type Out <: Nat }
trait LowPriorityFibs3 {
type Aux[N <: Nat, M <: Nat, Out0 <: Nat] = EvenFibsWithLimit[N, M] { type Out = Out0 }
implicit def fibs0[M <: Nat] = new EvenFibsWithLimit[_0, M] { type Out = _0 }
implicit def fibsGT[N <: Nat, M <: Nat, O <: Nat](implicit f: EvenFibsWithLimit[N, M],
fib: Fibs.Aux[N, O],
l: ops.nat.LT[M, O]) = f
}
object EvenFibsWithLimit extends LowPriorityFibs3 {
def apply[N <: Nat, O <: Nat](limit: Nat)(implicit fibs: Aux[N, limit.N, O],
o: Witness.Aux[O]): O = o.value
implicit def fibsN[N <: Nat, M <: Nat, O <: Nat](implicit f: EvenFibsWithLimit[N, M],
f2: Fibs.Aux[Succ[N], O],
d: ops.nat.Diff[M, O]) =
new EvenFibsWithLimit[Succ[N], d.Out] {
type Out = O
}
}
Diff
根本......我也尝试了一些其他的变化,但我一直被卡住。当我编译时,我收到错误
diverging implicit expansion for fibsN.
HList
我的
Fibs
,并使用
Selector
使用谓词类型类来模拟
takeWhile
.想法?
最佳答案
我发现解决此类问题的最佳方法是在思考我需要跟踪的信息的同时逐步遍历自然数。
在纸上,我会使用这样的东西:
N 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
C 1 2 3 3 5 5 5 8 8 8 8 8 13 13 13
P 1 1 2 2 3 3 3 5 5 5 5 5 8 8 8
L 0 2 2 2 2 2 2 10 10 10 10 10 10 10 10
C
跟踪斐波那契数列中的当前数字——即小于或等于
N
的最大的一个.
P
是之前的斐波那契数,而
L
是我们目前看到的偶数的当前总和。
import shapeless._, ops.nat.{ Mod, Sum }, nat.{ _0, _1, _2 }
trait EvenFibs[N <: Nat] {
type L <: Nat
type C <: Nat
type P <: Nat
}
trait LowPriorityEvenFibs {
type Aux[N <: Nat, L0 <: Nat, C0 <: Nat, P0 <: Nat] = EvenFibs[N] {
type L = L0
type C = C0
type P = P0
}
implicit def ef3[N <: Nat](implicit
ef: EvenFibs[N]
): Aux[Succ[N], ef.L, ef.C, ef.P] = new EvenFibs[Succ[N]] {
type L = ef.L
type C = ef.C
type P = ef.P
}
}
Succ[N]
就是这种情况不是斐波那契数。它不需要我们更新我们正在跟踪的任何值。下一个案例稍微复杂一点:
trait MidPriorityEvenFibs extends LowPriorityEvenFibs {
implicit def ef2[N <: Nat, L0 <: Nat, PP <: Nat, P0 <: Nat](implicit
ef: Aux[N, L0, P0, PP],
sum: Sum.Aux[PP, P0, Succ[N]]
): Aux[Succ[N], L0, Succ[N], P0] = new EvenFibs[Succ[N]] {
type L = L0
type C = Succ[N]
type P = P0
}
}
Succ[N]
就是这种情况是奇数斐波那契数。在这种情况下,我们需要更新
C
和
P
,但不是
L
.
Succ[N]
案例是
Succ[N]
是偶数斐波那契数。我将在这里给出基本案例:
object EvenFibs extends MidPriorityEvenFibs {
implicit def ef0: Aux[_0, _0, _1, _1] = new EvenFibs[_0] {
type L = _0
type C = _1
type P = _1
}
implicit def ef1[N <: Nat, L <: Nat, PP <: Nat, P0 <: Nat](implicit
ef: Aux[N, L, P0, PP],
sum: Sum.Aux[PP, P0, Succ[N]],
mod: Mod.Aux[Succ[N], _2, _0],
current: Sum[Succ[N], L]
): Aux[Succ[N], current.Out, Succ[N], P0] = new EvenFibs[Succ[N]] {
type L = current.Out
type C = Succ[N]
type P = P0
}
def apply[N <: Nat](implicit ef: EvenFibs[N]): Aux[N, ef.L, ef.C, ef.P] = ef
}
class ComputeHelper[N <: Nat] {
def value[L <: Nat, C <: Nat, P <: Nat](implicit
ef: EvenFibs.Aux[N, L, C, P],
wit: Witness.Aux[L]
): L = wit.value
}
def compute[N <: Nat]: ComputeHelper[N] = new ComputeHelper[N]
test.typed[_0](compute[_0].value)
test.typed[_0](compute[_1].value)
test.typed[_2](compute[_2].value)
test.typed[_2](compute[nat._3].value)
test.typed[_2](compute[nat._4].value)
test.typed[_2](compute[nat._5].value)
test.typed[_2](compute[nat._6].value)
test.typed[_2](compute[nat._7].value)
test.typed[nat._10](compute[nat._8].value)
test.typed[nat._10](compute[nat._9].value)
关于用于 Euler 项目 #2 的 Scala 无形代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31615371/
我正在尝试将欧拉旋转顺序从现有的 xyz 转换为 zxy。谁能帮我做这件事?谢谢。 编辑:我发现这篇非常有用的文章,认为它可以帮助其他人在同一条道路上 - http://knol.google.com
考虑修改后的欧拉问题 #4——“找出最大回文数,它是 100 到 9999 之间的两个数字的乘积。” rev :: Int -> Int rev x = rev' x 0 rev' :: Int ->
例如,我如何在 R 中输入值 e^2? 最佳答案 R 表达式 exp(1) 代表e,并且 exp(2) 代表e^2。 这是有效的,因为 exp 是以 e 为底的求幂函数。 关于R编程: How do
我正在尝试了解 Euler Tour 算法以及为什么它在树遍历中很受欢迎。但是,我看不出 Euler Tour 和树的预序遍历之间的区别。 假设你有一棵树: A / \ B
我一直在尝试对 Euler #22 问题中的这些名称进行排序。我尝试了很多方法来交换字符串。我每次都有问题。有些是随机的符号;有些是随机的。在其他情况下,我在交换时出现了溢出(?)的名字(就像在尝试交
我想为游戏创建一些 physx,我从小例子开始了解它是如何工作的。在此期间我遇到了一些问题,但我在 90% 内解决了它们。 为了创建我的示例,我研究了一些其他示例并创建了我使用的示例:codeflow
/* The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60
我正在研究 Problem 8 of Project Euler我必须从给定的 1000 位数字中找到 13 个连续数字的最大乘积。我将该数字存储在一个文本文件中,然后将其输入到我的源代码中。我的代码
我目前正在尝试解决二体问题,然后我可以升级到更多行星,但它不起作用。它正在输出我不可能的位置。有谁知道是什么原因造成的? 这是我使用的代码: day = 60*60*24 # Constants G
我最近一直在研究毕达哥拉斯三元组和 Euler Bricks并且想知道生成所有这些的最佳方法是什么。 我从更广泛的阅读中知道有 10 个 c n: break
在我当前的 Project Euler problem 5 ,我有一个“有效”的解决方案。它适用于较小的数字(问题中的示例),但不适用于实际问题,因为我在强行使用它,并且程序没有完成。 问题的解释如下
基于标准定义,Eulerian Path是图中的一条路径,它恰好访问每条边一次。 现在,我试图在有向图中找到欧拉路径。我知道欧拉电路的算法。如果一个图有欧拉回路,它就有欧拉路径,这似乎是微不足道的。
我正在研究项目欧拉程序是为了“启蒙”,而不仅仅是解决它们。我已经在 80x80 矩阵上使用动态程序解决了问题 81,但是当我尝试使用统一成本搜索解决它时,我的程序消失在永无止境。我只想知道使用统一成本
我有一个关于 Project Euler 问题和使用循环展开优化的问题。 问题描述:2520是能被1到10的每一个数整除而没有余数的最小数。能被 1 到 20 的所有数字整除的最小正数是多少? 解决方
我正在使用以下行旋转 SCNNode: let rotate = SCNAction.rotateByAngle(CGFloat(M_PI), aroundAxis:SCNVector3Make(0
我想获得更精确的 1/7,但它被截断了。如何在转换有理数时获得更好的精度? >>> str(1.0/7)[:50] '0.142857142857' 最佳答案 Python 有一个用于任意精度计算的内
我正在处理项目 euler 中的问题 401,我在 python 中编写了我的解决方案,但它需要几天时间才能运行,显然我需要加快速度或使用不同的方法。我在 Haskell 中遇到了一个看起来与我的 p
我正在处理 Project Euler 的第四个问题并且遇到了 stackoverflow 异常。我不是在寻求解决问题的帮助,我只是想解释为什么我会收到 stackoverflow 异常。这通常是因为
我已经做了几天 Euler 项目,我不得不承认它很有趣。但是,如果有一些更专注于计算机科学而不是数学的东西,那就太好了。这样的事情对于练习算法和数据结构会很有趣,例如在准备编码面试时。 最佳答案 您可
13195 的质因数是 5、7、13 和 29。 数字 600851475143 的最大质因数是多少? 我自己在Project Euler上解决了这个问题,很慢,后来在某人的github账号上找到了这
我是一名优秀的程序员,十分优秀!