#include <stdio.h>
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
int main(void) {
int USCS = 6;
int N_STEPS = 72;
int M_STEPS = 9;
int matrix[M_STEPS][N_STEPS];
int WGS_PER_USC = M_STEPS*N_STEPS/USCS;
for (int y=0; y<M_STEPS; ++y)
for (int x=0; x<N_STEPS; ++x)
matrix[y][x] = 9;
for (int gid=0; gid<N_STEPS*M_STEPS; gid++){
//Assuming round-robin assignment of WGs to USCs:
int block = gid / (USCS * N_STEPS);
int sidx = gid % (USCS * N_STEPS);
int y = block * USCS;
int height = MIN(M_STEPS - y, USCS);
int x = sidx / height;
y += sidx % height;
// printf("x:%3d y:%3d usc: %d\n", x, y, gid%4);
matrix[y][x] = gid%6;
//matrix[gid/N_STEPS][gid%N_STEPS] = gid%6;
}
for (int y=0; y<M_STEPS; ++y){
for (int x=0; x<N_STEPS; ++x)
printf("%d", matrix[y][x]);
printf("\n");
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgTUlOKFgsIFkpICgoKFgpIDwgKFkpKSA/IChYKSA6IChZKSkKIAppbnQgbWFpbih2b2lkKSB7CiAgaW50IFVTQ1MgPSA2OwogIGludCBOX1NURVBTID0gNzI7CiAgaW50IE1fU1RFUFMgPSA5OwogIGludCBtYXRyaXhbTV9TVEVQU11bTl9TVEVQU107CiAgaW50IFdHU19QRVJfVVNDID0gTV9TVEVQUypOX1NURVBTL1VTQ1M7CiAgZm9yIChpbnQgeT0wOyB5PE1fU1RFUFM7ICsreSkKICAgIGZvciAoaW50IHg9MDsgeDxOX1NURVBTOyArK3gpCiAgICAgIG1hdHJpeFt5XVt4XSA9IDk7CiAgZm9yIChpbnQgZ2lkPTA7IGdpZDxOX1NURVBTKk1fU1RFUFM7IGdpZCsrKXsKICAgIC8vQXNzdW1pbmcgcm91bmQtcm9iaW4gYXNzaWdubWVudCBvZiBXR3MgdG8gVVNDczoKCWludCBibG9jayA9IGdpZCAvIChVU0NTICogTl9TVEVQUyk7CglpbnQgc2lkeCA9IGdpZCAlIChVU0NTICogTl9TVEVQUyk7CglpbnQgeSA9IGJsb2NrICogVVNDUzsKCWludCBoZWlnaHQgPSBNSU4oTV9TVEVQUyAtIHksIFVTQ1MpOwoJaW50IHggPSBzaWR4IC8gaGVpZ2h0OwoJeSArPSBzaWR4ICUgaGVpZ2h0OwoKICAgIC8vIHByaW50ZigieDolM2QgICB5OiUzZCAgIHVzYzogJWRcbiIsIHgsIHksIGdpZCU0KTsKICAgIG1hdHJpeFt5XVt4XSA9IGdpZCU2OyAKICAgIC8vbWF0cml4W2dpZC9OX1NURVBTXVtnaWQlTl9TVEVQU10gPSBnaWQlNjsgCiAgfQogIGZvciAoaW50IHk9MDsgeTxNX1NURVBTOyArK3kpewoJZm9yIChpbnQgeD0wOyB4PE5fU1RFUFM7ICsreCkKCSAgcHJpbnRmKCIlZCIsIG1hdHJpeFt5XVt4XSk7CglwcmludGYoIlxuIik7CiAgfQogIHJldHVybiAwOwp9