Criada: 2017-10-01
Seu desafio envolvendo a linguagem Python será escrever um resolvedor para o jogo Master Mind.
Seu programa deverá ser entregue na forma de código fonte Python 3.6.2 ou superior. Um esqueleto do programa pode ser encontrado aqui (salve como esqueleto.py) e é reproduzido a seguir:
#!/usr/bin/python3 ... # incializações, rotinas auxiliares while ...: # alguma condição print(chute) resp = input() ... # processa resposta, prepara novo chute ... # finalizações
Seus chutes devem ser impressos na saída padrão. Os chutes devem ser Strings de quatro dígitos inteiros, não necessariamente distintos, cada um deles de 1 a 6, por exemplo, 5322. A resposta de cada chute deve ser lida da entrada padrão. As respostas são Strings de dois dígitos inteiros, o primeiro sendo o número de "bons" e o segundo sendo o números de "regulares" no chute, por exemplo, 40.
Seu programa deverá tentar adivinhar a senha pensada pelo outro jogador da forma mais rápida possível, isto é, com o menor número de chutes. A senha possui dígitos não necessariamente distintos. Um programa correto deverá terminar de uma das duas formas seguintes:
Qualquer outro comprotamento será considerado errôneo e acarretará perda de pontos para a autora ou o autor.
Para efeito de depuração, os alunos poderão fazer o programa imprimir outras informações que acharem necessárias, mas todas elas deverão ser dirigidas à saída de erro (stderr), e não à saída padrão (sdtout), que deverá ser reservada para comunicação com o avaliador apenas.
Um programa avaliador será usado para auxiliar o instrutor a avaliar os programas dos alunos. O avaliador pensará numa senha aleatória, ou receberá uma senha na linha de comando, e dará as respostas corretas relativas a esta senha para os programas.
O avaliador foi escrito em C e seu código-fonte está disponível. Os alunos poderão compilá-lo e usá-lo para testar seus programas. O avaliador foi feito para funcionar em Linux. Seu uso em Windows poderá ser diferente. Em Linux, deve ser compilado da seguinte forma:
gcc aval6.c -o aval6e chamado como:
./aval6 <programa-python> [<senha>]onde <programa-python> é o programa da aluna ou do aluno. Se a <senha> for omitida, será gerada uma senha aleatória.
É importante ressaltar que o score (número de bons e de regulares) é definido sempre em referência ao chute, ou seja, cada posição do chute pode ser boa (se coincide com a mesma posição na senha), ou regular (se aparece na senha em outra posição).
Vejam exemplos:
senha = '1234', chute = '1111', resposta = '13'Neste caso, temos 1 bom (que é o primeiro '1') e 3 regulares (os demais '1's). Observe que a resposta seria diferente se invertermos senha e chute:
senha = '1111', chute = '1234', resposta = '10'Neste caso, apenas o '1' do chute é bom. O resto não conta pontos. Mais um exemplo:
senha = '1334', chute = '1213', resposta = '12'Neste caso, o primeiro '1' é bom, o segundo '1' é regular e o '3' também é regular. O '2' não conta pontos.
© 2017 João Meidanis