I had recently participated in coding competion sponsored by an company and there was this one question which I did not understood, as to what was it asking.
Here i
//in c++
string convert(const string & s) { int len = s.size();
//base case
if (len == 0) return string("");
// minimum square calculation
int i = 1;
while (i*i < len) ++i;
//cout << "i=" << i << endl;
//matrix initialization
vector > matrix;
matrix.resize(i);
for (int j = 0; j < i; ++j)
matrix[j].resize(i);
for (int j = 0; j < i; ++j)
for (int k = 0; k < i; ++k)
matrix[j][k] = ' ';
//logic
int r = 0, c = 0;
bool right = true, down = false, left = false, up = false;
int curr_len = 0;
int side = i - 1;
while (curr_len < len)
{
if (right)
{
for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
{
matrix[r][c] = s[curr_len];
//cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
++c;
++curr_len;
}
right = false;
down = true;
}
if (down)
{
for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
{
matrix[r][c] = s[curr_len];
//cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
++r;
++curr_len;
}
down = false;
left = true;
}
if (left)
{
for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
{
matrix[r][c] = s[curr_len];
//cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
--c;
++curr_len;
}
left = false;
up = true;
}
if (up)
{
for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
{
matrix[r][c] = s[curr_len];
//cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
--r;
++curr_len;
}
up = false;
right = true;
side = side - 2;
++r; ++c;
}
}
stringstream ss;
for (int j = 0; j < i; ++j)
{
for (int k = 0; k < i; ++k)
{
ss << matrix[j][k];
}
}
return ss.str();
}