我有一个代表正方形网格的布尔值字符串.
0100110010000100
我试图写验证 routine ,判断网格对角线,以确保没有对角线上有一个以上的'1'值.
从这个例子中可以看出,第五组有两个1.
为此,我想将网格排列到集合中,然后判断每个集合,看看它是否有多个‘1’值.
下面显示的是作为集合排列的值,以及每个值在原始字符串中的位置.
0 0
01 4 1
100 8 5 2
0010 12 9 6 3
101 13 10 7
00 14 11
0 15
我一直在试图弄清楚字符串位置和它属于哪个组之间的数学关系.我试过各种公式,但我的数学不好,所以我被难住了.
作为参考,下面的方法是我用来水平验证字符串的方法.我想要想出的解决方案需要是这样的,使用LINQ和基于集合的操作,而不是许多笨拙的循环.我正在做的练习是关于在风电场中放置涡轮机的代码形式图.
public bool HorizontalValidate(string windfarm)
{
var farmSize = (int) Math.Sqrt(windfarm.Length);
var rows = Enumerable.Range(0, farmSize)
.Select(x => windfarm.Substring(x * farmSize, farmSize))
.ToList();
if (rows.Select(x => x.Count(y => y == '+')).Max() > 1)
return false;
return true;
}
如果有人感兴趣,这里有一个链接: Windfarm Kata个