DEV Community

Cover image for Porque eu estou criando a melhor API de tabela de campeonato que você já viu
anastacio_dev
anastacio_dev

Posted on • Edited on

Porque eu estou criando a melhor API de tabela de campeonato que você já viu

Uma conversa sobre as motivações e as regras de negócio, para contextualizar o leitor

Uma coisa que me encanta desde criança são tabelas de campeonatos. Sempre fiquei doido com a ideia de conseguirem fazer com que 20 times jogassem todos contra todos, sem repetições, e tudo batia perfeitamente.

Me lembro, desde criança, rabiscando em papel cruzamentos de jogos e tentando fazer a coisa dar certo. Eu era uma criança estranha, eu sei.

Mas mal sabia eu que aquele era o meu primeiro contato com algoritmos... Quem diria.

Cresci, e na adolescência, conheci a NBA. E então a minha mente explodiu! Trinta equipes, divididas em seis grupos jogando entre si, jogando contra adversários dos outros grupos, confrontos que poderiam se repetir até quatro vezes... E o pior: tudo isso, 82 jogos para cada time, tinham que ser jogados em seis meses. Isso dá por volta de 14 jogos por mês: jogo dia sim, dia não.

Se você acha o calendário do futebol brasileiro maluco, tem que conhecer a NBA, meu parça. Jogar em dias seguidos (o famoso e infame "back-to-back") é coisa comum.

Só que nessa bagunça, algo me pegou: os times costumam fazer o que chamamos de "trips", que são sequências de jogos fora de casa, objetivando aproveitar ao máximo as viagens.

Imagine, por exemplo, o New York Knicks. Uma viagem ida e volta para Los Angeles, para enfrentar os Lakers, Estamos falando de 4 mil quilômetros, ou 6 horas pra ir, e mais 4 mil quilômetros pra voltar. Isso equivale a uma viagem entre Porto Alegre e Belém do Pará, pra você ter ideia.

Imagine então que temos não apenas os Lakers em Los Angeles, mas também os Clippers. E ainda os Warriors em São Francisco e os Kings em Sacramento. Seriam quatro viagens cansativas à California!

Mapa dos Estados Unidos indicando a localidade de cada time da NBA: 30 times viajando distâncias continentais. Como reduzir horas de viagem?

Mas, na NBA, essas viagens repetitivas são evitadas ao máximo. Os Knicks iriam à LA uma vez e jogaria contra os 4 times de uma vez só. Uma semana corrida, cansativa, tendo em compensação o alívio de não precisar voltar mais à Cidade dos Anjos, a menos que tenha que disputar a final do campeonato por lá.

Imagina a complexidade disso! Trinta times espalhados por todo o território dos EUA (29, na verdade, porque temos o Toronto Raptors. Isso mesmo, um time canadense na liga!) e a necessidade de fazê-los todos cruzarem esse país continental e dar a todos — equilibradamente, por questões de isonomia — o ônus e o bônus das longas viagens para enfrentar os adversários mais longínquos?

Por exemplo: quando os Knicks forem a Los Angeles enfrentar os Lakers, os demais times da California, citados anteriormente, precisam estar ali por perto para receberem os nova iorquinos naquela semana. Não pode acontecer de os Clippers estarem viajando pelo Texas, os Warriors pela Costa Leste e os Kings pela região de Chicago.

Tudo tem que se encaixar. Não basta um simples cruzamento como o que acontece no Brasileirão, por exemplo.

Daí surgiu o comichão: como criar um algoritmo que, dado um número de equipes e sua localização, consiga agendar essas viagens longas e partidas consecutivas fora de casa, fazendo essa otimização logística?

Nisto consiste o projeto Tabelão. Quando finalizado, nossa API vai receber um número de times, sua localização, mais algumas especificações que trataremos em outros textos, e vai devolver uma tabela completa de uma temporada, com a otimização logística de viagens, tentando aproveitar ao máximo as viagens longas que um time fará.

Obviamente que o campeonato do condomínio, por exemplo, não precisa desse nível de otimização. Por isso que não encontrei essa funcionalidade em nenhum gerador de tabelas de campeonatos nas lojas de aplicativos para celulares.

Aliás, antes de iniciar, precisamos alinhar expectativas:

  • Isto não é um SaaS. (Não ainda, pelo menos, rsrs) Logo, não estou me preocupando com MVP, validações com clientes, precificação, demandas comerciais e outras questões de negócio. A conversa aqui é técnica. Desde ferramentas e design patterns até algoritmos de machine learning que poderemos utilizar para alcançar a solução. Tudo aqui é perseguindo fins educacionais.
  • Se, no fim, tudo ficar muito bom e aparecer um comprador, também não reclamo. Vamos conversar, hehehe.
  • E eu acredito que esse estudo teria grande valia para resolver problemas mais "mundanos", como roteamento de transporte de cargas, por exemplo. Quem sabe este não seria um bom spin-off do Tabelão?

Isto posto, vamos aos próximos capítulos.

Prosseguimos.


Leitura adicional: saiba mais sobre a complexidade do quebra cabeça que é o calendário da NBA lendo esse post do blog Bola Presa

Top comments (0)