Closed drbeco closed 8 years ago
Questão:
Se eu tenho uma lista de casas seguras, uma lista de casa adjacentes e uma lista de casas visitadas, e quero calcular uma lista opções de casas para visitar em seguida, quais operações de conjuntos eu faço? (União, intersecção, subtração, etc.)?
Suponha:
CS = lista de casas seguras
CV = lista de casas visitadas
CA = lista de casas adjacentes
CO = lista de opções de casas para visitar nas próximas rodadas
Então a fórmula lógica é?
CO = ??
Operações PROLOG
para testar:
$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- union([[1,1], [2,2]], [[1,1], [3,3]], L).
L = ??
?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L).
L = ??
?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L).
L = ??
?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L).
L = ??
?-
Discussão abaixo:
Muito obrigado pela ajuda professor, foi de grande ajuda, a parte da percepção de casas adjacentes está em andamento
Gostaria que o grupo me desse uma resposta a essa questão:
CO=??
Estou usando para avaliar vocês. Ok? Estou no aguardo.
CO= ((CS União CV) Interseção CA)
Creio que esta seja a resposta para a questão
Se o grupo estiver de acordo, façam um experimento com listas fictícias e testem (como eu escrevi ali na parte final da questão, Operações PROLOG para testar)
Após testadas as operações os resultados foram os seguintes:
$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- union([[1,1], [2,2]], [[1,1], [3,3]], L).
L = [[2, 2], [1, 1], [3, 3]].
?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L).
L = [[1, 1], [2, 2], [3, 3]].
?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L).
L = [[1, 1], [2, 2]].
?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L).
L = [[1, 1], [2, 2], [3, 3]].
Após os testes, os resultados foram:
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6) Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- union([[1,1], [2,2]], [[1,1], [3,3]], L). L = [[2, 2], [1, 1], [3, 3]].
?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L). L = [[1, 1], [2, 2], [3, 3]].
?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L). L = [[1, 1], [2, 2]].
?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L). L = [[1, 1], [2, 2], [3, 3]].
Portanto, acredito que: CO = ((CS ∪ CS) ∩ CV )
Que testes são esses que vocês estão fazendo que estão apenas repetindo meus exemplos? Inventem listas fictícias para fazerem os testes. Por exemplo, se o agente já andou umas duas ou três casas, começando pela [1,1]
, e foi parar lá no miolo do tabuleiro, e quer agora calcular CO
CS = Invente uma lista de casas seguras aqui
CV = Idem para lista de casas visitadas
CA = E idem para lista de casas adjacentes
CO = ?
Que estranho essas respostas de vocês. Copiando meu próprio texto, não está me acrescentando nada de novo. Esses testes eu mesmo já fiz.
Outra coisa, fazer a união de CS com CS não muda nada.
Professor, eu fiz testes com listas aleatorias criadas por mim porém só mandei essa pois foi a que você enviou como exemplo e eu quis seguir uma linha única de raciocínio.
E a união de CS com CS deve ter sido um erro de digitação do Guido, se estiver errado me corrija por favor.
Realmente foi um erro meu. Peço desculpas. Acredito que o correto seria CO = ((CS ∪ CV) ∩ CA ).
Exemplo:
-----------------------------------------
| | P | | G |
-----------------------------------------
| | P | W | |
-----------------------------------------
| | | P | |
-----------------------------------------
| | A | | |
-----------------------------------------
Suponha que o agente já andou por [1,1]
, [2,1]
e [3,1]
e está de volta para a casa [2,1]
e agora quer calcular uma casa segura e não visitada e adjacente (no caso a resposta é a casa [2,2]
). Como fazer?
Faça as listas:
CS = lista de casas seguras
CV = lista de casas visitadas
CA = lista de casas adjacentes
Faça um teste no prompt do PROLOG com a fórmula por você criada:
CO = fórmula? Lista resultante?
Mostre a fórmula usando as operações acima (intersecção, união, subtração, ou outra operação de lista/conjunto que precisar), mostre o teste feito no swipl
(direto no prompt).
Resolvido o problema da issue. Fechado.
Oi pessoal, queria dar uma sugestão importante.
Poderíamos ter uma função que retornasse as casas adjacentes a casa atual (ou a qualquer casa dada).
Por exemplo, se estou na casa
minhaposicao([2,2])
e chamo:Então
L=[[3,2], [2,3], [1,2], [2,1]]
Ou se estou na posição
[1,1]
, então a lista fica apenas comL=[[2,1], [1,2]]
Essa função é uma intermediária para depois ser usada em funções mais complexas.