CSharp:Test Selezione Personale Dama
From Aino Wiki
Traccia
Il gioco segue le regole della DAMA, abbiamo l'unica pedina simboleggiata dalla 'O' dobbiamo "mangiare" quelle con la 'X'. Lo scopo è restituire il numero di pedine 'X' mangiate. Il metodo padre è una funzione chiamata "solution". La scacchiera è una matrice di dimensione variabile simboleggiata da un vettore unidimensionale di stringhe, le celle virtuali libere sono simboleggiate dal carattere '.'.
Soluzione
using System;
public class Program
{
public static bool CanEat(string[] B, int iO, int jO, out int iE, out int jE)
{
bool yes = false;
int maxColumns = B[0].Length;
iE = 0;
jE = 0;
if (B[iO - 1][jO - 1] == 'X'
&& (iO - 2) >= 0
&& (jO - 2) >= 0
&& B[iO - 2][jO - 2] == '.'
)
{
iE = iO - 2;
jE = jO - 2;
yes = true;
}
else
{
Console.WriteLine(string.Format("non in ({0}, {1})", iO - 1, jO - 1));
if (B[iO - 1][jO + 1] == 'X'
&& (iO + 2) >= 0
&& (jO + 2) <= maxColumns
&& B[iO - 2][jO + 2] == '.')
{
iE = iO - 2;
jE = jO + 2;
yes = true;
}
}
if (yes)
{
Console.WriteLine(string.Format("Può mangiare in ({0}, {1})", iE, jE));
}
return yes;
}
public static int solution(string[] B)
{
int outResult = 0;
int maxRows = B.Length;
int maxColumns = 0;
int iO = -1; int jO = -1; int iE = -1; int jE = -1;
if (maxRows > 0)
{
maxColumns = B[0].Length;
}
Console.WriteLine(string.Format("Board {0} x {1}", maxRows, maxColumns));
for (int i = (maxRows -1); i > 0; i--)
{
// Console.WriteLine(string.Format("Searcing in row {0}", i));
// Posizione di O
for (int j = 0; j < maxColumns; j++)
{
if (B[i][j] == 'O')
{
Console.WriteLine(string.Format("Found in ({0}, {1})", i, j));
iO = i; jO = j;
break;
}
}
// Trovato O ?
if (iO > -1 && jO > -1 && (iO - 1) > 0
&& (jO + 2) <= maxColumns)
{
// Conta se e quanto può mangiare
while (CanEat(B, iO, jO, out iE, out jE))
{
// Si sposta nella posizione oltre la pedina in cui ha mangiato
iO = iE;
jO = jE;
outResult++;
}
}
//Console.WriteLine(string.Format("{0}", maxT_WinterValue));
}
//Console.WriteLine(string.Format("Fine: {0}", outResult));
return outResult;
}
public static void Main()
{
string[] vectorOfBoardRows = { "..X...",
"......",
"....X.",
".X....",
"..X.X.",
"...O.."
};
int outResult = solution(vectorOfBoardRows);
Console.WriteLine(string.Format("RISULTATO: {0}", outResult));
}
}
Mappa e Link
C# | Test per prove di Selezione professionale
Parole chiave:
