1. O que são as ONI
O que são as Olimpíadas Nacionais de Informática? Porque é que eu devo participar numa competição destas? Não sei programar, mas isto parece-me interessante, como posso participar? O que é programação? São tudo questões pertinentes que pretendemos direta ou indiretamente responder neste artigo e nos próximos.
Objetivo
As Olímpiadas Nacionais de Informática são um concurso de programação, ou seja, o objetivo é escrever um programa numa das 4 linguagens permitidas C++, Java, Python ou Pascal, que resolva uma determinada tarefa. Em cada tarefa é suposto processar um conjunto de dados fornecidos (que podem ser um conjunto de números, uma grelha de números, uma frase, ...) de acordo com um certo objetivo. Por exemplo, dado um conjunto de números, obter o mínimo desse conjunto (iremos ver exemplos de programas para este e para problemas mais avançados nos próximos artigos). São problemas definidos concretamente, o objetivo é chegar a uma solução que produz uma determinada resposta e não construir uma aplicação gráfica ou interativa. São problemas que têm um cariz algorítmico, que significa que são desafios de certa forma matemáticos que resolvemos com um programa. Isto ficará claro nos artigos sucessivos, onde veremos alguns exemplos de problemas.
Apesar de ser um concurso de programação, não é preciso ter muita experiência de programação para ter sucesso nesta competição. A maior parte (se não todos) os problemas nas Olímpiadas não necessitam de programas muito compridos ou complexos do ponto de vista de programação. Isto porque o objetivo principal é resolver problemas curtos com programas que demorem pouco tempo a serem executados (no artigo Eficiência vs Eficácia iremos discutir este assunto com mais detalhe). Assim, os problemas a resolver têm um cariz ligeiramente matemático e requerem alguma criatividade para serem resolvidos.
Por consequência, mesmo quem nunca programou não está em desvantagem. Aprender os básicos de programação não requer muito esforço e é muito útil além das Olimpíadas (por exemplo, muitos dos cursos universitários nas áreas de engenharia, física, matemática, ... têm uma componente de programação). Para quem nunca programou e está a considerar participar nas Olimpíadas recomendamos aprender C++, visto ser a linguagem mais utilizada neste tipo de concursos, mas ninguém está em desvantagem por usar Java ou Pascal.
Estrutura das ONI
As Olimpíadas são um concurso individual que estão divididas da seguinte forma:
Fase de qualificação: a primeira fase é aberta a qualquer aluno do secundário com idade inferior a 20 anos (para informações mais detalhadas sobre este aspeto convém consultar a página de Informações do site das Olimpíadas mais recente). Os alunos participam remotamente, tentando resolver um conjunto normalmente constituído por 3 a 4 problemas no formato descrito anteriormente durante 48 horas (as datas estão disponíveis no site das Olimpíadas). As pontuações que cada aluno obteve são escondidas durante a prova e são reveladas alguns dias após a prova (o funcionamento da pontuação será explicado no próximo artigo). A avaliação dos problemas é feita de forma automática através da plataforma Mooshak. Iremos testar esta plataforma e ver um problema exemplo no próximo artigo.
Fase final: os alunos com pontuações mais elevadas, num máximo de 30 alunos, são apurados para esta fase, que decorre nas instalações do Departamento de Ciência de Computadores (DCC) da Faculdade de Ciências da Universidade do Porto (o deslocamento é reembolsado e é oferecido um almoço e lanche). Nesta fase é suposto resolver um conjunto de 3 problemas no mesmo formato da qualificação num tempo máximo de 4 horas. Cada aluno tem acesso às pontuações que obteve nos problemas logo após submeter as suas soluções, mas não à dos seus concorrentes. Os concorrentes com melhores pontuações ganham um conjunto de prémios que variam de acordo com os patrocinadores da competição.
Estágio de seleção: os 8 alunos com melhor pontuação na fase final são convidados a participar num estágio de cerca de um mês, onde treinarão as suas capacidades com a ajuda dos organizadores das Olimpíadas. O objetivo deste treino é preparar os alunos para a Olimpíada Internacional de Informática (mais informação sobre esta prova em baixo).
Fase de seleção: o estágio de seleção culmina numa prova, também presencial (no mesmo local que a fase final) cuja pontuação, em conjunto com a pontuação da fase final, determina os 4 alunos que serão escolhidos para participar na Olimpíada Internacional de Informática.
Para mais informações sobre o funcionamento das Olímpiadas assim como o seu regulamento, consultem as devidas páginas do site das Olímpiadas: informações e regulamento.
Olimpíada Internacional de Informática
A Olimpíada Internacional de Informática, conhecida como "International Olympiad in Informatics" em inglês, é a maior competição international de programação para resolução de problemas algoritmicos para alunos do ensino pré-universitário. Na última edição participaram mais de 330 concorrentes de cerca de 90 países diferentes. Cada país pode ter até 4 concorrentes e a prova é individual, nos moldes das Olimpíadas Nacionais. Nesta prova os melhores concorrentes são premiados com medalhas de bronze, prata ou ouro, sendo que metade dos concorrentes ganha pelo menos bronze, um quarto ganha pelo menos prata e um doze avos ouro. Apesar de serem entregues várias medalhas, ganhar qualquer medalha é um feito muito difícil de conseguir e assim reconhecido por várias universidades e empresas internacionais.
Portugal participa nesta prova desde 1992 e desde então conseguiu 8 medalhas de bronze e 1 de prata, tendo tido o seu melhor resultado de sempre no ano passado (2018). É possível consultar um sumário das prestações portuguesas neste prova aqui.