一次检查多个值

时间:2014-08-30 23:32:33

标签: ruby if-statement nested

所以,仔细考虑它的X / Y,我想这里真正的问题是 - 你如何存储像这样的逻辑谜题的数据? (滚动到底部以获得拼图的链接。)我选择了这个哈希,其中每个拼图都有自己的键+5个偏移,可以标记为T,F或nil。我使用9代表零,因为我可以添加9,我使用的逻辑倾向于简单的数学。

我需要检查七个值,如果所有这些都是某种方式,那么我会设置一些其他值。此检查运行三次 - 它循环通过三个位置,其中可以出现四个九和三个零的集合

这是我的哈希 - 在实际使用中,它开始所有九,9 = null,1 = true,0 = false

 $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 个答案:

答案 0 :(得分:0)

嗯,我不知道为什么它现在正在工作,但我拿了三个嵌套的通道并将它们变成了自己的方法,并且它正常工作。

在此之前:

 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