summaryrefslogtreecommitdiff
path: root/alg_l.c
blob: 94cd548aa3c1fd3972c335be738c695aebb1d089 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

int main(int argv, char **argc) {
    if (argv < 3) {
        assert(argv > 0);
        printf("Usage: %s [n] [t]\n", argc[0]);
        return -1;
    }

    size_t n = atoi(argc[1]),
           t = atoi(argc[2]);

    size_t *c = calloc(t + 3, sizeof(*c));

L1_initialize:
    for (size_t j = 1; j <= t; j++)
        c[j] = j - 1;
    c[t + 1] = n;
    c[t + 2] = 0;

L2_visit:
    for (size_t j = t; j >= 1; j--)
        printf("%lu ", c[j]);
    printf("\n");

L3_find_j:
    size_t j = 1;
    while (c[j] + 1 == c[j + 1]) {
        c[j] = j - 1;
        j = j + 1;
    }

L4_maybe_done:
    if (j > t) return 0;

L5_increase_c_j:
    c[j] = c[j] + 1;
    goto L2_visit;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback