Nos concursos ToPAS Lx, a avaliação dos programas é feita pelo sistema Mooshak, desenvolvido no DCC-FCUP. Para que este sistema automático de avaliação considere que um programa resolve um problema, é necessário que o programa satisfaça várias restrições, que se explicam nas seguintes secções:
Para se poder submeter um programa, é necessário estar-se inscrito no concurso. As três secções seguintes explicam a interação com o Mooshak:
O código fonte de cada programa tem de estar num único ficheiro, cujo nome tem a extensão habitual (prog.c, prog.cpp, prog.cs, Prog.java, prog.pas, prog.py).
Se o programa for em Java:
O nome do ficheiro tem de ser igual ao nome da classe que tem o método "main".
Não podem criar pacotes; as classes têm de pertencer ao "package default".
Tamanho máximo (do ficheiro com o código fonte) de um programa: 64 Kbytes.
Os warnings do compilador são considerados erros de compilação.
Compilem os programas (na vossa máquina) antes de os submeterem ao Mooshak, com as mesmas flags de compilação usadas pelo Mooshak:
gcc -std=gnu11 -Wall -Wno-unused prog.c -lm
g++ -std=gnu++11 -Wall -Wno-unused prog.cpp -lm
csc -nologo prog.cs
javac -encoding utf8 -classpath . Prog.java
fpc -v0w -oprog prog.pas
python3 -m py_compile prog.py
O Mooshak corre em Linux e usa as seguintes versões dos compiladores:
gcc/g++ 9.4
C# 3.9
OpenJDK 17
Free Pascal 3
Python 3.8
Tempo máximo de compilação de um programa: 60 segundos.
Tempo máximo de CPU: 1 segundo (por teste)
Memória disponível para variáveis globais e dinâmicas: 3 megabytes
Memória disponível para pilha de execução e variáveis locais: 1 megabyte
Os dados de entrada são lidos da entrada padrão (standard input), como se fossem introduzidos pelo teclado.
Os resultados são escritos na saída padrão (standard output), como se fossem escritos na consola.
Todas as linhas (do input e do output) terminam com uma mudança de linha (carácter '\n').
Por omissão (se o enunciado não especificar o contrário), há exatamente um espaço a separar os dados consecutivos de uma linha.
Nenhuma linha começa com espaços e nenhuma linha termina com espaços (um espaço é o separador).
Os seguintes programas calculam o produto de dois números inteiros. O input tem uma linha com dois inteiros (separados por um espaço) e o output tem uma linha com o produto dos dois inteiros.
C
#include <stdio.h> int main( ) { int m, n, prod; scanf("%d %d", &m, &n); prod = m * n; printf("%d\n", prod); return 0; }
C++
#include <iostream> using namespace std; int main( ) { int m, n, prod; cin >> m >> n; prod = m * n; cout << prod << endl; return 0; }
C#
using System; class Product { static void Main( ) { string[] tokens = Console.ReadLine().Split(' '); int m = Convert.ToInt32(tokens[0]); int n = Convert.ToInt32(tokens[1]); int prod = m * n; Console.WriteLine(prod); } }
Java
import java.util.Scanner; class Product { public static void main( String[] args ) { Scanner input = new Scanner(System.in); int m = input.nextInt(); int n = input.nextInt(); input.nextLine(); int prod = m * n; System.out.println(prod); } }
Pascal
program Product; var m, n, prod : integer; begin readln(m, n); prod := m * n; writeln(prod) end.
Python
def main( ): m, n = map(int, input().split(' ')) prod = m * n print(prod) return main()
Para se poder submeter um programa, é necessário estar-se inscrito no concurso. Os passos para efetuar a inscrição são os seguintes:
Aceder ao Mooshak (através do URL ToPAS Lx - Arquivo Vivo).
Premir Register.
Escolher o concurso (ToPAS Lx 20XX - Arquivo Vivo).
Preencher o formulário com o nome do utilizador (o nome de um concorrente ou de uma equipa) e o endereço de email.
Selecionar um grupo em Group.
Premir Submit.
O Mooshak enviará uma mensagem para o endereço indicado, com o nome do concurso, o nome do utilizador e a password de acesso ao concurso.
Sempre que quiserem submeter um programa a um problema deste concurso, basta acederem ao Mooshak, identificarem-se (introduzindo o nome do utilizador e a password) e premir Login.
Ver o enunciado de um problema: (A, B, ..., G) + View
Fazer uma pergunta ao júri sobre um problema: (A, B, ..., G) + Ask
Esta funcionalidade está desativada nos concursos do arquivo vivo (ToPAS Lx 20XX - Arquivo Vivo).
Se tiverem dúvidas, enviem uma mensagem a "mm at fct.unl.pt".
Submeter um programa para resolver um problema: (A, B, ..., G) + Choose File + Submit
O ficheiro a enviar é o que tem o código fonte do programa (extensão c, cpp, java, pas ou py).
Ver todas as submissões: Submissions
Ver a classificação atual: Ranking
Ver todas as perguntas e respostas: Questions
Ver o significado das mensagens do Mooshak (entre outra informação): Help
As funcionalidades relacionadas com listagens (Print e Printouts) estão desativadas.
Accepted: O programa produziu o output correto em todos os testes. Parabéns! O problema foi resolvido.
Em todos os outros casos, o programa não foi aceite. Para resolver o problema, é necessário corrigir os erros e efetuar uma nova submissão. A mensagem do Mooshak ajuda a identificar o tipo dos erros. Se clicarem na mensagem de erro da submissão que não foi aceite, poderão obter mais informação.
Compile Time Error: Ocorreu um erro ou um aviso durante a compilação (ver Compilação).
Runtime Error: Ocorreu um erro durante a execução do programa.
Time Limit Exceeded: O programa não terminou dentro do limite de tempo dado (ver Execução do Programa).
Memory Limit Exceeded: A quantidade de memória requerida pelo programa é excessiva (ver Execução do Programa).
Wrong Answer: O output do programa não está correto (em, pelo menos, um dos testes).
Presentation Error: O output do programa não está corretamente formatado (por exemplo, há um espaço a mais ou uma linha não terminada com a mudança de linha, ver Input e Output).
Invalid Submission: O ficheiro enviado não tem uma extensão válida (c, cpp, cs, java, pas, py).
Output Limit Exceeded: O output produzido pelo programa é excessivamente grande (> 80 Kbytes).
Program Size Exceeded: O ficheiro enviado é excessivamente grande (ver Programa Fonte).
Requires Reevaluation: Por alguma razão, o programa tem de ser reavaliado.
Se isto ocorrer, enviem uma mensagem a "mm at fct.unl.pt"
Invalid Function: O programa usa uma função não permitida ou a quantidade de memória requerida pelo programa é excessiva (como na mensagem Memory Limit Exceeded).