#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// supported N = 26
char canvas[ 26 * 2 - 1 ][ 26 * 2 - 1 ];
void draw_triangle( int n, char c, int x, int y ) {
int line_length = n * 2 - 1;
// draw n lines
for( ; 0 < n; --n ) {
// draw a line with specific length
for( int len = 0; len < line_length; ++len )
{
canvas[ y ][ x + len ] = c;
}
--y, ++x;
line_length -= 2;
}
}
void draw_upside_down_triangle( int n, char c, int x, int y ) {
int line_length = n * 2 - 1;
// draw n lines
for( ; 0 < n; --n ) {
// draw a line with specific length
for( int len = 0; len < line_length; ++len )
{
canvas[ y ][ x + len ] = c;
}
++y, ++x;
line_length -= 2;
}
}
int main() {
int n;
int used_width = n * 2 - 1;
int used_height = n * 2 - 1;
// clear canvas content
for( int row = 0; row < used_height; ++row ) {
for( int col = 0; col < used_width; ++col ) {
canvas[ row ][ col ] = ' ';
}
}
int start_x = 0,
start_y = n - 1;
char c = 'A';
for( ; 0 < n; --n ) {
draw_triangle( n, c, start_x, start_y );
draw_upside_down_triangle( n, c, start_x, start_y );
++start_x;
++c;
}
// print the canvas
for( int row = 0; row < used_height; ++row ) {
for( int col = 0; col < used_width; ++col ) {
printf( "%c", canvas
[ row
][ col
] ); }
}
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgoKLy8gc3VwcG9ydGVkIE4gPSAyNgpjaGFyIGNhbnZhc1sgMjYgKiAyIC0gMSBdWyAyNiAqIDIgLSAxIF07CiAKdm9pZCBkcmF3X3RyaWFuZ2xlKCBpbnQgbiwgY2hhciBjLCBpbnQgeCwgaW50IHkgKSB7CiAgICAgICAgCiAgICBpbnQgbGluZV9sZW5ndGggPSBuICogMiAtIDE7CiAgICAKICAgIC8vIGRyYXcgbiBsaW5lcwogICAgZm9yKCA7IDAgPCBuOyAtLW4gKSB7CiAgICAgICAgLy8gZHJhdyBhIGxpbmUgd2l0aCBzcGVjaWZpYyBsZW5ndGgKICAgICAgICBmb3IoIGludCBsZW4gPSAwOyBsZW4gPCBsaW5lX2xlbmd0aDsgKytsZW4gKQogICAgICAgIHsKICAgICAgICAgICAgY2FudmFzWyB5IF1bIHggKyBsZW4gXSA9IGM7CiAgICAgICAgfQogICAgICAgIC0teSwgKyt4OwogICAgICAgIGxpbmVfbGVuZ3RoIC09IDI7CiAgICB9Cn0KIAp2b2lkIGRyYXdfdXBzaWRlX2Rvd25fdHJpYW5nbGUoIGludCBuLCBjaGFyIGMsIGludCB4LCBpbnQgeSApIHsKICAgICAgICAKICAgIGludCBsaW5lX2xlbmd0aCA9IG4gKiAyIC0gMTsKICAgIAogICAgLy8gZHJhdyBuIGxpbmVzCiAgICBmb3IoIDsgMCA8IG47IC0tbiApIHsKICAgICAgICAvLyBkcmF3IGEgbGluZSB3aXRoIHNwZWNpZmljIGxlbmd0aAogICAgICAgIGZvciggaW50IGxlbiA9IDA7IGxlbiA8IGxpbmVfbGVuZ3RoOyArK2xlbiApCiAgICAgICAgewogICAgICAgICAgICBjYW52YXNbIHkgXVsgeCArIGxlbiBdID0gYzsKICAgICAgICB9CiAgICAgICAgKyt5LCArK3g7CiAgICAgICAgbGluZV9sZW5ndGggLT0gMjsKICAgIH0KfQogCiAKaW50IG1haW4oKSB7CiAgICAKICAgIGludCBuOwogICAgc2NhbmYoICIlZCIsICZuICk7CiAgICBhc3NlcnQoIDAgPCBuICYmIG4gPD0gMjYgKTsKICAgIAogICAgaW50IHVzZWRfd2lkdGggPSBuICogMiAtIDE7CiAgICBpbnQgdXNlZF9oZWlnaHQgPSBuICogMiAtIDE7CiAgICAKICAgIC8vIGNsZWFyIGNhbnZhcyBjb250ZW50CiAgICBmb3IoIGludCByb3cgPSAwOyByb3cgPCB1c2VkX2hlaWdodDsgKytyb3cgKSB7CiAgICAgICAgZm9yKCBpbnQgY29sID0gMDsgY29sIDwgdXNlZF93aWR0aDsgKytjb2wgKSB7CiAgICAgICAgICAgIGNhbnZhc1sgcm93IF1bIGNvbCBdID0gJyAnOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaW50IHN0YXJ0X3ggPSAwLAogICAgICAgIHN0YXJ0X3kgPSBuIC0gMTsKICAgIGNoYXIgYyA9ICdBJzsKICAgIGZvciggOyAwIDwgbjsgLS1uICkgewogICAgICAgIGRyYXdfdHJpYW5nbGUoIG4sIGMsIHN0YXJ0X3gsIHN0YXJ0X3kgKTsKICAgICAgICBkcmF3X3Vwc2lkZV9kb3duX3RyaWFuZ2xlKCBuLCBjLCBzdGFydF94LCBzdGFydF95ICk7CiAgICAgICAgKytzdGFydF94OwogICAgICAgICsrYzsKICAgIH0KICAgIAogICAgLy8gcHJpbnQgdGhlIGNhbnZhcwogICAgZm9yKCBpbnQgcm93ID0gMDsgcm93IDwgdXNlZF9oZWlnaHQ7ICsrcm93ICkgewogICAgICAgIGZvciggaW50IGNvbCA9IDA7IGNvbCA8IHVzZWRfd2lkdGg7ICsrY29sICkgewogICAgICAgICAgICBwcmludGYoICIlYyIsIGNhbnZhc1sgcm93IF1bIGNvbCBdICk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIAogICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQ==