一次检查多个值

一次检查多个值

问题描述:

因此,思考这一切的X/Y,我猜这里真正的问题是 - 你如何为像这样的逻辑谜题存储数据? (滚动至底部以获得拼图的链接。)我选择了这个散列,其中每个拼图都有自己的键+5个可以标记为T,F或nil的偏移量。我使用9作为零,因为我可以添加9,而我使用的逻辑依赖于简单的数学。一次检查多个值

我需要检查七个值,如果他们都是某种方式,我然后设置一些其他值。这个检查运行三次,它循环三个位置,其中四个九和三个零的集合可以出现

这是我的散列 - 在实际使用中,它开始所有九,9 =空,1 =真,0 =假

$l1 = { 
    1 => [9,9,9,9,9], 2 => [9,9,9,9,9], 3 => [ , ,9, ,0], 4 => [ , , , ,0], 5 => [ , , , ,0], 
    6 => [9,9,9,9,9], 7 => [9,9,9,9,9], 8 => [ , ,9, ,9], 9 => [ , ,9, ,0], 10 => [ , , , ,0], 
11 => [9,9,9,9,9], 12 => [9,9,9,9,9], 13 => [ , , , ,9], 14 => [ , ,9, ,9], 15 => [ , ,9, ,0], 
16 => [9,9,9,9,9], 17 => [9,9,9,9,9], 18 => [ , , , ,0], 19 => [ , , , ,9], 20 => [ , ,9, ,9], 
21 => [9,9,9,9,9], 22 => [9,9,9,9,9], 23 => [ , , , ,0], 24 => [ , , , ,0], 25 => [ , , , ,9]} 

这里展示作为一个例子,我们正在检查该模式的三个实例出现在第3,第4,第5和列。我已经删除了其他值,以便您可以更好地看到它。

模式本身应该出现在第二列[2,7,12,17,22]。

下面是使用支票的第一次迭代& &:

if $l1[2][2] == 9 && $l1[7][2] == 9 && $l1[7][4] == 9 && $l1[12][4] == 9 && $l1[2][4] == 0 && $l1[17][4] == 0 && $l1[22][4] == 0 
    $l1[7][0] = 0 
    $l1[7][1] = 0 
    $l1[7][3] = 0 
end 

我也有七个嵌套的if语句试了一下,它只是停止匹配,即使图案是绝配两个或三个步骤。

你还能如何检查这样的事情?预先感谢任何帮助!

编辑:扩大解释 - 我没有正式培训编程以外的其他课程在codecademy。我正在建立逻辑来解决“谁的鱼?”益智,http://www.coudal.com/thefish.php,这个谜题就像这样 -

有五个男人,来自五个国家,在五个不同的颜色的房子连续居住,他们吸烟不同的品牌,喝不同的饮料,并有不同的宠物。

有15条线索,没有办法解决这个问题,没有铅笔和纸或电子表格......我的目标是制作逻辑解决这个难题,而不用做任何直观的飞跃 - 我们必须将它们编码到程序中。线索+逻辑或者解决它,或者我需要重新调整逻辑。

我已经建立了很多逻辑,但是这个特殊线索“绿色房子在白宫左边”的具体逻辑证明是非常难以建立的。

我不想泥潭eveyone倒在一个很长的故事,但它看起来不可避免......

所以,是的,所有存储在像这样的散列数据可能是反直觉的,但这是我所能想到的数据存储,我可以弄清楚如何轻松转储出来并查看调试,而且作为初学者很容易就能看到我,并且我已经将它从五个单独的哈希切换为一个哈希,一个用于每个人 - 因为当遇到五次哈希时,我遇到了理解如何构建逻辑的问题。再次感谢与我一起看这个。

+1

我认为你正在试图解决错误的问题。这个数据结构看起来非常不直观(为什么你使用9的nil?)和复杂的(数组数组的散列无关)。你能解释一下你需要解决什么问题,而不是你想如何解决? – spickermann 2014-08-30 23:42:29

+0

+1“你能解释一下你需要解决什么问题,而不是你想如何解决这个问题?”这看起来像一个[X/Y问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),在那里你问X,但问题真的是Y. – 2014-08-31 00:27:11

+0

@ theTinMan好吧,我已经添加了有关我需要解决的问题的详细信息 - 是的,当然,我的散列是存储我的答案/处理的一种奇怪方式,但是我正在解决的难题肯定需要其中某处的复杂程度运作。如果你想手工解决这个难题,5 x 5格的插槽可以得到五个可能的结果,这是一种明显的解决方法。到目前为止,这是唯一的途径,使我可以非常全面地编程 - 在构建我自己的解决方案的任何地方。 – 2014-09-01 06:07:27

嗯,我不知道它为什么现在正在工作,但我拿走了我的三个嵌套通行证,并将它们变成了他们自己的方法,它的工作原理正确。

之前,它是这样的:

if X == 1 
    if Y == 2 
    if Z == 3 
    Q = 0 
    end 
    end 
elsif X == 2 
    if Y == 3 
    if Z == 4 
    Q = 1 
    end 
    end 
    end 

现在是这样的

def first 
if X == 1 
    if Y == 2 
    if Z == 3 
    Q = 0 
    end 
    end 
end 
end 
def second 
    if X == 2 
    if Y == 3 
    if Z == 4 
    Q = 1 
    end 
    end 
    end 
end