Abaixo encontram-se as explicações sobre o programa.
_____ _____ _____As casas serão representadas por uma lista de números como acima.
| | | |
|(0 2)|(1 2)|(2 2)|
|_____|_____|_____|
| | | |
|(0 1)|(1 1)|(2 1)|
|_____|_____|_____|
| | | |
|(0 0)|(1 0)|(2 0)|
|_____|_____|_____|
Quem joga primeiro será chamado de PRETO, e o outro jogador
é BRANCO. O objetivo de cada jogador é posicionar suas
três pedras em linha reta (vertical, horizontal ou diagonal). O
tabuleiro começa vazio, e alternadamente os jogadores fazem suas
jogadas, comçando pelo jogador PRETO. Uma jogada consiste em
colocar uma pedra em uma casa vazia. Não é permitido
"passar" a vez. Caso o tabuleiro esteja cheio e nenhum dos
jogadores tenha formado três pedras em linha, o jogo acaba em
empate.
A seguir exibimos umapartida para ilustrar o jogo.
PRETO |
BRANCO |
(0 2) |
(1 1) |
(2 1) |
(2 2) |
(0 0) |
(0 1) |
(2 0) |
(1 0) |
(1 2) |
A partida acabou empatada. Posição final:
_____ _____ _____
| | | |
| P | P | B |
|_____|_____|_____|
| | | |
| B | B | P |
|_____|_____|_____|
| | | |
| P | B | P |
|_____|_____|_____|
Voce deverá escrever um programa em LISP que joga este jogo, tanto do lado do PRETO como do lado do BRANCO. Seu programa deverá ser uma pacote e exportar quatro funções:
preto-inicia
Esta função será chamada sem argumentos deverá retornar a casa onde seu programa jogará o primeiro lance como PRETO. Além disso, pode executar as inicializações necessárias em suas estruturas internas.
preto-responde jogada-do-branco
Esta função será chamada com a última jogada do BRANCO como argumento, e deve retornar a jogada-resposta. Além disso, pode executar as atualizações necessárias em suas estruturas internas.
branco-inicia jogada-do-preto
Esta função será chamada com a última jogada do PRETO como argumento e retorna a casa onde seu programa jogará o primeiro lance como BRANCO. Além disso, pode executar as inicializações necessárias em suas estruturas internas.
branco-responde jogada-do-preto
Esta função será chamada com a última jogada do PRETO como argumento, e deve retornar a jogada-resposta. Além disso, pode executar as atualizações necessárias em suas estruturas internas.
Para evitar conflitos com outros programas, usaremos pacotes. Cada pacote definirá um espaço de nomes diferente, evitando conflitos. Para usar pacotes em Common LISP, e para exportar as funções necessárias para este projeto, basta que seu arquivo comece com as seguintes linhas:
(make-package 'raNNNNNN)onde
(in-package raNNNNNN)
(use-package 'common-lisp)
(export '(preto-inicia preto-responde branco-inicia branco-responde))
NNNNNN
é o seu RA. Exemplo: se seu RA
é 973451, use ra973451
como nome do pacote. Seu
programa pode deve ser submetido num único arquivo chamado raNNNNNN.lsp
,
onde novamente NNNNNN
é o seu RA.
Neste projeto, o funcionamento mínimo é o seguinte: seu programa não poderá perder mais do que 10% das partidas disputadas por desclassificação. Perder uma partida por desclassificação significa fazer uma jogada inválida ou não retornar em tempo hábil.
Os programas de todos os alunos que entregarem no prazo, ou até dez dias após o prazo, serão colocados num campeonato. Este campeonato consiste em jogar uns contra os outros e ver quem acumula mais pontos. Os pontos são contados da seguinte forma: 2 para vitória, 1 para empate, 0 para derrota (desclassificação conta como derrota).
Os jogadores serão ordenados pelo total de pontos. Os que
não fizeram o funcionamento mínimo serão removidos
da lista. O primeiro colocado tira 10 (dez). O último colocado
fica com 5 (cinco). Os outros terão sua nota calculada por
interpolação de seu total de pontos em
relação ao interalo [5,10]. Por exemplo, se
houver quatro jogadores A, B, C e D que obtiveram 7, 4, 7 e 6 pontos
respectivamente no campeonato, então as notas serão
assim: A=10, B=5, C=10, D=8,33.
Após tudo isso, será descontada nota devido aos dias
de atraso, se houver. Como punição por atraso, o
aluno perde nota à razão de 10% ao dia. Por exemplo, um
aluno que tiraria 7 e tenha 5 horas de atraso ficaria após o
desconto com 7 - 7*5/24*10% = 6,85.
A nota dos que não cumprirem o funcionamento mínimo
será 5 multiplicado pela fração de partidas onde o
programa não perdeu por desclassificação. Por
exemplo, se em 110 partidas o programa se desclassificou em 20 delas, a
nota é 5*(90/110) = 4,09.
Como sempre, programas iguais ou suficientemente parecidos serão punidos com nota zero para todos os envolvidos e informação à Coordenadoria de Graduação para as devidas providências.