/* pingala.cpp * Created: 2024-09-15 * Author: Aryadev Chavali */ #include #include #include void padding(size_t n, size_t depth) { for (size_t i = 0; i < ((depth - n) / 2); ++i) printf("\t"); } void generate_triangle(const size_t depth) { std::vector items; items.reserve(depth * depth); #define AT(i, j) items[((i) * depth) + (j)] AT(0, 0) = 1; padding(0, depth); printf("%lu\n", items[0]); for (size_t i = 1; i < depth; ++i) { AT(i, 0) = 1; padding(i, depth); printf("%lu,\t", AT(i, 0)); for (size_t j = 1; j < i; ++j) { // Recurrence relation AT(i, j) = AT(i - 1, j - 1) + AT(i - 1, j); printf("%lu,\t", AT(i, j)); } AT(i, i) = 1; printf("%lu\n", AT(i, i)); } #undef AT } void usage(FILE *fp) { fprintf(fp, "Usage: pingala.out [depth]\n" "\tdepth: Depth of triangle generated\n"); } int main(int argc, char *argv[]) { if (argc < 2) { usage(stderr); return 1; } int arg = std::stoi(argv[1]); if (arg <= 0) { usage(stderr); return 1; } generate_triangle(arg); return 0; }