Given a vector of integers, find the longest consecutive sub-sequence of increasing numbers. If two sub-sequences have the same length, use the one that occurs first. An increasing sub-sequence must have a length of 2 or greater to qualify.
Example input:
[1 0 1 2 3 0 4 5]
Result:
[0 1 2 3]
void GetLongestRun ( int* A, uint N )
{
Assert ( A != NULL && N > 0) ;
uint i = 0;
uint start = 0; // start index of current candidate sequence
uint end = 0; // end index of current candidate sequence
uint globalStart = 0; // start index of overall winner among candidates if more than one
uint globalEnd = 0; // end index of overall winner among candidates assuming more than one
i++;
while ( i < N )
{
if ( A[i] >= A[i-1] )
{
end++;
}
else
{
start = i;
end = i;
}
if (end - start > globalEnd - globalStart)
{
globalStart = start;
globalEnd = end;
}
i++;
}
if (globalStart == globalEnd || globalStart + 1 == globalEnd) return;
for (uint j = globalStart; j <= globalEnd; j++)
printf ("%d ", A[j]);
}
A tic-tac-toe board is represented by a two dimensional vector. X is represented by :x, O is represented by :o, and empty is represented by :e. A player wins by placing three Xs or three Os in a horizontal, vertical, or diagonal row. Write a function which analyzes a tic-tac-toe board and returns :x if X has won, :o if O has won, and nil if neither player has won.
Example input:
[[:x :e :o]
[:x :e :e]
[:x :e :o]]
Result:
:x
public char GetWinner(char[,] Board)
{
var ret = '\0';
// check horizontals
for (int i = 0; i < 3; i++)
{
if (Board[i,0] != 'e' && Board[i,0] == Board[i,1] && Board[i,1] == Board[i,2]) return Board[i,0];
}
// check verticals
for (int j = 0; j < 3; j++)
{
if (Board[i,0] != 'e' && Board[0,j] == Board[1,j] && Board[1,j] == Board[2,j]) return Board[0,j];
}
// check diagonals
if (Board[i,0] != 'e' && Board[0,0] == Board[1,1] && Board[1,1] == Board[2,2]) return Board[0,0];
if (Board[i,0] != 'e' && Board[0,2] == Board[1,1] && Board[1,1] == Board[2,0]) return Board[0,2];
return ret;
}
No comments:
Post a Comment