gpt4 book ai didi

python - 公牛与奶牛的博弈——算法编程(python)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:53 26 4
gpt4 key购买 nike

这是模拟游戏Cows and Bulls三位数字

我正在尝试获取两个数字之间的奶牛和公牛的数量。其中一个由计算机生成,另一个由用户猜测。我已经解析了我拥有的两个数字,所以现在我有两个列表,每个列表包含三个元素,每个元素都是数字中的一个数字。所以:

237 将给出列表 [2,3,7]。我确保保持相关索引。一般模式是:(hundreds, tens, units)

而这两个列表存储在两个列表中:machineperson

算法1

所以,我写了下面的代码,最直观的算法:

cowsbulls 在这个循环开始之前被初始化为 0。

for x in person:
if x in machine:
if machine.index(x) == person.index(x):
bulls += 1
print x,' in correct place'
else:
print x,' in wrong place'
cows += 1

然后我开始用计算机猜测的不同类型的数字对此进行测试。

我随机决定了 277。我猜是 447。在这里,我得到了这个算法可能行不通的第一线索。我有 1 头牛和 0 头公牛。而我应该有 1 头公牛和 1 头母牛。

这是第一种算法的输出表:

Guess        Output            Expected Output

447 0 bull, 1 cow 1 bull, 0 cow
477 2 bulls, 0 cows 2 bulls, 0 cows
777 0 bulls, 3 cows 2 bulls, 0 cows

很明显,当计算机随机选择的数字中有重复数字时,该算法就不起作用了。

我试图理解为什么会发生这些错误,但我做不到。我已经尝试了很多,但我看不出算法有任何错误(可能是因为我写的!)

算法 2

考虑了几天,我尝试了这个:

cowsbulls 在这个循环开始之前被初始化为 0。

for x in range(3):
for y in range(3):
if x == y and machine[x] == person[y]:
bulls += 1
if not (x == y) and machine[x] == person[y]:
cows += 1

我对这个更有希望。但是当我测试这个时,这就是我得到的:

Guess        Output            Expected Output

447 1 bull, 1 cow 1 bull, 0 cow
477 2 bulls, 2 cows 2 bulls, 0 cows
777 2 bulls, 4 cows 2 bulls, 0 cows

我在这里犯的错误很清楚,我明白数字被一遍又一遍地计算。

即:277 对 477

当您计算多头时,2 头多头出现,没关系。但是当你数奶牛时:

  1. 277个位的7与477个十位的7配对,生成一头牛。
  2. 277中的7在十位上与477中的7在个位上匹配,因此生成一头牛。'

这里的匹配是完全正确的,因为我已经按照那个编写了代码。但这不是我想要的。而且我完全不知道此后该做什么。

此外...

我想强调的是,如果计算机选择的数字中没有重复数字,那么这两种算法都可以完美运行。

最佳答案

def digits(number):
return [int(d) for d in str(number)]

def bulls_and_cows(guess, target):
guess, target = digits(guess), digits(target)
bulls = [d1 == d2 for d1, d2 in zip(guess, target)].count(True)
bovine = 0
for digit in set(guess):
bovine += min(guess.count(digit), target.count(digit))
return bulls, bovine - bulls

请注意,bulls_and_cows(277, 447) 将返回 1 头公牛和 0 头奶牛。这是我个人的预期:为什么 277 中的前 7 算作牛,因为 447 的 7 已经是公牛了?

关于python - 公牛与奶牛的博弈——算法编程(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17316643/

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