ARQUIVO VIVO

Resolução dos Problemas no Mooshak

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:

Programa Fonte

  • 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.

Compilação

  • 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.

Execução do Programa

  • 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

Input e Output

  • 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).

Exemplos de Programas

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()

Inscrição num Concurso

Para se poder submeter um programa, é necessário estar-se inscrito no concurso. Os passos para efetuar a inscrição são os seguintes:

  1. Aceder ao Mooshak (através do URL ToPAS Lx - Arquivo Vivo).

  2. Premir Register.

  3. Escolher o concurso (ToPAS Lx 20XX - Arquivo Vivo).

  4. Preencher o formulário com o nome do utilizador (o nome de um concorrente ou de uma equipa) e o endereço de email.

  5. Selecionar um grupo em Group.

  6. 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.

Funcionalidade do Mooshak

  • 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.

Mensagens do Mooshak

  • 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).