一次检查多个值
因此,思考这一切的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倒在一个很长的故事,但它看起来不可避免......
所以,是的,所有存储在像这样的散列数据可能是反直觉的,但这是我所能想到的数据存储,我可以弄清楚如何轻松转储出来并查看调试,而且作为初学者很容易就能看到我,并且我已经将它从五个单独的哈希切换为一个哈希,一个用于每个人 - 因为当遇到五次哈希时,我遇到了理解如何构建逻辑的问题。再次感谢与我一起看这个。
嗯,我不知道它为什么现在正在工作,但我拿走了我的三个嵌套通行证,并将它们变成了他们自己的方法,它的工作原理正确。
之前,它是这样的:
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
我认为你正在试图解决错误的问题。这个数据结构看起来非常不直观(为什么你使用9的nil?)和复杂的(数组数组的散列无关)。你能解释一下你需要解决什么问题,而不是你想如何解决? – spickermann 2014-08-30 23:42:29
+1“你能解释一下你需要解决什么问题,而不是你想如何解决这个问题?”这看起来像一个[X/Y问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),在那里你问X,但问题真的是Y. – 2014-08-31 00:27:11
@ theTinMan好吧,我已经添加了有关我需要解决的问题的详细信息 - 是的,当然,我的散列是存储我的答案/处理的一种奇怪方式,但是我正在解决的难题肯定需要其中某处的复杂程度运作。如果你想手工解决这个难题,5 x 5格的插槽可以得到五个可能的结果,这是一种明显的解决方法。到目前为止,这是唯一的途径,使我可以非常全面地编程 - 在构建我自己的解决方案的任何地方。 – 2014-09-01 06:07:27