Blog Formação DEV

Lista de exercícios: usando Arrays para sobreviver o Apocalipse Zumbi

Neste artigo você encontra uma série de exercícios de programação envolvendo arrays com a temática de apocalipse zumbi. Será que você consegue sobreviver?
Lista de exercícios: usando Arrays para sobreviver o Apocalipse Zumbi
Texto de: Cristina Leandro

Mundo pós-apocalíptico

Num futuro não tão distante, a Terra como conhecemos hoje se tornou um palco de caos. Um evento catastrófico desencadeou uma onda de zumbis pelo planeta. As cidades que antes eram chamadas de lar agora estão em ruínas e as regras de sobrevivência foram reescritas.

Nesse novo mundo invadido por zumbis, as habilidades de programação são a chave para a sobrevivência e as linhas de código se tornaram a nova moeda. Você se encontra em um esconderijo com outros sobreviventes e sua missão é: reunir suprimentos, navegar pelas ruas perigosas e sobreviver ao apocalipse zumbi!

Gestão de inventário

Em seu esconderijo, você tem um kit que serve como seu inventário: uma mochila virtual na forma de array onde você armazena itens cruciais para a sobrevivência. Cada elemento desse array representa um item.

De início, seu inventário se encontra assim:

inventario = ["kit de primeiros socorros", "garrafa de água", "lanterna", "barra de cereal", "isqueiro"]

Desafio 01: Escreva um código para adicionar um novo item, “binóculos”, ao seu inventário.

As ruas que antes eram movimentadas agora possuem outro visual; veículos abandonados, barricadas quebradas e os restos de uma civilização humana.

Ao se aventurar pela cidade em busca de suprimentos, você encontra vários desafios, incluindo ruas infestadas de zumbis. Você pode usar arrays para representar essas ruas. Seguindo um exemplo de array de ruas:

rua_zombie = ["zumbi", "zumbi", "vazio", "zumbi", "vazio", "zumbi", "zumbi"]

Desafio 02: Escreva o código para encontrar e retornar uma lista de índices que representam as ruas vazias. Esses são os caminhos seguros que você pode seguir para evitar zumbis.

Lutando contra zumbis

Na sua jornada, você inevitavelmente vai enfrentar zumbis. E são nesses momentos que você vai dar o seu máximo para garantir sua sobrevivência e prosseguir na sua aventura.

Também é possível representar essas batalhas usando arrays. Aqui está um exemplo de array de batalha:

batalha = ["zumbi", "zumbi", "você", "zumbi", "zumbi"]

Desafio 03: Escreva um código para determinar o resultado de uma batalha. Se houver mais zumbis do que você, você vai ter que fugir. Se você superar o número de zumbis, pode prosseguir com segurança, mas se você estiver em mesmo número que os zumbis, será necessário lutar (suponha que você sempre vencerá as lutas nesse caso).

Tomando uma decisão

Sobreviver a um apocalipse zumbi significa tomar as decisões certas. Isso envolve decidir ficar no mesmo lugar ou encontrar outro, envolve decidir em qual momento do dia é melhor agir, dentre outras várias séries de fatores.

Arrays vão te ajudar a avaliar suas opções. Considere esse array de decisão:

decisao = ["ir para a esquerda", "ir para a direita", "entrar no prédio", "subir no telhado"] 

Desafio 04: Escreva um código que vai selecionar aleatoriamente uma decisão do array. Essa decisão vai determinar seu próximo passo na narrativa.

Garimpando suprimentos

Encontrar suprimentos é essencial para a sobrevivência. Itens que em outro momentos foram abundantes, como comida, água potável, munições e remédios, agora se tornaram tesouros escassos.

Durante sua jornada você precisa se arriscar em vários lugares, lojas, casas e armazéns há muito tempo abandonados. Lugares estes que antes tinham vida e que agora estão assustadoramente silenciosos, e assombrados pelo respirar e grunhir de um zumbi à distância.

Arrays são excelentes para gerenciar suas novas descobertas e possíveis suprimentos que entrarão para o seu inventário. Aqui está um exemplo de array de suprimentos:

suprimentosEncontrados = ["curativos", "garrafa de água", "kit de primeiros socorros"] 

Desafio 05: Escreva um código para adicionar suprimentos recém-encontrados ao seu inventário. Você deve se certificar de que o mesmo item não vai ser adicionado duas vezes.

De volta ao mundo real

Hoje nos aventuramos em um mundo devorado pelos zumbis, onde o código é a arma e a salvação, mas é hora de voltar à realidade. Embora tenhamos explorado essa narrativa no contexto de um apocalipse fictício, as lições são reais.

Abaixo seguiremos com as resoluções para os desafios usando a linguagem JavaScript.

Não se preocupe se sua resolução não tenha ficado exatamente igual as presentes aqui. Isso não significa que esteja errada. Cada um tem sua própria lógica e se seu código funciona com o proposto, é isso que importa!

Resolução 1: Expandindo Seu Inventário

No meio de um planeta infestado de zumbis, ter o equipamento certo pode significar a diferença entre a vida e a morte. Um sobrevivente encontrou um esconderijo de binóculos, uma adição valiosa ao inventário.

Com o JavaScript, ele adicionou esse item essencial no inventário usando o método push():

let inventario = ["kit de primeiros socorros", "garrafa de água", "lanterna", "barra de cereal", "isqueiro"];
// Adicionando um novo item ao inventário
let novoItem = "binóculos";
inventario.push(novoItem);
// Exibindo a versão atualizada
console.log("Inventário Atualizado:");
console.log(inventario); 

Resolução 2: Encontrando refúgios seguros

À medida que nos aventuramos pelo apocalipse, identificar ruas seguras é crucial. Nesse cenário, o sobrevivente deveria localizar as ruas vazias em um array cheio de zumbis e poucos lugares vazios e seguros.

O sobrevivente optou por usar o método reduce() para encontrar e retornar os índices dessas ruas vazias:

let ruaZumbi = ["zumbi", "zumbi", "vazio", "zumbi", "vazio", "zumbi", "zumbi"];
// Encontre e retorne os índices das ruas vazias
let indicesRuasVazias = ruaZumbi.reduce(function (indices, rua, index) {
  if (rua === "vazio") {
    indices.push(index);
  }
  return indices;
}, []);
// Exibindo os indices das ruas vazias
console.log("Indices das Ruas Vazias: ");
console.log(indicesRuasVazias);

Resolução 3: Calculando os Resultados da Batalha

A sobrevivência muitas vezes se resume à batalha. Em um confronto tenso com zumbis, é contado o número de zumbis e do sobrevivente, e isso determina o resultado da batalha. Para resolver isso, filtramos e contamos as entidades no array para avaliar se o sobrevivente sai vitorioso ou enfrenta a derrota:

let batalha = ["zumbi", "zumbi", "você", "zumbi", "zumbi"];
// Conte os números de "zumbis" e de "você"s
let numZumbis = batalha.filter(function (entidade) {
  return entidade === "zumbi";
}).length;
let numVoce = batalha.filter(function (entidade) {
  return entidade === "você";
}).length;
// Determine the battle outcome
let resultado;
if (numVoce >= numZumbis) {
  resultado = "Vitória! Você derrotou os zumbis.";
} else {
  resultado = "Derrota! Os zumbis tomaram conta de você.";
}
// Exibindo o resultado
console.log("Resultado da Batalha:");
console.log(resultado);

Resolução 4: Tomando decisões de vida ou morte

Cada decisão conta num mundo dominado por mortos-vivos. Para manter a narrativa envolvente, nesse desafio o sobrevivente deve fazer uma escolha crucial. Essa decisão deve ser selecionada aleatoriamente, mantendo incerto o destino do nosso sobrevivente.

decisao = ["ir para a esquerda", "ir para a direita", "entrar no prédio", "subir no telhado"];
// Selecione aleatoriamente uma decisão
let indiceAleatorio = Math.floor(Math.random() * decisao.length);
let decisaoSelecionada = decisao[indiceAleatorio];
// Exibindo a decisão
console.log("Decisão Selecionada:");
console.log(decisaoSelecionada); 

Solução 5: Aquisição de suprimentos vitais

Neste mundo perigoso, o sobrevivente fez um estoque com seus itens essenciais. Aqui o desafio inclui adicionar os suprimentos que foram recém encontrados ao array de inventário sem que haja duplicatas. Isso vai garantir que o sobrevivente esteja bem preparado para enfrentar os desafios futuros.

let inventario = ["kit de primeiros socorros", "garrafa de água", "lanterna", "barra de cereal", "isqueiro"];
// Sample supplies array
suprimentosEncontrados = ["curativos", "garrafa de água", "kit de primeiros socorros"];
// Adicionando suprimentos novos ao inventário sem que hajam duplicats
for (let item of suprimentosEncontrados) {
  if (!inventario.includes(item)) {
    inventario.push(item);
  }
}
// Exibindo o inventário atualizado
console.log("Inventário Atualizado com Novos Suprimentos:");
console.log(inventario);

Conclusão

Chegamos ao fim dessa aventura. Espero que você tenha se divertido, e resolvido os desafios propostos. Fique ligado para mais aventuras!

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.