小编bla*_*ned的帖子

资源配置(最优策略)

我知道这不是提出这个问题的正确位置,但也许是一个聪明人遇到并有解决方案.

我正在尝试编写一个电脑游戏,我需要一个算法来解决这个问题:

游戏在2名玩家之间进行.每边都有1.000美元.有三个"盒子",每个玩家记下他要放入这些盒子里的钱.然后比较这些数量.谁在一个盒子里放了更多的钱,得分为1分(如果每个人得到半分).获得更多积分的人赢得了对手1.000美元.游戏示例:

玩家A:[500,500,0]玩家B:[333,333,334]

玩家A获胜是因为他赢得了方框A和方框B(但输掉了方框C).

问题:放钱的最佳策略是什么?

我有更多问题要问(算法相关,而不是数学相关)但我需要首先知道这个问题的答案.

更新(1):经过一些研究后,我了解到这些类型的问题/游戏被称为Colonel Blotto Games.我尽了最大努力,发现了很少(高技术性)的文件.简而言之,我所遇到的问题(如上所述)被称为简单的Blotto游戏(只有三个具有对称资源的战场).困难的是具有10个以上具有非对称资源的战场.我读过的所有文件都说简单的Blotto游戏很容易解决.问题是,他们都没有真正说出那个"简单"的解决方案.

更新(2):我写了一个小动作文件来演示Tom Sirgedas提到的论文中的策略.你可以在megaswf测试它.说明:单击三角形内的一个点.红色区域代表胜诉案例.蓝色区域代表丢失的情况,微小的白色线代表抽奖.

algorithm math game-theory discrete-mathematics

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

功能编程:副作用

大多数教程/文章/书籍在介绍函数式编程时都会讨论副作用.拿这个Python代码:

def isPrime(n):
    k = 2
    while k < n:
        if n % k == 0:
            return False
        k += 1
    return True
Run Code Online (Sandbox Code Playgroud)

文中说上面的功能有局部副作用,我不明白.我看到变量"k"正在发生变化,我不明白它有什么不好.

有人可以给出一个明显的不良副作用的例子,以及如何通过函数式编程来避免它?

functional-programming

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

Scala构造函数

Scala中以下Java代码的等价物是什么:

import java.util.Random;

public class Bool {

 private boolean door;
 Random random = new Random();

 Bool() {
  this.door = random.nextBoolean();
 }
}
Run Code Online (Sandbox Code Playgroud)

因此,当创建新的Bool对象时,门变量将自动获得随机布尔值.

scala

6
推荐指数
2
解决办法
5568
查看次数

我应该使用哪种设计模式来建立人物角色关系?

我无法弄清楚我应该采用哪种设计模式.说我有这样的课:

class Person

String role;

public void takeRole(String role) {
  this.role = role;
}

public void do() {

  switch(role)

    case a:
      do this and that;
      this.role = b;

    case b:
      do this and that;

    case c:
      do this and that;
      this.role=a;

    ....
Run Code Online (Sandbox Code Playgroud)

简而言之,一个人有角色,而do()方法取决于他的角色是什么.在某些情况下,他可能不得不转换角色.我认为这个do()应该是抽象的(更多是因为将来可能会定义其他角色)---但是如何?应该有角色类吗?

任何帮助将不胜感激.

编辑:

感谢您节省时间,人们.我想补充一点.我确实认为(至少作为一个想法)许多建议的解决方案.以下是我的困难:如果我将Person类(例如PersonTypeA,personTypeB等)子类化,并将每个特定角色分配给适当的人员类型,那么在切换角色时我会遇到困难(例如,工程师成为会计师! ---很奇怪,至少可以这么说.

另一方面,如果我为每个角色创建类; 然后(1)一个角色感觉不像是一个对象,因为(至少在我的情况下)角色没有属性而只有方法.因此,role_A_1与role_A_2没有什么不同.但对于每个人,我都必须创建一个新的角色对象 - 即使他们都有相同的角色.

我不确定我是否清楚自己,我不确定我的观点是否有意义.

java design-patterns

3
推荐指数
2
解决办法
3502
查看次数

Python函数跟踪

为了使递归过程更加明显,给出了这个例子:

def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

def trace(f):
    f.indent = 0
    def g(x):
        print('|  ' * f.indent + '|--', f.__name__, x)
        f.indent += 1
        value = f(x)
        print('|  ' * f.indent + '|--', 'return', repr(value))
        f.indent -= 1
        return value
    return g


fib = trace(fib)
print(fib(4))
Run Code Online (Sandbox Code Playgroud)

我能理解跟踪功能的"内容",但我不明白"如何".特别:

1)为什么我们有f.indent而不是简单的缩进= 0(好吧,我看到那不起作用,但我不明白为什么).

2)我不明白怎么做

print('|  ' * f.indent + '|--', 'return', repr(value))
Run Code Online (Sandbox Code Playgroud)

在找到值之前不会执行.

有人会善意地解释整件事吗?

python recursion

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

这个Python错误是什么意思?

这是我的测试代码(Python 3.2)

import random

def singleMatch():
    a = random.randint(1, 5050)
    b = random.randint(1, 5050-a)
    c = 5050-a-b

    h = [a, b, c]
    print(h)
    computer = [841, 842, 3367]

    score = 0

    for i, j in zip(computer, h):
        if i > j:
            score = score + 1

    if score == 2:
        return 1
    else:
        return 0



def match(n):
    matchScore = 0
    for i in range(n):
        s = singleMatch()
        matchScore = matchScore + s
    return matchScore

x = match(10000)
print(x)
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我有时会收到此错误:

Traceback …
Run Code Online (Sandbox Code Playgroud)

python-3.x

0
推荐指数
1
解决办法
1351
查看次数