MC336 - Programação Lógica

Criada: 2006-07-25
Modificada por último: 2006-10-06
Links importantes
Campeonatos Gerenciador suíço Gerenciador alarm.c Modelo p/ jogador
Prolog - Wiki SWI-Prolog Exercícios Prolog Sudoku - Wiki Treine Sudoku!

Campeonatos rodando! Veja aqui os resultados. Cada arquivo contém um campeonato, onde são mostrados os jogos individualmente e no final o placar resultante, ordenado. Os pontos agora dependem do tempo --- veja abaixo descrição atualizada do gerenciador.

Agora o gerenciador limita o tempo de bolação e de resposta. Porém, é necessário compilar uma função em C para que isto funcione. O código em C está aqui. Para compilá-lo, use:

gcc -I/usr/lib/pl-5.6.18/include/ -fpic -c alarm.c
gcc -shared -o alarm.so alarm.o

Deixe o arquivo alarm.so no mesmo diretório onde for rodar o gerenciador.

A linguagem escolhida para esta seção do curso é Prolog.

Usaremos a implementação SWI-Prolog.

Quase cem exercícios Prolog.

Livro-texto para Prolog: Programming in Prolog, W.F.Clocksin, C.S.Mellish, Springer-Verlag, 5ª edição, 2003. ISBN: 3-540-00678-8.

Exercício de programação para Prolog: o jogo Sudoku. Para quem quiser treinar na mão, experimente este site. Cada aluno terá que implementar um programa que saiba tanto bolar jogos como resolver jogos. Um programa gerenciador será o mediador entre os dois contendores, recebendo jogo e solução do primeiro jogador, verificando a validade, e enviando apenas o jogo para o segundo jogador, que deverá responder com a solução.

Data de entrega: 09 de outubro. A partir daí, a entrega será penalizada a uma taxa de 10% a cada 24 horas de atraso. O gerenciador deverá estar pronto até 06 de setembro.

Formato da solução: lista com 81 elementos. Os nove primeiros dão a primeira linha da solução, os próximos nove a segunda linha, e assim por diante. Exemplo:

[1,2,3,4,5,6,7,8,9, 7,8,9,1,2,3,4,5,6, 4,5,6,7,8,9,1,2,3, 9,1,2,3,4,5,6,7,8, 6,7,8,9,1,2,3,4,5, 3,4,5,6,7,8,9,1,2, 8,9,1,2,3,4,5,6,7, 5,6,7,8,9,1,2,3,4, 2,3,4,5,6,7,8,9,1]

Para o problema, o formato é o mesmo, exceto que as casas não preenchidas serão representadas por variáveis anônimas. O número de casas já preenchidas foi flexibilizado: agora podem ser entre 17 e 80 casas já preenchidas. A pontuação do jogo leva em conta a medição de tempo para achar a resposta.

Programa gerenciador já está pronto. Nesta versão a pontuação depende do tempo usado. O limite máximo é 50 segundos. Veja aqui.

O programa gerenciador se comunica com os módulos dos jogadores através do seguinte protocolo: para obter o problema e a solução do jogador 1, chamará o predicado:

manda_probl(-P, -S)

Após verificação, enviará o problema e obterá a resposta do segundo jogador através do predicado:

resolve(+P, -S)

O gerenciador verificará:

  1. se o primeiro jogador enviou solução válida
  2. se o primeiro jogador enviou problema compatível com a solução
  3. se o primeiro jogador enviou problema com o mínimo de posições preenchidas
  4. se o segundo jogador enviou solução válida
  5. se o segundo jogador enviou solução compatível com o problema
  6. se a solução do segundo jogador é igual à solução do primeiro jogador

Cada um destes quesitos vale pontos, veja no código do gerenciador os detalhes. Esta pontuação poderá mudar em função do que encontrarmos nos campeonatos de treino.

Para escrever seu jogador, coloque todos os seus predicados num módulo segundo o seguinte exemplo. Cada aluno pode sumbeter quantos jogadores quiser nos treinos, todos eles identificados por módulos cujo nome tem prefixo da forma raXXXXXX, onde XXXXXX é o RA do aluno. O nome do arquivo que contém o módulo deve necessariamente ser o nome do módulo com extensão .prolog.


MC336 Home

© 2006 João Meidanis