写一个循环,当每个排列都被尝试时结束

时间:2014-01-09 16:07:39

标签: function lua permutation

我有一个函数,它以六个八进制(0-7)数字作为参数并返回true或false。

我想运行一个循环来尝试值0-7的每一个排列,并计算“真实”返回的数量。

类似的东西:

function count_possibles()
local count=0
local a,b,c,d,e,f=0,0,0,0,0,0
while possiblepermutations > 0 do
    if compare(a,b,c,d,e,f) == true then count = count +1 end
    permute(a,b,c,d,e,f)
    possiblepermutations = possiblepermutations -1
return count
end

我尝试过使用http://www.lua.org/pil/9.3.html中提供的示例,但这些都是关于迭代表,而不是我正在做的事情。

我不一定关心性能,这个函数是测试我写的比较函数。

在尝试所有可能的排列之前,是否有一种简单的方法可以循环某些东西?

1 个答案:

答案 0 :(得分:3)

根据规定的要求,这种直截了当的方法似乎很好:

local count = 0
local total = 0
for a = 0, 7 do
    for b = 0, 7 do
        for c = 0, 7 do
            for d = 0, 7 do
                for e = 0, 7 do
                    for f = 0, 7 do
                        total = total + 1
                        if compare(a,b,c,d,e,f) == true then count = count +1 end
                    end
                end
            end
        end
    end
end
return count, total

当然,这与排列无关。我赞成相互冲突的要求(如问题代码中所示),第一个参数是0,0,0,0,0,0。