简单有趣#85:多边形周边【难度:2级】:
答案1:
namespace myjinxin
{
public class Kata
{
public int PolygonPerimeter(bool[][] matrix){
int numSides = 0;
for (int row = 0; row < matrix.Length; row++)
{
for (int col = 0; col < matrix[row].Length; col++)
{
if (matrix[row][col]) // if the square is true, check if matrix edge, or neighbor is false
{
numSides += ( col == 0 || !matrix[row][col-1] ) ? 1 : 0 ; // left
numSides += ( col == matrix[row].Length-1 || !matrix[row][col+1] ) ? 1 : 0 ; // right
numSides += ( row == 0 || !matrix[row-1][col] ) ? 1 : 0 ; // top
numSides += ( row == matrix.Length-1 || !matrix[row+1][col] ) ? 1 : 0 ; // bottom
}
}
}
return numSides;
}
}
}
答案2:
namespace myjinxin
{
using System;
public class Kata
{
public bool IsEdge(bool[][] array, int y, int x)
{
try
{
return (array[y][x] == false) ? true : false; //if it is false, it is an edge. Otherwise, it is "true" and not an edge.
}
catch (IndexOutOfRangeException)
{
return true; //if it is out of range, it is an edge
}
}
public int PolygonPerimeter(bool[][] matrix)
{
var edges = 0;
for (var y = 0; y < matrix.Length; y++) //iterate through each array in array
{
for (var x = 0; x < matrix[y].Length; x++) ///iterate through elements in each array
{
if (matrix[y][x])
{
if (IsEdge(matrix, y, x + 1)) edges++; //checks to see if neighboring positions are edges relative to matrix[y][x]
if (IsEdge(matrix, y, x - 1)) edges++;
if (IsEdge(matrix, y + 1, x)) edges++;
if (IsEdge(matrix, y - 1, x)) edges++;
}
}
}
return edges;
}
}
}
答案3:
namespace myjinxin
{
using System;
using System.Linq;
public class Kata
{
public int PolygonPerimeter(bool[][] matrix)
{
int per = 0