AED 2021/2022 (L.EIC011)

Mooshak #01 - Introdução
(semana de 08/11 a 12/11)


Nota Inicial

Os exercício do Mooshak desta aula não contam para nota e são completamente opcionais (a vossa prioridade deve ser primeiro completar os exercícios base das aulas práticas). Os exercícios aqui colocados destinam-se a quem quer ir mais além do que requisitos mínimos e quiser ter uma camada de submissão com avaliação automática, sendo que todas as semanas iremos colocar disponíveis novos problemas.

Para tornar tudo um pouco mais interessante, eu (Pedro Ribeiro) deixo desde já prometido que irei pagar uma refeição na minha companhia (uma francesinha no Capa Negra II) a três estudantes desta UC:

Espero para ver os vosses "dotes" algorítmicos ao longo destas semanas! :)


Problemas para submissão

Nesta aula foram disponibilizados os seguintes problemas:


Exercício 1) O meu primeiro problema aceite... no Mooshak de AED!


Nesta unidade curricular vamos usar o sistema Mooshak como uma maneira opcional e adicional para avaliar automaticamente código.

Para aceder ao sistema use o seu login (com "up") e a password que lhe foi enviada para o email institucional (email enviado a 8 Nov com o título "[AED] Password para o Mooshak - login")
(se tiver problemas em aceder envie uma mensagem no Slack ao docente Pedro Ribeiro)

  1. Comece por aceder ao Mooshak e verifique se o seu login funciona.
  2. Leia o enunciado do problema [AED 01] O sentido da vida (que é trivial)
    Familiarize-se com as secções típicas de um enunciado no Mooshak de AED (e de um problema num online judge, de um modo geral):
  3. Algumas informações técnicas:
  4. Para iniciar a sua "viagem", aqui fica um exemplo de solução para este problema: aed01.cpp
  5. Ao executar o seu programa tem por exemplo duas maneiras de o testar com um dado input:
  6. Depois de ter testado na sua máquina, submeta então o código no Mooshak para o problema [AED 01] O sentido da vida
  7. Depois de ter submetido clique no resultado da sua submissão para ver uma tabela com feedback detalhado da sua submissão.

Exercício 2) Os meus primeiros erros no Mooshak

Para ficar familiarizado com os erros e confortável com a maneira como o Mooshak funciona, o objectivo deste exercício é provocar alguns erros ao submeter o problema [AED 01] O sentido da vida. Use como base o seu código aceite.

  1. Provoque um erro de apresentação (Presentation Error) (ex: retire a mudança de linha na impressão) e submeta para ver o feedback detalhado que é dado nesse caso.
  2. Provoque um erro de compilação (Compile Time Error) (ex: retirar um ';') e verifique o feedback detalhado dado nesse caso.
  3. Provoque uma resposta errada (Wrong Answer) (ex: mude a impressão para ser sempre 3). Note no feedback detalhado como consegue ver agora em que testes falha, e como tem acesso ao primeiro teste onde falha (sendo nós controlamos os testes que ficam "disponíveis": tipicamente o último é sempre secreto para evitar que façam "reverse engineering" a todos os testes e manter-vos "honestos").
  4. Provoque um excesso de tempo de execução (Time Limit Exceeded) (ex: faça com que o ciclo nunca termine) e verifique qual o feedback detalhado (cada problema pode ter um tempo limite diferente: por exemplo este [AED 01] tem configurado 1 segundo como tempo limite de execução)

Como isto já deve ficar com uma ideia de alguns dos princiais erros, e do comportamento do Mooshak nesses casos. Lidar com isto no futuro será um skill importante, não apenas neste unidade curricular.


Exercício 3) Resolvendo um problema

Agora que já percebeu a ideia, passemos para um primeiro problema um pouco mais "a sério". Estes problema envolve apenas instruções básicas como ciclos:

  • Resolva e submeta o problema [AED 02] Números arranjadinhos
    Pode optar por tentar resolver completamente de forma autónoma, ou consultar dicas, que estão "escondidas" para não serem spoilers para todos (mesmo que faça "sozinho", não deixe no final de vir espreitar as dicas).


    Exercício 4) Dificuldade++

    Para terminar esta primeira aula, aqui fica um problema um pouco mais "giro" para que possam usar um pouco a cabeça a pensar num algoritmo, ao invés de ser logo "imediata" uma ideia de solução.

  • Resolva e submeta o problema [AED 03] Matrículas


    Exercício de Desafio

    Todas as semanas vou colocar disponível pelo menos mais um exercício um pouco mais desafiante.

    Para esta semana o desafio tem a ver com a eficiência algorítmica e como desenhar um algoritmo mais eficiente para um problema que já deve ter resolvido. Para isso, deve tentar resolver o seguinte problema, que está disponível para submissão no Mooshak:

    Notem a diferença nas restrições e como os limites impedem uma solução naive que itere sobre todos os inteiros consecutivos até descobrir a resposta.

    Como este é um problema de desafio, não vou para já dar nenhuma dica, ficando à espera de ver os vossos programas :)

    Se já tiverem feito tudo e estiverem "presos" neste, e quiserem mesmo fazer o desafio, podem contactar-me para eu "dosear" as dicas, sabendo que este problema é substancialmente mais difícil que a versão "fácil" original.