私は正しく、次のN×Nアレイを評価するスコア関数を書かれている:NxN配列のスコア関数を書くよりエレガントな方法はありますか?
int state1[][] = {
{0, 1, 0},
{1, 0, 0},
{0, 1, 0} }; // score = 0
int state2[][] = {
{0, 1, 1},
{1, 0, 0},
{1, 1, 0} }; // score = 2
int state3[][] = {
{1, 1, 0},
{1, 1, 1},
{1, 0, 0} }; // score = 5
には、以下のスコア関数を記述する(単純)よりエレガントな方法はありますか?
public static int score(int[][] s) {
int count = 0;
int hold = 0;
int length = s.length;
int end = length - 1;
for (int col = 0; col < length; col++) {
for (int row = 0; row < length; row++) {
hold = s[row][col];
if (row == 0 && hold == 1 && s[row + 1][col] == 1) {
count++;
}
else if (row == end && hold == 1 && s[row - 1][col] == 1) {
count++;
}
else if (row != 0 && row != end && hold == 1 && (s[row + 1][col] == 1 || s[row - 1][col] == 1)) {
count++;
}
}
}
return count;
}
「1」のすぐ上または下に「1」があるかどうかによってスコアリングが異なることを付け加えておきます。言い換えれば、行1に「1」が含まれている場合、行0または行2の同じ列に「1」がある場合にスコアが増加します。
は、関数が何をするのか説明して? – Justas
codereview.stackexchange.comは、作業コードを改善するための助けを求めるより良い場所です。 – GER