Nome do concurso - Universidade de Coimbra

Propaganda
UNIVERSIDADE DE COIMBRA
FACULDADE DE CIÊNCIAS E TECNOLOGIA
Departamento de Engenharia Informática
Concurso de Programação Inter-Escolas
2004-2005
Novembro 2004
1. Informação geral
1.1 Objectivo do Concurso
Este concurso de programação inter-escolas tem como principal objectivo
promover o gosto pela programação e resolução de problemas junto dos
alunos das Escolas Secundárias, é uma forma de fomentar as actividades
extra-curriculares e deverá ser visto como uma medida para tentar
aproximar a Universidade das Escolas e vice-versa.
1.2. Breve história do concurso
Este Concurso vai-se realizar pela terceira vez em 2004-2005, após o
sucesso muito interessante do Torneio no dia aberto (2002-2003) e do
Concurso de Programação realizado no Dia Aberto do Dep. Engenharia
Informática em Março de 2004, onde estiveram presentes equipas de
alunos de várias escolas secundárias do país.
1.3. Em que consiste este concurso de programação?
O concurso vai-se realizar em duas fases:
(a) Fase de Eliminatórias: a decorrer nos meses de Janeiro e Fevereiro, e
que servirá para apurar 15 equipas para a final do Concurso.
(b) Fase Final do Concurso: a realizar in-loco no dia 1 de Março de 2005
no Dep. Eng. Informática da Universidade de Coimbra. Nesta fase
final, as 15 equipas irão competir directamente entre si o objectivo
será resolver o máximo de problemas num tempo limite de 3 horas.
1.4. O que é preciso para concorrer?
Em primeiro lugar é preciso ter muita vontade de vencer desafios, de
aprender, e de participar num concurso inter-escolas. Para resolverem os
problemas, os alunos devem ter bons conhecimentos sobre algoritmos,
rapidez de programação e bom espírito de equipa. Podem ser usadas as
seguintes linguagens de programação: C, C++, Java e Pascal.
1.5. Quantas/Que equipas podem participar?
No ínicio pode-se inscrever um número ilimitado de equipas. Cada
equipa deve ser composta por 3 estudantes e deve ter um Treinador. O
Treinador deverá ser um Professor da respectiva escola. Um estudante é
considerado “elegível” para participante se estiver inscrito no 10º, 11º ou
12º ano de escolaridade de uma instituição do ensino secundário no ano
lectivo de 2004/2005. Cada Escola pode inscrever uma ou mais equipas e
cada Professor pode ser o Treinador de mais do que uma equipa. Salvo
algum imprevisto, inscrições deverão estar abertas até ao final de
Dezembro de 2004.
1.6. A Fase Inicial de Eliminatórias
A fase de eliminatórias decorrerá nos meses de Janeiro e Fevereiro, de
modo a seleccionar as 15 equipas que irão participar na grande final do
Concurso no dia 1 de Março de 2005. Neste período serão lançados 7
problemas no site Web do Concurso: http://mooshak.dei.uc.pt. Os
problemas serão lançados no dia 19 de Janeiro e existe basicamente um
deadline de um mês para a sua resolução (até 19 de Fevereiro). A
submissão dos problemas também será feita remotamente no servidor
mooshak.dei.uc.pt. As instruções para submissão de problemas estão
disponíveis online no site do Concurso.
Na fase de eliminatórias a ordenação das equipas segue os seguintes
critérios:
i. O número de problemas resolvidos. O primeiro critério de
seriação é o número de problemas resolvidos (independentemente
de qual ou quais problemas resolvidos, desde que estejam na lista
de problemas propostos).
ii. O tempo total necessário (desde o início do concurso) para
resolver os problemas. Este critério é o primeiro critério de
desempate para equipas com o mesmo número de problemas
resolvidos.
iii. Cada submissão não aceite pelo sistema (por estar errada),
implicará uma penalização automátia de 20 minutos.
Durante as eliminatórias, as equipas podem submeter soluções para os
problemas quantas vezes pretenderem. A seriação obtida serve apenas
como apuramento para a final. A página Web irá manter um ranking com
a classificação absoluta das equipas participantes. O Juri será composto
por elementos do Clube de Programação do DEI, que constituem a
Comissão de Avaliação respeitante a este concurso, e irá escolher as 15
equipas apuradas. Em caso de empate, o júri do concurso reserva-se ao
direito de escolher as equipas participantes.
Na grande final, o número de problemas resolvidos bem como o tempo
acumulado serão recolocados a zero, e portanto todas as equipas entram
em igualdade de circunstâncias.
1.7. Prémios para os melhores classificados
As equipas que se classificarem nos 3 primeiros lugares, terão direito a
prémios, que serão definidos mais perto do dia 1 de Março. A equipa que
ficar classificada em primeiro lugar terá direito a um prémio para a
escola. As 15 equipas que participarem na final terão todas direito a um
Diploma de Participação.
2. Regulamento do Concurso- Fase Final
2.1. Ambiente de trabalho

Cada equipa terá acesso a um computador, equipado de maneira
semelhante a todas as outras equipas;

Cada equipa terá acesso aos compiladores de C, C++, Java e Pascal;

Os programas deverão estar escritos num só ficheiro e deverão
obedecer às normas standard (ANSI-C, ISO-Pascal, Java standard...).
Será permitido o uso de STL no C++ e das packages de classes
habituais do Java;

Todos os computadores estarão equipados com o Sistema Operativo
Linux e Windows XP;

As equipas poderão levar todo o tipo de material escrito, sendo
expressamente proibido levar material em suporte informático,
calculadoras de bolso, portáteis e telemóveis;
2.2. Concurso e problemas

O concurso tem a duração de 3 horas para tentar resolver 4 a 5
problemas;

Os problemas são, dentro do possível, abrangentes, de forma a evitar
a dependência de uma determinada linguagem;

Os enunciados dos problemas serão escritos em Inglês;

Quando uma equipa achar que tem uma proposta de resolução de um
problema, submete-a ao júri do concurso, que a avalia, indicando se
está certa ou errada.

A avaliação dos problemas será feita por um sistema de avaliação
automático cujo resultado será posteriormente confirmado pela
Comissão de Avaliação do concurso.
2.3. Classificação

As equipas são classificadas de acordo com o número de problemas
resolvidos;

Em caso de empate, são classificadas pelo somatório do tempo gasto
na resolução de cada problema (só contam os problemas resolvidos
por cada uma). O tempo gasto na resolução de um problema é igual
ao tempo passado desde o início do concurso até à sua submissão
correcta mais 20 minutos de penalização por cada submissão errada
para esse problema. As submissões erradas para problemas não
resolvidos não contam para esse somatório.
3. Ambiente do concurso
3.1. Conceitos básicos

O concurso será suportado por um ambiente de rede. A rede apenas
pode ser usada para a submissão de problemas, visualização de
listagens disponibilizadas pelo ambiente do concurso e visualização
da documentação disponibilizada. Qualquer outro tipo de acesso ao
ambiente do concurso (login remoto, ssh, ftp, telnet, mail ou outras
actividades de rede) é expressamente proibido.
Qualquer participante que descubra uma falha de segurança no
sistema deve comunicá-la de imediato a um membro da organização
do concurso.

Cada equipa terá acesso a quatro compiladores: Pascal (Free Pascal
1.0.10), C (gcc), C++ (g++) e Java (javac do Sun JDK 1.4.2). Cada
submissão poderá estar em qualquer uma destas linguagens,
independentemente das linguagens usadas em submissões anteriores.

Cada equipa terá acesso a um só computador. Todas as equipas terão
equipamento semelhante e o mesmo sistema operativo.

Cada submissão é aceite ou rejeitada, sendo a equipa notificada,
quase instantaneamente, do resultado. Os diferentes resultados
possíveis e o seu significado são:
o Accepted: o programa passou em todos os testes e é aceite
como correcto.
o Presentation error: o output parece estar correcto mas não está
a ser apresentado no formato adequado. Como não é sempre
linear a distinção entre este resultado e o resultado “wrong
Answer”, ele é apenas enviado nos casos mais óbvios. Ou seja,
em casos menos óbvios, o problema poderá também ser de
“presentation error”, embora o resultado tenha sido “wrong
answer”.
o Wrong answer: o programa correu em um ou mais casos de
teste sem “runtime error”, mas o output gerado não é igual ao
esperado.
o Time limit exceeded: o programa não terminou no espaço de
tempo alocado para o efeito. Duas razões típicas para este erro
são a existência de “ciclos infinitos” no programa ou um
algoritmo demasiado ineficiente para o problema.
o Runtime error: o programa “crashou”, isto é, terminou
prematuramente devido a um erro de tempo de execução. Ex.:
Segmentation fault em C ou uma Exception em Java.
o Compile time error: o sistema não conseguiu compilar
correctamente o programa. Dependendo das flags usadas na
compilação (descritas mais à frente), isto pode significar erros
ou simples warnings.
o Invalid submission: a submissão foi feita usando uma extensão
inválida (as extensões correctas são descritas mais à frente) ou
por um outro processo que não aquele disponibilizado pela
interface.
o Output too long: o programa gera um output demasiado longo
para o problema em causa. Os limites dependem quer do
problema em si, quer dos casos de teste utilizados, mas são
geralmente baixos (à volta de 100 Kb por omissão).
o Program size exceeded: o código do programa é demasiado
extenso e não é considerado (limite à volta de 100 Kb).
o Requires re-evaluation: por alguma razão, a submissão
necessita de ser re-avaliada.
o Invalid function: o programa tenta usar funcionalidades da
linguagem que, por várias questões, não estão disponíveis.
Nota: Poderá ainda, ocasionalmente, surgir o resultado “Evaluating”.
Este resultado é temporário e significa que a submissão está ainda
a ser avaliada.
3.2. Sistema de avaliação Mooshak
Neste concurso será utilizado o sistema de avaliação Mooshak, software
desenvolvido pelo Departamento de Ciências da Computação da
Universidade do Porto. Este software é “web-based” e comporta-se como
um completo gestor de concurso, assim como juíz automático.
Comporta quatro formas de acesso (interfaces de utilizador):

Participante
Permite aos concorrentes:








Visualizar os enunciados dos problemas;
Fazer upload do código fonte de um programa como
potencial solução para um problema;
Fazer perguntas aos juízes;
Aceder à lista completa de perguntas e correspondentes
respostas dos juízes;
Aceder à lista de submissões que foram feitas desde o
início do concurso por todas as equipas;
Aceder ao código fonte das submissões feitas pela equipa;
Aceder à classificação geral do concurso.
Administrador
Permite aos administradores gerir todos os aspectos relacionados
com o sistema, como sejam a configuração de novos concursos
(equipas, passwords, problemas, casos de teste, limites de tempo,
linguagens, comandos de compilação, duração, etc.), a gestão de
utilizadores ou a gestão dos vários servidores quando existirem.

Juíz
Permite aos juízes:



Apoiar o processo de juízo dos problemas, validando os
resultados do juíz automático, fazendo assim a avaliação
final;
Responder às perguntas feitas pelas equipas.
Público em geral
Permite que o público em geral (audiência) siga a evolução do
concurso.
3.3. Utilizar o Mooshak

Acesso ao sistema
A todas as equipas é fornecido um login e uma password de acesso ao
sistema Mooshak enquanto “Participante”. Este login e esta password
deverão ser usados na autenticação na página inicial do concurso.

Submissões e avaliação
Para fazer a submissão de uma tentativa de solução para um problema,
deve proceder-se da seguinte forma:
o No topo da interface de utilização, escolher o problema que a
equipa está a tentar resolver;
o Carregar no botão “Browse...” por debaixo da lista de problemas
e escolher a localização do programa que se pretende apresentar
como solução;
o Carregar em “Submit” no canto superior direito do ecrã.
Depois de efectuada a submissão, o resultado da avaliação aparece quase
instantaneamente. Inicialmente, esse resultado estará marcado com o
estado “Pending”, para indicar que é necessário esperar pela validação do
juíz responsável. Quando isso acontecer, o estado do resultado passará a
“Final”.
Nota: É considerada conduta irregular, e pode ser considerado motivo de
desqualificação, o envio de várias submissões num curto espaço de
tempo, principalmente perto do final do concurso.

Comandos de compilação e extensões de ficheiro
Estes são os comandos, com as respectivas opções de compilação, e as
extensões a usar para cada uma das linguagens disponíveis no concurso:
o C (gcc)


comando: gcc –Wall –Werror –pedantic –ansi –lm file.c
extensão: .c
o C++ (gcc/g++)


comando: g++ –Wall –Werror –pedantic –ansi –lm file.cpp
extensão: .cpp
o Java (jdk 1.4.2)


comando: javac file.java
extensão: .java
o Pascal (fpc 1.0.10)


comando: fpc –v0w –oprog file.pas
extensão: .pas
Notas importantes:
o Em geral, o nome do ficheiro usado é irrelevante para o sistema,
ao contrário das extensões, que são essenciais, uma vez que é a
partir delas que o sistema identifica a linguagem usada.
No entanto, no caso do Java, o nome do ficheiro, de acordo com
o standard, deve coincidir com o nome da classe principal do
programa. Se isto não se verificar, mesmo sendo o programa uma
solução correcta para o problema, ele é rejeitado pelo juíz
automático, podendo ser obtido o resultado “Runtime Error” ou
“Compile Time Error”, dependendo do compilador usado (no
caso do javac obtém-se “Runtime Error”, o que pode ser
enganador).
o As flags de compilação aqui publicadas devem ser também
usadas pelas equipas nos testes que efectuarem localmente na sua
máquina. Isto serve obviamente para que se evitem “Compile
Time Errors”.

Manuais
Se usado Linux, o sistema inclui as usuais man-pages, nas quais se pode
obter muita informação sobre as funções do C. A organização
disponibiliza ainda no servidor da prova a seguinte documentação:
o Java: documentação do JDK em HTML;
o STL: documentação do STL (Standard Template Library) do C++;

Imprimir os programas
Para imprimir uma cópia dos programas (e não dos enunciados, já que
estes são distribuídos em papel a todos os participantes), que torne
possível o “offline debugging” (uma vez que só existe um computador),
pode fazer-se upload do código para o Mooshak, tal como para uma
submissão e carregar em “Print” no menu da direita.
O juíz decide aprovar ou não o pedido de impressão, e um dos membros
da equipa de apoio é encarregue de entregar a impressão à equipa.

Enunciados dos problemas
Apesar de todos os participantes terem uma cópia dos enunciados dos
problemas em papel, eles podem ser vistos também no browser se depois
de seleccionado o problema desejado se carregar em “View”.

Colocar questões
Se a equipa precisar de colocar uma questão ao juíz sobre um dos
problemas pode fazê-lo seleccionando o problema e carregando em
“Ask”. Depois de colocada a questão, todas as equipas têm acesso à
mesma e à respectiva resposta, quando e se esta for dada pelo juíz. Se,
porque algumas perguntas poderão não ser respondidas por se considerar
que ao dar uma resposta se está a revelar informação relevante para a
resolução do problema, ou se a questão já tiver sido respondida.
A má utilização desta funcionalidade, por exemplo no sentido de
encontrar a solução para um problema, pode ser considerada como
conduta irregular pelos juízes.
Download