Next: Formas Up: Enunciados Previous: Serpente

Tardes Vazias

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


1999-04-01