Trabalho de Formatura Supervisionado

Desenvolvimento de um judge para estudos avançados de programação competitiva

Proposta

Uma competição de programação consiste em uma lista de problemas de programação. Para resolvê-los, o competidor deve escrever um programa eficiente que leia uma entrada e imprima um valor que corresponde à solução para essa entrada. A pessoa que conseguir resolver mais problemas dessa lista e de forma mais rápida estará melhor classificada na competição.

As soluções para esses problemas costumam envolver o conhecimento de estruturas de dados ou algoritmos avançados, ideias engenhosas e até mesmo códigos longos e complicados. Dessa forma, para melhorar o desempenho nessas competições, o programador deve aprimorar sua capacidade de problem solving, aumentar o conhecimento de Teoria da Computação e resolver muitos problemas.

Para esse treinamento, é muito prático utilizar sites chamados de "online judges", como o Codeforces, SPOJ, Neps Academy, atCoder e etc. Esses judges contém diversos problemas de programação e eles são capazes de corrigir as soluções enviadas por um usuário. Alguns têm fim puramente competitivo, ou seja, eles sediam competições oficiais valendo rating em rankings internos. Outros têm fim mais educacional, cujo objetivo principal é facilitar o aprendizado de novos conteúdos.

Cada judge possui sua própria lista de problemas, sendo que alguns são exclusivos. Por causa disso, conforme os conteúdos ficam mais avançados, mais judges são necessários no treinamento. Essa prática é pouco conveniente e acaba piorando a qualidade e agilidade do estudo.

Portanto, o objetivo do projeto é desenvolver um judge educacional para facilitar o estudo de conteúdos avançados de programação competitiva. Para isso, ele será capaz de organizar problemas de diversos outros judges em listas separadas por assunto. Ademais, a intenção é que a comunidade tenha uma participação forte: ela será capaz de selecionar e separar os problemas por conteúdo; avaliar os problemas por qualidade e dificuldade; ajudar na redação das soluções; recomendar materiais de estudos.

Essas características tornariam o estudo de conteúdos avançados muito mais conveniente e acessível, o que pode aprimorar o desempenho de todos nas competições de programação.

Links para os judges mencionados:

Cronograma de atividades

Links: