小编Ing*_*das的帖子

网球比赛安排

球员数量有限,网球场数量有限.在每轮比赛中,最多可以有比赛更多的比赛.没有休息,没有人打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个玩家的实例上.

(这是一个旧的考试问题.我接触过的任何人都没有任何解决方案.)

algorithm scheduling prolog clpfd

42
推荐指数
3
解决办法
8354
查看次数

列表程序中的空间泄漏

我正在解决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和时间的情况下输出我想要的数字,但必须有更好的表现方式.

performance haskell lazy-evaluation

13
推荐指数
1
解决办法
1106
查看次数

haskell中的顶级可变变量

我有一个C++程序多次调用我的Haskell程序.但是,第一次调用的一些数据需要保留用于后续调用.我知道Haskell默认不支持顶级可变变量,但我想我仍然需要这样的东西.(将我的状态写入文件并将其读回来会起作用,但我想要更原生的东西)

在hackage上我发现了像全局变量或安全全局变量的库,但它们看起来都很旧并且依赖于我已经使用过的旧版本的软件包.这个问题有规范的解决方案吗?

理想情况下,我想拥有顶级功能:

getState :: IO Mystate
writeState :: Mystate -> IO ()
Run Code Online (Sandbox Code Playgroud)

(我想我还应该提到一切都是在FFI的一次hs_init()调用中完成的,所以Haskell程序并没有在调用之间真正退出)

persistence haskell

8
推荐指数
1
解决办法
425
查看次数

Haskell中的可插入AI

我在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)

我对这种包装类型感到不满意,我觉得必须有比这更好的东西,或者我错了?

inheritance haskell

7
推荐指数
1
解决办法
326
查看次数

需要灵活的实例?

我想将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时进行编译,但有人可以解释为什么我需要这个吗?

haskell typeclass

7
推荐指数
2
解决办法
4164
查看次数

使用java泛型的责任链处理程序

我正在使用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在运行时没有明确存储(或者这是我在互联网研究中所理解的).所以我的问题是:什么是最好的选择?

java generics design-patterns

5
推荐指数
1
解决办法
1826
查看次数

重新实现函数实现而不是引用

我需要获得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)

我认为应该有拼接的技巧,但我无法做到这一点.

reflection macros scala scala-2.10

5
推荐指数
1
解决办法
61
查看次数

多线程Haskell

我正在学习Haskell,现在我想编写一些多线程程序,以便在功能语言中看到性能提升.我可以在互联网上找到它的一些参考但从来没有正确的介绍它.任何人都可以指向一个指南,这对于那些知道语法相当好的人来说是可以理解的,但在Haskell中不是一个向导吗?

parallel-processing multithreading haskell multicore

4
推荐指数
3
解决办法
2183
查看次数

CodeChef上的TimeOut

我是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

4
推荐指数
1
解决办法
453
查看次数

具有给定排序的无序数据类型的集合

我正在尝试将此数据类型放在Haskell集中,但我不想给它一个Ord的一般实例.所以我想在y-coördinate上给这个集合订购,但没有实例Ord Vector.这可能吗?

    data Vector = V 
    { x :: Double
    , y :: Double
    } deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

haskell set

3
推荐指数
1
解决办法
623
查看次数