Next: Formas Up: Enunciados Previous: Serpente
Na pág. 13 do livro de Y.I. Perelman, Matemática Recreativa, da colecção a Ciência ao alcance de todos, Editora MIR, pode ser encontrado o seguinte problema:
Na nossa escola --começou um estudante --funcionam cinco grupos: de desporto, de literatura, de fotografia, de xadrez e de canto. O de desporto funciona dia sim dia não; o de literatura, uma vez em cada três dias; o de fotografia, uma vez em cada quatro; o de xadrez, uma vez em cada cinco; o de canto, uma vez em cada seis. No primeiro dia de Janeiro, reuniram-se na escola todos os grupos e continuaram depois a reunir-se nos dias designados, sem falhar um só. Trata-se de saber quantas tardes mais, no primeiro trimestre (90 dias), se reuniram na escola os cinco grupos simultâneamente.
Não vos vamos pedir que resolvam este problema, pois ele tem solução trivial! Basta
saber determinar o mínimo múltiplo comum (operação esta já disponibilizada em muitos
interpretadores de Prolog) entre 2, 3, 4, 5 e 6. É fácil verificar que este
número é 60 e por isso no 61o dia todos os grupos se reunem novamente:
o de desporto depois de 30 intervalos de dois dias; o de literatura depois de 20
intervalos de 3 dias; o de fotografia depois de 15 intervalos de 4 dias; o de xadrez
depois de 12 intervalos de 5 dias; e o de canto depois de 10 intervalos de 6 dias.
Passados outros 60 dias chegará uma nova tarde semelhante, durante o segundo trimestre.
Aquilo que vos vamos pedir é algo talvez mais trabalhoso :-) Pretendemos encontrar
resposta à seguinte pergunta: Em que tardes não se reunirá nenhum dos cinco grupos?
Já que vamos implementar um programa em Prolog, vamos fazer as coisas ``como devem
ser feitas'': considerem uma situação mais geral, em que possa existir um número
arbitrário de grupos com períodos de funcionamento especificados. Para isso o vosso
programa deve pressupor a existência de um predicado grupos/1 que contém como
argumento uma lista de pares actividade/periodo. Para a situação acima
descrita, a vossa Base de Conhecimento conteria o seguinte facto:
grupos([desporto/2,literatura/3,fotografia/4,xadrez/5,canto/6]).
O vosso programa deverá ser invocado através do predicado
tardesVazias(NumDias,Lista).
Para a situação descrita:
?- tardesVazias(30,Dias). Dias = [2,8,12,14,18,20,24,30]
Next: Formas Up: Enunciados Previous: Serpente