Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Test Selezione Personale Dama

From Aino Wiki

Jump to: navigation, search

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


Visual Studio | MS SQL


Parole chiave:

Author