Algoritmos e Estrutura de Dados I - AE22CP - 2013/1 |
TRABALHO PRÁTICO 1 |
Bruno César Ribas |
- Prólogo
- A reunião estratégica
- Movimentação
- Saída
- Execução
- Exemplos de Entrada e Saída
- Ranking
- Prazos
- Critérios da Correção
Prólogo
Frodo Bolseiro é um jovem e perspicaz Hobbit que recebeu uma nobre, porém complicada, tarefa. A tarefa de destruir o anel de Sauron.
O anel é tão complicado que várias gerações de humanos já o tiveram em seu poder mas nunca o destruíram. O Anel passou a Isildur, que se recusou a destruí-lo, alegando herança de seu reino. Deixou o reino de Gondor para os herdeiros de seu irmão Anárion, pois ele ficaria com Arnor ao norte. Mas quando retornava, foi emboscado por orcs. Pôs o Anel, ficando invisível, e quando tentava atravessar o Anduin, o Anel o traiu, saindo de seu dedo e fazendo-o ser visto. Foi então morto. wikipedia
Muito tempo depois, um pescador ribeirinho chamado Déagol pescava com seu primo Sméagol, quando caiu na água e encontrou o Anel. Sméagol o cobiçou o objeto e matou Déagol enforcado, permanecendo assim com o Um Anel por volta de 500 anos. Então Bilbo, numa aventura com os treze anões, se perdeu, indo parar na caverna de Sméagol (Gollum). Assim encontra o Anel e o guarda. Após vários infortúnios, Bilbo conseguiu escapar da perseguição de Gollum, até que o Anel foi parar no Condado, chegando às mãos de Frodo. wikipedia
Enquanto Frodo segue em sua épica jornada acompanhado do fiel, e muitas vezes o salvador, Sam, os humanos precisam juntar tropas para conseguir lutar contra forças de Sauron que patrulham e exterminam os moradores da terra média.
Nesse momento histórico vamos apenas nos focar nas estratégias para conseguir aumentar o nosso número de tropas. Aragorn o chamou, pessoalmente, para preparar a estratégia para angariar mais tropas em um reino (ou feudo) não muito longe. Mas não se iluda! O caminho é complicado. Muitos Orcs de Sauron estão no caminho e nem sempre teremos a força para batalhar contra essas tropas, por isso uma estratégia é extremamente crucial para sairmos vitoriosos.
A reunião estratégica
Aragorn inicia a nossa reunião abrindo o mapa da Terra Média com os marcadores de tropas que podem se aliar a nós e onde se encontram tropas Orcs. Essas tropas foram identificadas por batedores humanos que bravamente observam a movimentação em terra.
O mapa é bem simples, e você como um Computero moderno já consegue imaginar como representar esse mapa.
O mapa
O mapa da Terra Média é bastante simples suas dimensões nunca extrapolam 500 Linhas por 500 Colunas, pois esse é o máximo que os batedores conseguem avaliar por vez.
Então o mapa é um arquivo de texto onde a primeira linha possui 2 números inteiros L e C indicando, respectivamente, a quantidade de linhas e colunas do mapa.
Sabemos que L e C <= 500
Depois existirão L linhas com C colunas onde cada posição podemos ter algum desses caracteres:
- '.' caminho livre
- '#' obstáculo, pode ser cadeia de montanhas ou floresta densa. E é intransponível
- 'R' Rio, lugar intransponível
- 'P' Ponte de um rio
- 'A' onde nós estamos
- 'T' localização de lugar com tropas que tentaremos aliança
- 'O' localização com Orcs
- 'S' localização do Smeagel
Exemplo de um mapa:
10 30 ############################## #...O.......S..O.....RR......# #...................R.RR..T..# #....................RR......# #...RRRPPRR......###..PP.....# #..RR.....RR.....#R#..RR.....# #.RR.......R.....###.........# #RR........RR..O.............# #...A......RR.............O..# ##############################
Sabemos também que nunca teremos mais que 40000 tropas de Orcs no mapa.
Depois do mapa teremos informações a respeito do tamanho das tropas, tanto nossas como de Orcs e possível aliadas.
A primeira linha após o mapa possui um único número inteiro representando quantas tropas nós temos em nossa posição atual, a próxima linha teremos um único inteiro representando quantas tropas possivelmente aliadas temos (na posição T), teremos N linhas (onde N é a contagem de posições com 'O' no mapa) onde cada possui um único inteiro representando a quantidade de Orcs na posição da ordem da leitura de 'O' no mapa. Então o primeiro número representa a quantidade de orcs na linha 1 coluna 4 (considerando que a linha e coluna começam com índice 0), o segundo número da linha 1 coluna 15, o terceiro numero é da linha 7 coluna 15 e por fim o da linha 8 coluna 26.
Então com todos esses dados o arquivo de entrada ficaria:
10 30 ############################## #...O.......S..O.....RR......# #...................R.RR..T..# #....................RR......# #...RRRPPRR......###..PP.....# #..RR.....RR.....#R#..RR.....# #.RR.......R.....###.........# #RR........RR..O.............# #...A......RR.............O..# ############################## 1000 3000 500 300 700 2000
Movimentação
Sairemos com nossas tropas rumo ao nosso aliado e para isso a movimentação é necessária. Para isso dispomos de alguns comandos:
- 'baixo' - Movimenta toda a tropa para baixo no mapa;
- 'cima' - Movimenta toda a tropa para cima;
- 'direita' - Movimenta toda a tropa para a direita, e;
- 'esquerda' - Movimenta toda a tropa para a esquerda.
Cuidado com o Orcs
- Novas Informações, 25/Jul
Atenção, entrar em uma posição com tropas Orcs implica diretamente uma batalha! E batalhas sempre trazem baixas!
- Sempre que você tiver pelo menos 3 vezes mais tropas que Orcs a sua perda é
de 5%, então se você enfrentar uma batalha com os 300 Orcs(veja acima) a sua
tropa de 1000 homens passa a ficar com 950.
- [3, oo[
- Se você tiver entre 1.5 e 3 vezes mais tropas a perda é de 10%
- [1.5, 3[
- Se você possuir de 1 a 1.5 vezes mais tropas a perda é de 20%
- [1, 1.5 ]
- Se você possuir menos tropas todos os seus homens morrem e você perde a luta A questão dos arredondamentos é tão importante quanto delicada. Se a conta for feita para saber quantos homens morremos, esse valor deve sempre ser arredondado para cima, afinal se 9.1 homens morrem significa que 9 morreram e 1 perdeu a perna ou o braço, e portanto vamos considerá-lo morto! Logo 10 morreram. Imagine uma batalha onde você possui 635 homens, e irá lutar contra 50 Orcs, a regra de perda é a primeira pois temos mais que 3x a quantidade de Orcs, logo perderemos 5% dos homens. O que nos deixará com 603 homens.
Smeagel Traiçoeiro
- Novas Informações, 25/Jul
O Smeagel não é mole não, se você passar no local em que o Smeagel se encontra você perderá 1% de homens da sua tropa a cada 2 movimentações.
Se você for para uma posição onde vai atualizar a perda de 1% de homens por causa do Smeagel e nessa posição existe tropa Orc, você deve primeiro atualizar a perda do Smeagel e depois das tropas.
Por exemplo na situação abaixo:
3 10 ########## #AS.O...T# ########## 100 200 50
A solução será:
direita direita direita direita direita direita direita 86
Primeiro passa no Smeagel, e logo perde 1%, passando a ficar com 99 homens na tropa. Depois de 2 passos outra perda de 1% do Smeagel, passando para 98 homens e como é uma posição com Orcs acontece uma luta e perdemos 10% (de acordo com as regras da seção anterior). Depois mais 2 passos e perde mais 1% contra o Smeagel, saindo de 88 para 87 homens, e por fim quando chega na posição final perde mais 1% para o Smeagel (por ter andado mais 2 passos) saindo de 87 para 86 homens.
Saída
- Nova informação, 25/Jul
O seu programa deverá gerar uma saída que contenha os comandos que levam a
sua tropa para o local onde tentaremos uma nova aliança, além disso o seu
programa deve imprimir a quantidade de tropas que restaram quando chegaram
ao fim da movimentação.
TODA LINHA TERMINA COM UMA QUEBRA DE LINHA
Uma solução para o mapa acima é:
direita direita direita cima cima cima cima cima direita direita direita direita direita direita direita direita baixo baixo baixo direita direita direita direita direita direita direita direita direita direita direita cima cima cima cima cima 800
Execução
A entrada e saída do programa devem ser feitas pela entrada e saída padrão ( como se estivesse lendo as informações pelo teclado e imprimindo na tela)
exemplo de execução:
time ./meuprograma < mapa.txt > solucao.txt
Onde "meuprograma" é o nome do executável do trabalho (pode ser outro nome qualquer), e "mapa.txt" é o arquivo que contém o mapa da terra média está. O arquivo "solucao" é o arquivo que armazenará a saída do seu programa.
Quando executar o seu programa da forma indicada abaixo , o sinal '<' significa que o conteúdo do 'mapa.txt' será passado ao programa como se ele estivesse sendo lido do teclado. E o sinal '>' significa que tudo que o seu programa imprimir na saída padrão será salvo em 'solucao.txt'. E 'time' é comando que contará o tempo de execução do seu programa.
Exemplos de Entrada e Saída
- Adicionado 3 exemplos, 25/Jul
- Exemplo 1 Arquivo.txt / Possível Solução
- Exemplo 2 Arquivo.txt / Possível Solução
- Exemplo 3 Arquivo.txt / Possível Solução
Não se limite a esses exemplos, crie seus próprios exemplos!
Ranking
- Mais um critério de desempate, 26/Jul
- Liberado, 25/Jul
O ranking será feito por disputas diárias. Para participar basta enviar o código que o sistema copilará e executará.
Para participar do Ranking o seu código deve funcionar em LINUX, recomendamos o uso do Ubuntu. Se o sistema não conseguir compilar seu programa apenas será avisado que não conseguiu e nada mais.
A sumissão para o Rank é Obrigatória.
- A tabela de execuções pode ser vista em: AQUI
No Rank a ordenação será considerada pelo SCORE, definido como:
Tropas - Passos-SEM-Smeagel - 2* Passos-COM-Smeagel
- Score MAIOR é considerado como melhor
Em caso de empate no Score serão considerados os seguintes critérios:
- Maior número de tropas
- Menor passos com Smeagel
- Menor quantidade de passos (geral)
- Tempo de Execução
Prazos
- Atualizado em 31/Jul
- Prazo de entrega:
Dia 09 de Agosto de 2013Dia 23 de agosto de 2013- O sistema de submissão será encerrado às 23h50 do dia
0923.
- O sistema de submissão será encerrado às 23h50 do dia
Critérios da Correção
- O trabalho vale 100 pontos
- Os trabalhos serão executada contra todos os mapas publicados no rank.
- Se o programa falhar em qualquer mapa terá um desconto de 20 pontos, e
desconto adicional de 5 pontos por cada mapa que falhar.
- Se falhar em apenas 1 mapa terá um desconto de 20pontos, se falhar em 2 mapas o desconto será de 25pontos, em 3 mapas desconto de 30pontos, e assim por diante.
- Se o programa falhar em 50% ou mais dos mapas, terá nota automaticamente em 0.
- Se o programa falhar em qualquer mapa terá um desconto de 20 pontos, e
desconto adicional de 5 pontos por cada mapa que falhar.
- Os programas que não falharem em nenhum mapa entrarão na rodada especial
para ponto extra
- Na rodada especial será executado um novo mapa
- Se o programa falhar na rodada especial terá um desconto de 10 pontos
- Os 3 melhores programas receberão 10 pontos extras.
- Além da rodada automática os trabalhos passarão pelas seguintes
avaliações:
- Será considerado o código:
- Otimização
- Limpeza do código
- Criatividade
- Defesa individual do código quando a T1 - P1 >= 40
- Lembrando que quando o trabalho for em dupla apresenta quem tiver a maior diferença
- Será considerado o código:
---
Last Modified: Wed Jul 31 16:07:34 2013.