## The challenge

Build a pyramid-shaped tower, as an array/list of strings, given a positive integer `number of floors`. A tower block is represented with `"*"` character.

For example, a tower with `3` floors looks like this:

 ``````1 2 3 4 5 `````` ``````[ " * ", " *** ", "*****" ] ``````

And a tower with `6` floors looks like this:

 ``````1 2 3 4 5 6 7 8 `````` ``````[ " * ", " *** ", " ***** ", " ******* ", " ********* ", "***********" ] ``````

## The solution in C

Option 1:

 ``````1 2 3 4 5 6 7 8 `````` ``````void build_tower(unsigned n, char tower[n][2 * n - 1]) { for (unsigned int i = 0; i < n; i++) for (unsigned int j = 0; j < 2 * n - 1; j++) if (j >= (n - 1) - i && j <= (n - 1) + i) tower[i][j] = '*'; else tower[i][j] = ' '; } ``````

Option 2:

 ``````1 2 3 4 5 6 7 `````` ``````void build_tower(unsigned n, char tower[n][2 * n - 1]) { int len = 2 * n - 1; for (int i = 0; i < n; i++) { memset(tower[i], ' ', len); memset(tower[i] + len/2 - i, '*', i * 2 + 1); } } ``````

Option 3:

 ``````1 2 3 4 5 6 7 `````` ``````void build_tower(unsigned n, char tower[n][2 * n - 1]) { for(unsigned i = 0; i < n; i++){ for(unsigned j = 0; j < (2 * n - 1); j++){ (j >= n - 1 - i && j <= n - 1 + i) ? (tower[i][j] = '*') : (tower[i][j] = ' '); } } } ``````

## Test cases to validate our solution

 ``````1 2 3 4 5 6 7 8 9 `````` ``````#include extern void do_test (unsigned n, const char expected[n][2 * n - 1]); Test(tests_suite, sample_tests) { do_test(1, (char){"*"}); do_test(2, (char){" * ", "***"}); do_test(3, (char){" * ", " *** ", "*****"}); } ``````