Exercícios Resolvidos de Módulo Random

Ver Teoria

Enunciado

Mapas são matrizes quadradas compostas por bombas ("B") e tesouros ("T"). Implemente um programa que receba como entrada a dimensão dessa matriz quadrada e gere 3 mapas aleatórios e diferentes compostos por bombas e tesouros. A quantidade de tesouros existentes será a metade da dimensão. Um mapa é diferente do outro quando não possuem nenhum tesouro na mesma posição. Segue abaixo um exemplo:

Entrada: Entre com a dimensão do mapa: 4

Saída:

Passo 1

Coe, irmão! Essa questãozinha veio na maldade...

Mas relaxa que a gente vai conseguir! Primeiro, como a gente sabe que vai precisar usar o módulo random, a gente já pode começar importando ele.

Agora sim, um décimo a gente já garantiu! hehehhe bora buscar o resto dos nossos pontos… Tá escrito que a gente precisa perguntar a dimensão da matriz pro usuário, então bora perguntar usando a função input, já convertido pra inteiro, já que a dimensão de uma matriz é um número inteiro, ok?

Show! Com esse dado em mãos, a gente pode preparar a nossa estrutura de repetição! O enunciado tá falando pra gente fazer 3 mapas. Então bora fazer um for…

Agora a gente tem que pensar numa forma de fazer um mapa único de acordo com os critérios do enunciado.

Passo 2

O nosso mapa é uma lista, então a cada loop a gente precisa criar uma nova lista e preencher ela aleatoriamente. Depois de preencher, a gente salva esse novo mapa como uma sublista de uma lista de mapas que vamos criar do lado de fora dor for! Tipo assim:

E, como sempre, a gente pode preencher esse mapa aleatoriamente de várias formas diferentes. Eu vou optar por preencher com todos os itens que o mapa vai ter e depois embaralhar com o método random.shuffle(). Então bora lá:

Pronto… A gente criou um mapa com a quantidade de B sendo o número de itens - a dimensão dividida por dois. Depois a gente preencheu o resto com T, assim como foi especificado no enunciado. Agora, vamos ter uma lista sempre nesse formato:

Obs: no exemplo é uma matriz quadrada de dimensão 3. Mas o mesmo padrão se repetiria independentemente do tamanho. Porém, a ideia era a nossa matriz ser aleatória, né? Então, vamos embaralhar de forma aleatória essa lista usando o método random.shuffle().

E pronto! Essa lista vai estar ordenada de forma aleatória a partir dessa linha. Porém, não basta ser aleatório, mas tem que seguir o critério do enunciado: não pode ter nenhum “T” no mesmo lugar dos outros mapas já criados… Então a gente só precisa embaralhar até atingir esse critério. Mas como vamos saber se já tem outro mapa um “T” no mesmo lugar?!

Bora criar uma função pra isso!

Passo 3

A gente pode iterar por todos os mapas procurando por um que tenha um “T” no mesmo lugar e, se tiver, então a gente pode embaralhar de novo. Essa função pode ser definida por:

Nessa função, a gente tá iterando por cada um dos mapas existentes na variável i e depois iterando, ao mesmo tempo, entre todos os elementos de “i” e “mapa”. Se encontrarmos algum que tenha na mesma posição, itens iguais a T, então aquele mapa já existe e temos que embaralhar de novo. Vamos usar nossa função num while então!

E pronto! Dessa forma, o mapa vai ser embaralhado até que atinja os critérios do enunciado e, assim que atingir, vai ser adicionado à lista “mapas”.

Mas ainda precisamos de uma função pra exibir essa lista no formato que tá no enunciado, então segura aí!

Passo 4

Pra gente exibir nossos mapa, a gente pode fazer uma função separada com esse propósito! A ideia é a cada linha a gente adiciona um elemento da coluna, e exibir linha por linha dessa forma. No fim, a gente usa um print() vazio só pra pular uma linha no terminal e ficar tudo mais bonitinho...

Repara que eu chamei essa função lá no finalzinho do nosso loop principal. Assim, a cada vez que a gente criar um novo mapa, a gente já exibe ele direto no terminal.

E é isso! Acabamos por aqui hehhe valeuuu!

Resposta