// https://forum.arduino.cc/t/bowling-league-lane-assignment-problem/1005860
template <size_t N> void roundRobinEven(size_t (&rounds)[N][(N + 1) / 2][2]) {
for (size_t r = 0; r < N; r++) {
rounds[r][0][0] = r;
rounds[r][0][1] = N;
for (size_t i = 1; i < (N + 1) / 2; i++) {
rounds[r][i][0] = (r + i) % N;
rounds[r][i][1] = (r + N - i) % N;
}
}
}
template <size_t N> void printSchedule(size_t (&rounds)[N][(N + 1) / 2][2]) {
char buffer[20];
for (size_t r = 0; r < N; r++) {
sprintf(buffer, "Round %i: ", r);
Serial.print(buffer);
for (size_t i = 0; i < (N + 1) / 2; i++) {
sprintf(buffer, "(%i, %i) ", rounds[r][i][0], rounds[r][i][1]);
Serial.print(buffer);
}
Serial.println();
}
}
void setup() {
Serial.begin(9600);
size_t const teams = 36;
size_t rounds[teams - 1][teams / 2][2];
roundRobinEven(rounds);
printSchedule(rounds);
}
void loop() {}