The below is the C# implementation for the a function for given parameters int a
, int b
- both represent characters 'A' and 'B' respectively, where the function should return a string containing both characters 'A' and 'B' occurring a
times and b
times respectively but neither 'A' nor 'B' repeating consecutively for more than 2 times. Both values for a
and b
are given in a way that a string can be build using those numbers - so eg: Foo(0,3)
or Foo(1,7)
shall not be invoked.
eg:
Foo(3,3)
returns "BBAABA
" or "AABBAB
"
Foo(4,1)
returns "AABAA
"
Foo(3,5)
returns "BAABBABB
" or "BBAABBAB
"
Code:
static string Foo(int a, int b)
{
int total = a + b;
StringBuilder sb = new StringBuilder();
char charToPrint = a > b ? 'A' : 'B';
int flag = 0;
for(int x =0; x< total; x++)
{
if(flag == 2)
{
flag = 0;
charToPrint = SwapChar(charToPrint);
}
if(charToPrint == 'A' && a == 0 || charToPrint == 'B' && b == 0)
{
charToPrint = SwapChar(charToPrint);
}
if (charToPrint == 'A')
a--;
else
b--;
sb.Append(charToPrint);
flag++;
}
return sb.ToString();
}
static char SwapChar(char thisChar)
{
return thisChar == 'A' ? 'B' : 'A';
}
This is working but I would like to receive some feedback on this code.
SwapChar
method. What is the code supposed to do when it is impossible to create a string with the requirements? E.g.Foo(0, 3)
is impossible but your code returns"BBB"
which violates the last rule. \$\endgroup\$SwapChar
method. Btw, I just edited the question to include theFoo(0,3)
shall be called. \$\endgroup\$