segunda-feira, agosto 04, 2008

Google Code Jam 2008 - Online Round 2

Neste sábado passado (no horário brasileiro) ocorreu a segunda rodada da competição. Após as minhas dificuldades na rodada anterior, minha única expectativa era conseguir resolver pelo menos parcialmente um problema. Não consegui nem isto! Neste post faço um primeiro levantamento do que faltou para conseguir um desempenho melhor.

A Segunda Rodada

Como era de se esperar, a segunda rodada foi mais difícil e mais disputada. Foram 2 horas e 4 questões. Como da vez anterior, as questões tinham pesos diferentes. Os últimos classificados para a próxima fase fizeram 20 pontos o que corresponde a acertar por completo pelo menos um problema (exceto o teoricamente mais fácil) ou então acertar parcialmente 3 problemas. Por outro lado, apenas os 16 primeiros conseguiram resolver totalmente os quatro problemas.

Pretendo estudar nas próximas semanas as soluções das questões desta rodada e da anterior; à medida em que conseguir vou publicando no blog.

O Que Faltou

Faltou bastante coisa! Para conseguir ir bem numa destas competições é necessário prestar atenção em algumas coisas e um certo preparo, que o meu dia-a-dia certamente não traz. Como fiquei sabendo meio com pouca antecendendia e só decidi participar na véspera, praticamente não me preparei. Alguns pontos básicos:
  • A Escolha da Linguagem: a minha opção por usar o C, embora não tenha comprometido o meu desempenho, talvez não seja ótima. Linguagens como C++ e Java oferecem maiores recursos em suas bibliotecas padrão (se bem que a programação não precisa ser orientada a objeto), agilizando a codificação da solução.
  • Conhecimento da Biblioteca: No meu dia a dia uso uma parte muito pequena da biblioteca padrão do C e dependi demais do help. O ideal é saber de cor e salteado as funcionalidades da biblioteca. Isto vale dobrado para o caso de optar por uma linguagem que não use no dia-a-dia.
  • Conhecimentos Específicos da Linguagem e da Biblioteca: Os problemas envolvem algumas partes específicas como entrada e saída e manipulação de números inteiros de 64 bits e ponto flutuante.
  • Conhecimentos de Algorítmos: Alguns problemas envolvem algorítmos clássicos que eu nunca cheguei a estudar formalmente: geração de combinações, programação dinâmica, etc. Já comprei um bom livro, falta estudar.
  • Conhecimentos de Matemática: Particularmente Teoria dos Números e Geometria.
  • Resolução de Problemas: Existem técnicas para a solução de problemas, e eu as desconheço. Tenho um livro que comprei para o meu filho, mas ele me pareceu muito confuso, preciso tentar estudá-lo e, se for o caso, procurar um melhor.
Além de tudo isto, acabei deixando de lado os cuidados básicos de fazer uma prova: alimentação, descanço, ambiente apropriado, ler todas as questões antes de tentar resolver uma, não entrar em pânico, etc.

Estou torcendo para ano que vem a Google promover uma competição com regras parecidas, se tudo correr bem espero estar melhor preparado e conseguir avançar mais.

Nenhum comentário: