球员数量有限,网球场数量有限.在每轮比赛中,最多可以有比赛更多的比赛.没有休息,没有人打2轮.每个人都与其他人比赛.制定尽可能少轮次的计划.(由于每个人的轮次之间必须休息的规则,可以有一轮没有比赛.)5名球员和2个球场的输出可以是:
| 1 2 3 4 5
-|-------------------
2| 1 -
3| 5 3 -
4| 7 9 1 -
5| 3 7 9 5 -
Run Code Online (Sandbox Code Playgroud)
在此输出中,列和行是播放器编号,矩阵内的数字是这两个玩家竞争的圆形数字.
问题是找到一种算法,可以在可行的时间内为更大的实例执行此操作.我们被要求在Prolog中这样做,但任何语言的(伪)代码都是有用的.
我的第一次尝试是一种贪婪的算法,但这会产生太多轮次的结果.然后我建议迭代加深深度优先搜索,我的一个朋友实现了,但是仍然花了太多时间在小到7个玩家的实例上.
(这是一个旧的考试问题.我接触过的任何人都没有任何解决方案.)
我正在解决Haskell中Project Euler的一些问题.我为它写了一个谜语程序,它没有像我预期的那样工作.
当我在运行程序时查看任务管理器时,我发现它在ghc上使用了> 1 GB的RAM.我的一个朋友在Java中编写了一个具有相同含义的程序,并在7秒内成功完成.
import Data.List
opl = find vw $ map (\x-> fromDigits (x++[0,0,9]) )
$ sequence [[1],re,[2],re,[3],re,[4],re,[5],re,[6],re,[7],re,[8],re]
vw x = hh^2 == x
where hh = (round.sqrt.fromIntegral) x
re = [0..9]
fromDigits x = foldl1 (\n m->10*n+m) x
Run Code Online (Sandbox Code Playgroud)
我知道这个程序会在给定足够的RAM和时间的情况下输出我想要的数字,但必须有更好的表现方式.
我有一个C++程序多次调用我的Haskell程序.但是,第一次调用的一些数据需要保留用于后续调用.我知道Haskell默认不支持顶级可变变量,但我想我仍然需要这样的东西.(将我的状态写入文件并将其读回来会起作用,但我想要更原生的东西)
在hackage上我发现了像全局变量或安全全局变量的库,但它们看起来都很旧并且依赖于我已经使用过的旧版本的软件包.这个问题有规范的解决方案吗?
理想情况下,我想拥有顶级功能:
getState :: IO Mystate
writeState :: Mystate -> IO ()
Run Code Online (Sandbox Code Playgroud)
(我想我还应该提到一切都是在FFI的一次hs_init()调用中完成的,所以Haskell程序并没有在调用之间真正退出)
我在Haskell写了一个卡片游戏的模拟,有多个AI对手.我希望有一个主要的功能,有些像GameParameters -> [AIPlayer] -> GameOutcome.但是我想将主要功能看作是一个"库函数",所以我可以编写一个新的AIPlayer来改变其他任何东西.
所以我想到创建一个类型类AIPlayer,所以主要的功能就变成了AIPlayer a => GameParameters -> [a] -> GameOutcome.但这只允许插入一种类型的AI.因此,要在一个游戏中插入多个AIPlayers,我需要定义一个包装类型
AIWrapper = P1 AIPlayer1 | P2 AIPlayer2 | ...
instance AIWrapper AIPlayer where
gameOperation (P1 x) = gameOperation x
gameOperation (P2 x) = gameOperation x
...
Run Code Online (Sandbox Code Playgroud)
我对这种包装类型感到不满意,我觉得必须有比这更好的东西,或者我错了?
我想将Haskell类型的Convertible实例写入其C表示
它看起来像这样:
instance Convertible Variable (IO (Ptr ())) where
Run Code Online (Sandbox Code Playgroud)
现在GHC抱怨:
Illegal instance declaration for `Convertible
Variable (IO (Ptr ()))'
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use -XFlexibleInstances if you want to disable this.)
In the instance declaration for `Convertible Variable (IO (Ptr ()))'
Run Code Online (Sandbox Code Playgroud)
如果你的实例声明中有自由类型,我认为需要灵活实例,但事实并非如此.我可以在添加正确的pragma时进行编译,但有人可以解释为什么我需要这个吗?
我正在使用Java中的责任链设计模式.链作为一个整体代表对某些类型的对象的请求.链中的每个"处理程序"负责处理所请求的1种单位.所有请求都以基本相同的方式处理,因此我尝试使用"Handler"类通用.所以在Handle类中我需要一个像这样的方法(处理本身是简化的,因为它只会模糊我的问题):
public class Handler<T>{
int required;
Handler<?> next;
public void handle(Object O){
if(o instanceof T){
required --;
}else{
next.handle(o);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是像这样的实例是不可能的.因为类型T在运行时没有明确存储(或者这是我在互联网研究中所理解的).所以我的问题是:什么是最好的选择?
我需要获得lambda函数实现的AST.而且我被卡住了,因为reify对论证起作用而不是它的价值.
val x = (a: Int) => println("a")
val t = showRaw(reify(thevalueof x)) //something here should change
println(t)
Run Code Online (Sandbox Code Playgroud)
应该打印:
Expr(Function(List(ValDef(Modifiers(PARAM), newTermName("a"), Ident(scala.Int), EmptyTree)), Apply(Select(Select(This(newTypeName("scala")), newTermName("Predef")), newTermName("println")), List(Literal(Constant("a"))))))
Run Code Online (Sandbox Code Playgroud)
我认为应该有拼接的技巧,但我无法做到这一点.
我正在学习Haskell,现在我想编写一些多线程程序,以便在功能语言中看到性能提升.我可以在互联网上找到它的一些参考但从来没有正确的介绍它.任何人都可以指向一个指南,这对于那些知道语法相当好的人来说是可以理解的,但在Haskell中不是一个向导吗?
我是CodeChef的新手并想到尝试一些问题,所以我解决了"Bytelandian金币"问题.(http://www.codechef.com/problems/COINS/)我在计算机上获得即时结果,CodeChef设置了9秒的时间限制,但我仍然从CodeChef获取TimeOut.我不再有任何线索导致这种情况.任何提示都会有所帮助.
我的代码:
module Main where
import qualified Data.Map as M
import Data.Map (Map)
import Data.Maybe
main = do
catch (main' M.empty 1) (const $ return ())
main' _ 11 = return ()
main' m c = do
x <- readLn
let (k,m2) = sol m x
print k
main' m2 (c+1)
sol :: Map Integer Integer -> Integer -> (Integer, Map Integer Integer)
sol m x |M.member x m = (fromJust $ M.lookup x m,m)
|x > x2+x3+x4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将此数据类型放在Haskell集中,但我不想给它一个Ord的一般实例.所以我想在y-coördinate上给这个集合订购,但没有实例Ord Vector.这可能吗?
data Vector = V
{ x :: Double
, y :: Double
} deriving (Eq)
Run Code Online (Sandbox Code Playgroud) haskell ×7
algorithm ×1
clpfd ×1
generics ×1
inheritance ×1
java ×1
macros ×1
multicore ×1
performance ×1
persistence ×1
prolog ×1
reflection ×1
scala ×1
scala-2.10 ×1
scheduling ×1
set ×1
typeclass ×1