Mapa do tesouro

Nesse post proponho um algoritmo para solucionar uma caça ao tesouro a partir de um mapa. O algoritmo inicia solicitando o mapa e depois avalia se, a partir do mapa especificado, é possível alcançar o tesouro seguindo as instruções.

O mapa aceita os caracteres “>”, “v”, “<“, “^”, “*” e “.”, indicando respectivamente: “ir para a direita”, “ir para baixo”, “ir para a esquerda”, “ir para cima”, “lugar do tesouro” e “caminho sem nada”. O mapa sempre começa na posição 0,0 da matriz.

Solução em C/C++

#include <stdio.h>
#include <string.h>
 
int main(void) {
	int lin, col;
	scanf("%i %i\n", &lin, &col);
	int mapa[lin][col];
	int i, j;
 
	//preenche matriz
	for (i = 0; i < lin; i++) {
		//fflush(stdin);
		for (j = 0; j < col; j++) {
    			scanf("%c", &mapa[i][j]);
		}
	}
 
	for (i = 0; i < lin; i++) {
	    	for (j = 0; j < col; j++) {
    			printf("%c", mapa[i][j]);
	    	}	
    		printf("\n");
	}
 
	//percorre o mapa
	int posX = 0, posY = 0;
	char direcao = '>', leitura;
 
	while (posX < 10) {
	    leitura = mapa[posY][posX];
	    if (leitura == '>') {
	        direcao = '>';
	        posX = posX + 1;
	    } else if (leitura == '<') {
	        direcao = '<';
	        posX = posX - 1;
	    } else if (leitura == '^') {
	        direcao = '^';
	        posY = posY - 1;
	    } else if (leitura == 'v') {
	        direcao = 'v';
	        posY = posY + 1;
	    } else if (leitura == '*') {
	        printf("Achou o tesouro!");
	        break;
	    } else { //nao ouve mudanca de direcao
	        if (direcao == '>') { posX = posX + 1; }
	        if (direcao == '<') { posX = posX - 1; }
	        if (direcao == '^') { posY = posY - 1; }
	        if (direcao == 'v') { posY = posY + 1; }
	    }
 
	    printf("X e Y: %i %i |%c|%c|\n", posX, posY, leitura, direcao);
	}
 
	return 0;
}

Teste o código: http://ideone.com/FBj1Ac

Solução em Python

tamX = 3
tamY = 6
mapa = [['>','.','.','v','.','.'], 
        ['.','.','.','.','.','.'],
        ['.','.','.','>','.','*']]

for i in range(tamX):
    for j in range(tamY):
        print mapa[i][j],
    print

posX = 0
posY = 0
direcao = '>'
while (True):
    if mapa[posY][posX] == '>':
        direcao = '>'
        posX = posX + 1
    elif mapa[posY][posX] == '<':
        direcao = '<'
        posX = posX - 1
    elif mapa[posY][posX] == '^':
        direcao = '^'
        posY = posY - 1
    elif mapa[posY][posX] == 'v':
        direcao = 'v'
        posY = posY + 1
    elif mapa[posY][posX] == '*':
        print "Achou o tesouro!"
        break
    else:
        if direcao == '>':
            posX = posX + 1
        if direcao == '<':
            posX = posX - 1
        if direcao == '^':
            posY = posY + 1
        if direcao == 'v':
            posY = posY + 1
              
    print 'X e Y: ', posX, ' ', posY

Teste o código: http://www.codeskulptor.org/#user42_PXFlhtIcec_0.py

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.