module mjtournament.imatrix; import mjtournament.tournament; alias IMatrix = size_t[][]; IMatrix rowsToTeam(IMatrix im, size_t teamSize = playerPerTable) { assert (im.length % teamSize == 0); immutable teams = im.length / teamSize; foreach (i; 0..teams) foreach (j; 1..teamSize) im[i * teamSize][] += im[i * teamSize + j][]; foreach (i; 0..teams) im = im[0..i+1] ~ im[i+teamSize..$]; return im; } IMatrix colsToTeam(IMatrix im, size_t teamSize = playerPerTable) { return im.transpose.rowsToTeam(teamSize).transpose; } IMatrix bothToTeam(IMatrix im, size_t teamSize = playerPerTable) { return im.rowsToTeam.transpose.rowsToTeam; } private auto transpose(IMatrix im) { auto ret = new IMatrix(im[0].length, im.length); foreach (i, row; im) foreach (j, elem; row) ret[j][i] = elem; return ret; }