O que é?
Uma competição de programação é um evento muito empolgante onde os participantes disputam para completar corretamente o número máximo de tarefas dentro de um
determinado intervalo de tempo.
Completar uma tarefa se resume a desenvolver um programa que resolva o problema da tarefa.
O programa é desenvolvido sem nada de interface gráfica e deve recebe uma entrada que são
os parâmetros do problema e deve dar como saída a resposta desejada.
Como exemplo de tarefa temos um problema onde é dado como entrada um valor N e o programa solução deve dar como resposta a soma dos números de 1 a N.
Nesse caso o problema é simples, mas em uma competição real encontramos problemas bastante desafiadores.
Aliás, a graça da competição está exatamente aí.
Os programas nunca são visualmente bonitos, mas as idéias por de trás deles são muitas vezes geniais.
A solução de um problema é avaliada testando-a contra um conjunto de
testes do problema.
Esse conjunto de testes consiste de diferentes entradas para o problema
e as saídas ou regras para validar as saídas correspondentes.
É importante notar que os participantes nunca têm acesso a esses
conjuntos de teste durante a competição.
Quando a avaliação de um programa é feita, executando contra os
testes, há um limite de tempo para o programa retornar a resposta.
Estourar o limite de tempo é considerado falha e, portanto, soluções
ineficientes são inibidas.
As soluções dos participantes podem ser avaliadas durante ou após a competição e a pontuação pode ser dada somente se o programa passar por todos os testes, ou parcialmente, pontuando cada caso de teste que o programa resolve corretamente. Por que Participar?Existem diversos motivos pelos quais uma pessoa pode se interessar em participar de uma competição de programação. Apresentarei alguns como forma de motivar aqueles que estão na duvida (e deixar na dúvida aqueles que não se interessavam :-)).
Desafio
- Desafios intrigam as pessoas e são uma ótima
forma de exercitar a mente. É um grande prazer quando conseguimos
vencer um desafio difícil por nossos próprios méritos, pois nos
sentimos orgulhoso e mais capazes.
Competição
- Participar de uma competição saudável é
sempre uma diversão. Pode ser também um motivo de orgulho, pois você
está lá defendendo sua universidade, sua cidade, ou mesmo seu estado,
contra equipes do país inteiro. Eu sempre sonhei em participar de uma
competição nacional e a OBI e a Maratona foram as oportunidades que eu
tive. Além disso também tem sempre aquela rivalidade característica
de competições entre equipes de uma mesma cidade ou que costumam ficar
próximas na classificação. É muito recompensador saber que após o
esforço de dedicar um tempo à competição você chegou na frente de
rival. Aqui não quero promover a rivalidade agressiva e sim uma disputa
amigável, onde um estimula o outro, como ocorre entre IC-Unicamp,
IME-USP e DCC-UFRJ, por exemplo.
Desenvolvimento Pessoal
- Programar em competições de
programação envolve estar sempre encontrando problemas novos. Dessa
forma, com a prática, o competidor consegue desenvolver uma habilidade
de programar muito mais refinada que o programador mediano. O
competidor consegue:
- Programar muito mais em menos tempo.
- Escrever códigos mais enxutos.
- Desenvolver programas mais eficientes.
- Reduzir drasticamente o número de erros em seus programas.
- Tornar-se "fluente" em sua linguagem de programação.
Isso é algo a ser valorizado, pois com essas
habilidades o competidor certamente se torna mais capaz para trabalhar
tanto no mercado quanto na universidade.
Currículo
- A participação em uma competição nacional de
programação pode ser uma boa propaganda para seu currículo. De forma
similar à idéia de Bill Poucher, diretor da ACM ICPC, só de alguém
estar na universidade já está entre os melhores. Ser o representante da
universidade é estar entre os "melhores dos melhores". Passar para a
final nacional é estar entre os "melhores dos melhores dos melhores", e
por aí vai. Certamente um empregador vai ficar feliz de ver que o
candidato à vaga está entre os melhores da cidade, ou do estado, por
exemplo.
Novos Contatos
- Participar da Maratona de Programação é
uma boa oportunidade de conhecer novas pessoas de diferentes
universidades, cidades e mesmo de outros estados. E daí pode surgir
inclusive novas amizades. Também é uma chance de fazer novos contatos e
passar a trocar idéias sobre projetos que abordam temas comuns ou para
uma eventual pós-graduação ou mesmo um emprego.
Prêmios
- É claro, toda competição tem sempre seus prêmios,
o que não deixa de ser um estímulo. Tanto na Maratona de Programação
quanto na OBI a maior parte dos prêmios são medalhas. Na Maratona há
medalhas para os 10 primeiros colocados. O campeão também ganha um
troféu. Geralmente também há medalhas ou outros prêmios locais para os
melhores do site, por exemplo. Além das medalhas, os melhores colocados
da Maratona recebem da IBM Internacional
umas lembrancinhas tipo "feirinha do Paraguai": relógio, caneta, agenda
eletrônica de 6Kb, webcam que só funciona razoavelmente à luz do sol(!)
e é incompatível com WinXP e Linux... Infelizmente, apesar de ser uma
gigantesca empresa de informática, seus prêmios não são como os
notebooks entregues em outras competições nacionais como o Desafio Sebrae, mas não deixam de ser prêmios, né?
Viagens
- Viajar é muito bom e eu gosto. A menos que o
competidor seja da cidade do site, ele vai acabar viajando logo na
primeira fase da Maratona. Normalmente essa viagem é curta e com gastos
bancados pela própria universidade (há exceções). Se a equipe se
classifica para a final nacional, aí é outra viagem, dessa vez maior
por conta da organização do evento.
Mundial
- Na minha opinião o maior estímulo que alguém pode
ter é ir para o Mundial. Mas esse não é um estímulo para grande parte
dos competidores, pois apenas o primeiro e provavelmente o segundo da
Maratona vão para o Mundial. No entanto se sua equipe estiver bem
preparada então vale à pena se esforçar para conseguir ir ao Mundial. É
uma viagem inesquecível ao exterior onde se entra em contato com
pessoas e culturas do mundo inteiro. Isso com passagem bancada pela SBC
e hotel 5 estrelas e alimentação pagos pela organização do Mundial. É
incrível. Além disso a emoção de estar representando o Brasil no
exterior entre os melhores do mundo é incomparável. Para quem já foi
uma vez, voltar é o maior estímulo que se pode ter. Não me arrependo
nenhum pouco das madrugadas de sábado acordado treinando nos
campeonatos de Valladolid para voltar ao Mundial.
Bom, agora que já listei uma série de motivos para participar dos
campeonatos de programação não há mais desculpa. Estude o conteúdo do
site e bons códigos!
|
|