【发布时间】:2014-08-28 22:20:03
【问题描述】:
修改了一些。这是一个较大加工件的小样本。我的解谜逻辑需要检查一个人的五个属性之一和他的四个邻居的五个属性之一。此示例仅显示三个。在 $hash1 中,真值表,行是人,列是属性。我们假设管理属性 - 我将忽略该信息,因为它不是核心。
$hash1[2][2] 是一个“边”,所以它只需要检查一个邻居 $hash[6][value1]
$hash1[5][2] 是一个'中间',所以它需要检查两个邻居,$hash[3][value2] 和 $hash[9][value2]
$hash1 中的值是 9 表示 nil,1 表示真,0 表示假
所以,在这种情况下,“穿红衬衫的人住在开福特的人旁边”
如果我们要检查是否分配了红色衬衫,我们需要查看键 2、5、8。当逻辑命中 $hash1[5][2] 并且红色衬衫为 1 时,逻辑将检查一个邻居是否为零,而另一个邻居是否有一辆不是福特的汽车。如果为 true,则将 nil car 设置为 Ford。
$hash1 = {1 => [9,9,9], 2 => [9,9,9], 3 => [9,9,9],
4 => [9,9,9], 5 => [9,1,9], 6 => [9,9,9],
7 => [9,9,9], 8 => [9,9,9], 9 => [9,9,1], 99 => [1,1,1]}
$arry1 = [2,5,8]
$hash2 = { 6 => 99, 3 => 9, 99 => 6}
(条目 99 允许代码使用与中间相同的边缘检查机制,因为如果是最后的那个人,那么他只有一个邻居,所以如果他有一件红衬衫,他的邻居肯定开福特。)
我需要它总共循环三遍:
checking 2 and 6 , 99
then 5 and 3 , 9
then 8 and 99 , 6
除了从两个不同的地方循环使用三个值外,我一切正常-我现在正在修补这个-
$arry1.zip($hash2).map(&:flatten).each |key,key2,key3|
除了它正在做的是将它们合并到这个:
<2, 6, 99> <5, 99, 6> <8>
对于更长的数组,相同的模式——第一个和最后一个哈希对进来并与前两个数组值配对,其余的数组值不变。
【问题讨论】:
-
这很难理解,也更难测试,因为
$hash不完整。我建议您编辑以包含完整的$hash(越短越好)、缩短的name1和eman1,以及您想要的输出。您还需要解释key3是什么。不要改变你所拥有的;只需在末尾添加“Edit: ...”即可。 -
嗨-是的,很抱歉。实际代码非常庞大......我并没有专注于我需要询问的内容 - 试图解释太多。