From e56169441b68fbdc79e9e5da4cc63f04ea737d1f Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sun, 15 Sep 2024 14:51:06 +0100 Subject: Triangle numbers implementation --- impls/pingala.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 impls/pingala.cpp (limited to 'impls/pingala.cpp') diff --git a/impls/pingala.cpp b/impls/pingala.cpp new file mode 100644 index 0000000..510aa50 --- /dev/null +++ b/impls/pingala.cpp @@ -0,0 +1,63 @@ +/* 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; +} -- cgit v1.2.3-13-gbd6f