Lista 2

Recomendações Importantes

  • A lista deve ser entregue até às 23:59:59 do dia 04/11/2014.
    • Deixe seus programas entendíveis. Imprima mensagens para auxiliar o usuário a utilizar o seu programa.
    • Seja criativo. As mensagens do seu programa não necessitam estar iguais aos exemplos, a menos que seja especificado.
    • A lista é individual, portanto não compartilhe seus códigos com outros alunos ou os coloque em locais públicos (Pastebin, Github).
    • Não copie. Se for detectado cópia da internet ou de um colega, as LISTAS envolvidas serão completamente zeradas.
    • Alguns exemplos aqui definidos podem apresentar comentários. Note que são apenas ilustrativos.
    • A correção da Questão Desafio é booleana. Ou seja: você receberá o ponto extra do desafio caso a resposta esteja 100% correta. Qualquer erro, mesmo que seja em apenas um caso, invalidará a questão.
    • Não é permitido o uso da API de Java ou bibliotecas externas, exceto quando permitido explicitamente na questão, na lista, ou autorizado por um monitor através da lista de email (Google Groups) da disciplina. Questões submetidas que violarem essa regra serão consideradas como não entregues.
    • São permitidas nessa lista, para todas as questões:
    • String
    • Scanner
    • Random

Questão 1 - Death Node

Você estava despreocupado passando algum tempo na deep web e se deparou com um programa chamado “Death Node” que parece ter algum poder misterioso, nele vem escritas algumas regras e uma frase surpreendente : “A pessoa cujo nome for escrito no programa, morrerá em 40 segundos de ataque cardíaco.”, claramente você não acreditou, mas não resistiu e foi testar, o primeiro nome que você viu passando na TV você anotou. Algum tempo depois passou no noticiário que aquele homem havia morrido de ataque cardíaco. Você então pensou que foi só coincidência e testou mais algumas vezes, e todos morreram. Não podia ser tudo coincidência. Então você passou a acreditar no programa e decidiu fazer uso dele com a mentalidade de que poderia tornar o mundo melhor. Para não ser pego, você decidiu criar uma lista de pessoas para matar, assim faria seu dia do juízo final e de tal modo, não teria como ser descoberto no processo. Você deve escrever um programa que tenha as opções :

  • Adicionar pessoa.
  • Remover pessoa.
  • Listar pessoas.
  • Atualizar pessoa.
  • Finalizar lista.

Deverá criar a classe Pessoa que tem os atributos :

  • (String)Nome.
  • (String)Motivo para ela estar na lista.
  • (String)Causa da morte.
  • (String)CPF

Para o programa já estão pre-definidas algumas das causas de mortes que você

pode utilizar além do padrão ( ataque cardíaco ). São elas :

  • Another Way ( Tropeçar na escada com um guarda chuva na mão e cair

com guarda chuva perfurando o pescoço ).

  • Atropelamento.
  • Suicídio.
  • Overdose de programação.
  • Jogando até a morte.

Obsevações Gerais :

  • Quando o usuário escolher a opção de finalizar a lista, o programa deverá imprimir quantas pessoas vão morrer no dia do julgamento final e listar elas por causa de morte informando também quantos morreram pra cada causa.
  • Após usar o método de remover, deve reajustar o array para que aquela posição não fique vazia.
  • Na opção de listar deve ser possível o usuário escolher por causa de morte ou listar todos. E na listagem deve aparecer uma String formatada com os dados da pessoa.
  • O CPF é no formato xxx.xxx.xxx-xx e duas pessoas não podem ter o mesmo CPF.
  • O método atualizar deve buscar uma pessoa por CPF e pedir novas informações sobre os 3 atributos restantes, caso o usuário dê uma entrada em branco, o programa deverá manter o valor anterior daquele atributo.

Questão 2 - Votação Justa Aprimorada - Liberté, Egalité, Fraternité

Com o atual sistema de voto obrigatório, somado a uma população desinteressada em política, foram detectados números premiados nas eleições.Foi percebido que números com sequência intuitiva estavam sendo favorecidos nas urnas. Para resolver esse problema, visualize as teclas numéricas da urna como pontos e

faça um programa que não permita o cadastro e votação de números aos quais: sua sequência de digitação forme no teclado retas (que possua todos os pontos

em que passar) ou ponto.

A votação será para candidatos a:

Presidência - 2 dígitos

Governador - 2 dígitos

Senador - 3 dígitos

Deputado Estadual - 5 dígitos

Após cadastro feito para presidência, os demais cadastros só podem ser validados se apresentar uma legenda (ou seja, 2 dígitos iniciais do partido que é o número do presidente).

O menu deve ter as opções:

1.Cadastro de candidato

2.Votação

3.Resultado

4.Sair

A votação só poderá ser iniciada se no cadastro tiverem no minimo 2 partidos e todos os cargos ocupados com no minimo 1 candidato para cada partido (totalizando no minimo 8 candidatos).

Na votação, imprima uma mensagem quando concluir a sessão (referente ao término) e volte ao menu: deve ser exibido três opções:

1.Escolher candidatos (inicia a escolha de candidatos por ordem e conclui a

sessão)

2.Anarquia (computa voto a essa opção e conclui a sessão)

3.Nulo (conclui a sessão)

No resultado imprima a contagem dos votos começando pelo mais votado, e caso a opção de anarquia for vitoriosa: informe no final que foi instaurado o anarquismo, os impostos serão distribuídos igualmente entre os serviços públicos (incluindo os serviços de emergência), a constituinte passará a ter sua manutenção em plebiscito (com participação não obrigatória), e a economia será de livre comercio e livre concorrência.

Questão 3 - Salvem Athena, jovens cavaleiros do CIn!

“Em homenagem aos 40 anos de carreira do mestre Kurumada, história não original e não produtor executivo, Masami Kurumada.”

OBS : Leia com a voz do narrador ( https://www.youtube.com/watch?v=vwydnfIh97o )

Um dos cavaleiros de Athena, Erick Riobravo, raptou a deusa do amor e da guerra, pois ficou indignado após a revelação do signo de Serpentário, seu novo signo, não receber um representante nas casas de ouro. Ele a mantém como refém na casa do Mestre do Santuário, que agora está sobre o nome de “Casa de Serpentário” enquanto Athena não cumpre com suas exigências. Suas exigências são : que seja construída uma casa no santuário e que seja feita uma armadura de ouro para o signo, além do desejo de ser o primeiro cavaleiro a representar Serpentário.

No momento você já passou pelas 12 casas e se encontra na escadaria que liga a casa de peixes a casa do grande mestre. Você só tem mais 3 horas para salvar, se apresse, mas siga com cuidado, pois o percurso está cheio de “Variáveis Diabólicas de Float” deixadas pelo cavaleiro de Peixes, cada movimento por cima delas custará um pouco do seu HP.

Ao iniciar o programa você deverá informar o nome para o cavaleiro. Distribuir 50 pontos de atributos entre força, inteligência e agilidade e após isso escolher uma entre 5 constelações de bronze para usar a armadura ir em busca de nossa “deosa”.

    • Pégaso
    • Andrômeda
    • Dragão
    • Cisne
    • Fênix

Você deverá criar a classe Armadura que possui os atributos :

    • Constelacao
    • HP
    • Cosmo
    • Bloqueio
    • Ataque

Você deverá criar a classe Cavaleiro que possui os atributos :

    • Nome.
    • Armadura
    • HP = 100 + força * 20 + hp da armadura.
    • Cosmo = 50 + inteligencia * 10 + cosmo da armadurax
    • Força
    • Inteligência
    • Agilidade
    • Bloqueio = 10 + agilidade + bloqueio da armadura
    • Esquiva = 5 + agilidade * 1.5
    • Ataque = 10 + força * 3 + ataque da armadura

Tabela das Armaduras

Observações :

    • Cada movimento na escadaria/casa perde 1 minuto.
    • Cada turno do usuário perde 2 minutos e meio.
    • As “Variáveis Diabólicas de Float” deixadas no chão tiram 3 de hp cada.
    • Erick tem 50% de chance de atacar, ou de usar técnica.
    • Já nas técnicas, Erick tem 1/13 de chance para cada técnica, ou seja, chances iguais.
    • Os ataques dão dano baseado num número aleatório de 0 a 3*força + 10.
    • Bloqueio e esquiva funcionam só pela metade em técnicas.
    • O máximo de pontos em um atributo é 30.
    • Caso falte cosmo para executar uma técnica, o jogador não perde o turno, só é pedida uma nova entrada. No caso de Erick, o random gera um novo número.
    • A casa final é uma matriz 10 x 10.
    • A escadaria até a casa final é uma matriz 10 x 5.
    • Na escadaria a chance de ter uma variável diabólica de float em cada posição é de 50%.
    • Você perde caso o tempo acabe e Athena morra envenenada ou Erick vença a luta.
    • Após o usuário terminar suas escolhas de atributos e constelação, deverá ser impresso uma String formatada com os dados do cavaleiro.

A casa tem o seguinte formato:

E a escadaria tem o seguinte formato:

Questão 4 - Você vai ser dilacerado por dentes ou balas

The Walking Dead Theme Song (Sugiro acessar e se manter nesse link a partir de agora, até o termino da questão).

Com parceria da Valve, CIn e AMC Studios...

deu-se início ao desenvolvimento de um survival horror game, você foi escolhido para fazer um mini-game de sobrevivência com o tema de The Walking Dead, no qual o personagem foi escalado para ir atrás de um recurso, encurralado ele precisa ser rápido e escolher corretamente entre 5 casas -tendo 3 tentativas- ou será devorado por uma imensa horda de zumbis.

Tudo ou Nada:

1.Se ele fugir do quarteirão com as mãos abanando é morto no acampamento pelo Governador.

2.Se ele não encontrar a tempo será morto pelos zumbis.

3.E se encontrar o recurso, conclui sua missão em sucesso.

Defina no programa em qual casa estará o recurso através de um método que sorteie randomicamente. As casas são separadas por um jardim.

Represente conforme abaixo:

Recurso: " *"

Casa: "Cx" (onde x varia de 1 a 5).

Personagem: "o ".

Jardim:"##".

Ao vasculhar uma casa, descreva o que havia dentro dela e se o recurso estava lá. Ao vasculhar um quintal exiba mensagem informando perda de tempo.

O usuário deve escolher o nome do recurso que será procurado, para ser exibido em tela quando encontrado.

Game Over se:

Acabarem as tentativas.

O personagem tentar fugir além dos limites do quarteirão.

Encontrar o recurso.

Imprima uma mensagem conforme o destino do personagem.

Busque manter as representações simétricas (personagem, recurso e casas).

A Movimentação: w (cima)

a (esquerda) d (direita)

s (baixo)

Letras maiúsculas ou minusculas possuem mesmo efeito. O tempo correndo pela calçada é dispensável.

Formato de exibição (supondo que o recurso esteja em C2):

Informe qual o recurso a ser procurado: "Água".
Preciso encontrar rápido! só dá tempo de vasculhar 3 lugares \\Saída
C1##C2##C3##C4##C5
o
w \\Entrada
Apenas algumas janelas quebradas... Mas nada de água por aqui...
  ##C2##C3##C4##C5
o 
d \\Entrada
  ##C2##C3##C4##C5
  o
w \\Entrada
Não há nada nesse quintal... Perda de tempo...
  ##C2##C3##C4##C5
    o
d \\Entrada
  ## *##C3##C4##C5
    o    
w \\Entrada
Finalmente!!! Encontrei água na Casa 2!!!

Questão 5 - Você sabe o que é Sudoku?

Pois bem, pra quem não conhece Sudoku é um quebra-cabeça baseado na colocação lógica de números.O objetivo do jogo é colocar de números de 1 a 9 em cada uma das células vazias numa grade de 9x9, constituída por subgrades 3x3 chamadas regiões. O quebra-cabeça contém algumas pistas iniciais, que são números inseridos em algumas células, de maneira a permitir uma indução ou dedução dos números em células que estejam vazias.

Cada coluna, linha e região só pode ter um número de cada um dos 1 a 9.

Dito isso, você deve criar um programa que, dado um tabuleiro de Sudoku completo, identifique se o mesmo possui uma solução válida ou não.

É sabido que um número pode aparecer, no máximo, uma única vez em uma coluna ou linha, não podendo haver repetição.

Entrada:

Uma matriz 9x9 de inteiros entre 1 e 9.

Saída:

"TRUE" caso a solução esteja correta "FALSE" caso contrário.

Exemplo:

//entrada do usuario 5 3 4 6 7 8 9 1 2 6 7 2 1 9 5 3 4 8 1 9 8 3 4 2 5 6 7 8 5 9 7 6 1 4 2 3 4 2 6 8 5 3 7 9 1 7 1 3 9 2 4 8 5 6 9 6 1 5 3 7 2 8 4 2 8 7 4 1 9 6 3 5 3 4 5 2 8 6 1 7 9 //saida do programa TRUE

Questão 6 - O Oráculo de Eskendereyya - DESAFIO

Todo computólogo que se preza conhece o livro “O Guia do Mochileiro das Galáxias” (The Hitchhiker’s Guide to the Galaxy) e sabe qual é a resposta para a pergunta fundamental sobre a vida, o universo e tudo mais.

Mas, o que poucos sabem, é que a história de Douglas Adams é baseada em uma lenda egípcia, de um oráculo situado na cidade de Eskendereyya (Alexandria). Alexandria hoje é a maior cidade do Egito, com mais de 4 milhões de habitantes.

Fica no delta do Nilo, e estende-se por 32km na costa do Mediterrâneo. Na Antiguidade, a cidade fundada em 331 a.C. por Alexandre, o Grande, foi umas das principais cidades do mundo e lá ficava o Farol de Alexandria (uma das 7 maravilhas do mundo antigo), a Biblioteca de Alexandria (a maior do mundo antigo) além de outras obras fantásticas.

A lenda diz também que lá ficava o grande oráculo de Alexandria. Os habitantes da cidade entregavam ao oráculo pequenos bilhetes com números anotados, e recebia de volta um número, que seria a resposta a uma pergunta fundamental do universo relacionada aos dois números dados.

No seu tratado de 227 d.C. Cleómenes de Naucratis (que se tornou administrador de Alexandria quando Alexandre partiu para suas conquistas) relata alguns resultados obtidos do oráculo:

Dados 8 e 1, o oráculo devolvia 40320;

Dados 10 e 3, devolvia 280;

Dados 4 e 2, devolvia 8;

Dados 21 e 19, devolvia 42.

Estudos modernos dão conta que o que o oráculo devolvia nada mais era que uma generalização do fatorial de um número inteiro. Como sabemos,

N! = N x (N - 1) x ... x 1.

O oráculo devolvia para os dados N e K o K-fatorial de N, ou seja,

N x (N - K) x (N - 2K) x (N - 3K) x ...,

em que o produto era feito enquanto a diferença é maior ou igual a 1. Podemos representar o K-fatorial de um número por ele seguido por K exclamações:

8! = 40320;

10!!! = 280;

4!! = 8;

21!!!!!!!!!!!!!!!!!!! = 42

Dizem que ao ler sobre a lenda do oráculo de Eskendereyya, Douglas Adams teve sua inspiração para sua obra. Também, no Egito está a inspiração do Restaurante do fim do universo, mas isso é outra história...

Sua tarefa é, dado inteiros N e K, determinar K-fatorial de N.

Entrada:

Um inteiro N seguido de K pontos de exclamação, onde 1 <= N <= 100 e 1 <= K <= 20.

Saída:

Para cada instância imprima uma linha contendo o K-fatorial de N.

Exemplo:

3! //entrada do usuario

6

10!!! //entrada do usuario

280

19!!!! //entrada do usuario

65835

4!! //entrada do usuario

8