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!