Faculdade

Departamento

ToPAS Lx - 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.java, prog.pas).

  • 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

    • javac -encoding utf8 -classpath . Prog.java

    • fpc -v0w -oprog prog.pas

  • O Mooshak corre em Linux e usa as seguintes versões dos compiladores:

    • gcc/g++ 4.8.4

    • OpenJDK 1.8.0

    • Free Pascal 2.6.2

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

  • 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;
    }  
    
    
  • 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();
            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.  
    

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 2016 - Arquivo Vivo).

  2. Premir Register.

  3. Escolher o concurso (ToPAS Lx 2016 - 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 ToPAS_Lx 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 sobre um problema ao júri: (A, B, ..., G) + Ask

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

  • 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, java, pas).

  • Output Limit Exceeded: O output produzido pelo programa é excessivamente grande (> 80 Kb).

  • 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, por vezes, excedeu a memória dada.