如何对正方形网格进行对角线分组以实现风电场布局验证
风电场网格对角线验证实现问题
我有一个代表正方形网格的布尔值字符串:
0100001110000100
(对应4×4网格可视化:部分位置标记为1,其余为0)
我需要编写一个验证程序,按对角线分组检查该网格,确保每个对角线组中'1'的数量不超过1个。(示例中的第5组存在两个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; }
内容的提问来源于stack exchange,提问作者Eval Knievel
相关产品推荐
相关产品推荐

