Desafio
de
Programação I
PET - Engenharia de Computação
Universidade Federal do Espı́rito Santo
http://www.inf.ufes.br/~pet
Monitores:
Guilherme Artém dos Santos
[email protected]
Pablo Santana Satler
[email protected]
Professor:
Clebson Oliveira
[email protected]
1
Objetivo
Espera-se que os alunos que aceitarem a proposta exercitem a manipulação
de listas e de tuplas. Além de exercitarem conceitos como o paradigma
recursivo e o paradigma aplicativo. Além disso, é necessário que os alunos
tenham em mente que esse trabalho é um pequeno desafio, pois há uma certa
complexidade na elaboração do programa resposta. Porém, vale ressaltar,
que todas as dúvidas referentes aos conceitos utilizados no trabalho serão
esclarecidas pelos monitores.
Descrição
Um dos esportes favoritos na Robolândia é o Rali de Robôs. Este rali é
praticado em uma arena retangular gigante de N linhas por M colunas de
células quadradas. Algumas das células estão vazias, algumas contêm figurinhas da Copa (muito apreciadas pelas inteligências artificiais da Robolândia)
e algumas são ocupadas por pilastras que sustentam o teto da arena. Em
seu percurso os robôs podem ocupar qualquer célula da arena, exceto as que
contém pilastras, que bloqueiam o seu movimento. O percurso do robô na
arena durante o rali é determinado por uma sequência de instruções. Cada
instrução é representada por um dos seguintes caracteres: ’D’, ’E’ e ’F’, significando, respectivamente, “gire 90 graus para direita”, “gire 90 graus para
esquerda” e “ande uma célula para frente”. O robô começa o rali em uma
posição inicial na arena e segue fielmente a sequência de instruções dada (afinal, eles são robôs!). Sempre que o robô ocupa uma célula que contém uma
figurinha da Copa ele a coleta. As figurinhas da Copa não são repostas, ou
seja, cada figurinha pode ser coletada uma única vez. Quando um robô tenta
andar para uma célula onde existe uma pilastra, ele patina, permanecendo
na célula onde estava, com a mesma orientação. O mesmo também acontece
quando um robô tenta sair da arena.
Dados o mapa da arena, descrevendo a posição de pilastras e figurinhas, e
a sequência de instruções de um robô, você deve escrever um programa para
determinar o número de figurinhas coletadas pelo robô.
2
Dados de entrada
A entrada será constituı́da de 2 listas, a primeira lista representa a arena e
a segunda lista os comandos a serem seguidos pelo robô.
A primeira lista será formada por listas de char (que podem ser representadas por strings), cada lista representa uma linha da arena, sendo que
a primeira linha representa a linha mais ao norte. Em cada linha, o primeiro elemento representa a célula mais a oeste. Abaixo está um exemplo
da entrada e como seria uma visualização da entrada.
Entrada: [“...#”, “*#O.”, “*.*.”, “*.#.”]
Equivalente para visualização:
...#
*#O.
*.*.
*.#.
Cada célula da arena pode conter um dos seguintes caracteres:
’.’ - célula normal;
’*’ - célula que contém uma figurinha dacopa;
’#’ - célula que contém uma pilastra;
’N’,’S’,’L’,’O’ – célula onde o robô inicia o percurso (única na arena).
A letra representa a orientação inicial do robô (Norte, Sul, Leste e Oeste,
respectivamente).
A lista de comandos também será uma string, onde cada elemento representa um comando, sendo que ’F’ indica ande uma casa para frente, ’D’
indica gire 90o para a direita e ’E’ indica gire 90o para a esquerda.
Exemplo: “FFEFF”
Dados de saı́da
A saı́da deverá ser o número de figurinhas coletadas durante o rali. A função
que deverá retornar o número de figurinhas deverá ser chamada de contaFiguras.
Ela será chamada como:
contaFiguras [arena] [comandos]
Avaliação
O desafio vale 1 ponto extra na média, desde que, o aluno tenha sido
aprovado no curso (média superior a 5 pontos).
Para a avaliação do trabalho serão levados em conta os seguintes itens:
3
• Padrão das exigências;
• Documentação do código (Use comentários para explicar o que você
fez);
• Resposta do problema;
• Não será tolerado plágio;
4
Download

DESAFIO PET 2012/01