Gerador de tabelas de todos contra todos

Digite os nomes dos times, um em cada linha, e aperte o botão azul.

Uma linda e imprimível tabela de todos-contra-todos será gerada, com os jogos balanceadamente distribuídos entre as rodadas.

A teoria da geração de tabelas de todos-contra-todos

Se você tentou fazer a tabela à mão e se decepcionou com a sua incapacidade, não fique assim, a coisa é realmente mais complicada do que parece. Para se confortar, pense que grandes campeonatos de futebol, como o Campeonato Mineiro de 2006, já tiveram a divulgação de suas tabelas atrasadas pela falta de um homem conhecedor da técnica para a distribuição efetiva das rodadas.

À primeira vista parece simples, o time A joga contra todos os outros, o time B joga contra todos os outros menos o A, o time C contra todos exceto A e B e assim por diante, você chega a uma lista com todos os jogos que devem ser jogados. Mas o difícil mesmo é saber a ordem dos jogos: se todos os times devem jogar em todas as rodadas, contra quem eles devem jogar, para que no final as combinações de jogos não se compliquem e dois times sobrem em uma rodada, já tendo jogado entre eles e esperando outros adversários, já ocupados?

Em campeonatos de 4 times dá pra fazer, mais ou menos no olhômetro, a tabela direitinho; com 5 já complica, mas com sorte e paciência ainda funciona. De 6 pra cima já beira ao impossível. Precisamos do algoritmo:

A descoberta deste algoritmo data de 1883. Há outras formas de fazer o cálculo, mas o princípio é o mesmo em todas, de modo que provavelmente a geração de todas as tabelas de campeonatos de todos os esportes mundo afora passa pelo seguinte procedimento:

    Rodada 1 (A contra J, B contra I, C contra H etc.)
    A  B  C  D  E
    J  I  H  G  F

Ordena-se os times segundo qualquer ordem e divide-se-os em duas linhas (nosso exemplo segue a ordem alfabética). Anota-se aí a primeira rodada, o time da linha de cima conta o time imediatamente abaixo.

    Rodada 2 (A contra I, B contra H, C contra G etc.)
    A  J  B  C  D
    I  H  G  F  E

Para a próxima rodada, giram-se os times no sentido horário (ou seja, os de cima vão para a direita, os de baixo para a esquerda, o último de cima vai para o final da linha de baixo e o primeiro da linha de baixo sobe para a linha de cima), mantendo-se um deles fixo (no caso, o A).

E assim sucessicamente, até que se chega à última rodada:

    Rodada 9 (A contra B, C contra J, E contra I etc.)
    A  C  D  E  F
    B  J  I  H  G

Que é exatamente uma posição antes da posição inicial -- ou seja, caso girassem-se os times novamente, teríamos de novo a distribuição inicial dos times, perceba -- e aí completa-se o ciclo, todos jogaram contra todos, um jogo por rodada.

Para campeonatos com número ímpar de times, um time fica sem jogar a cada rodada. No algoritmo, basta adicionar um time falso à roda, e quem cair contra o time falso não joga.