Minha tentativa de afirmar esta questão , mas com um critério de solução mais objetivo.
Sua tarefa é criar um programa ou função que utilize uma grade resolvida do Sudoku S
no formato de sua escolha e tente gerar uma grade de problemas com o menor número possível de pistas que possua S
sua solução exclusiva. (Não importa qual método S
é a solução exclusiva, incluindo força bruta, desde que a solução seja comprovadamente única.)
Seu programa será pontuado executando-o em um conjunto de 100.000 grades de soluções encontradas neste arquivo (download de 7,82 MB) e adicionando o número de pistas em todas as 100.000 grades de problemas que sua solução produz.
As soluções Sudoku no arquivo de teste acima são expressas como uma sequência de 81 caracteres, da esquerda para a direita e de cima para baixo. O código necessário para transformar a entrada no arquivo de teste em uma solução utilizável não conta para a contagem de bytes da sua solução.
Como no meu desafio do Flood Paint , seu programa deve realmente produzir uma saída válida para todos os 100.000 quebra-cabeças serem considerados uma solução válida. O programa que fornece o menor número total de pistas para todos os 100.000 casos de teste é o vencedor, com um código mais curto interrompendo o empate.
Painel atual:
Respostas:
C - 2.361.024
2.509.949pistasRemova as pistas que começam na última célula se um solucionador de força bruta encontrar apenas uma solução única.
Segunda tentativa: use a heurística para decidir em qual ordem remover as pistas, em vez de começar da última. Isso torna o código muito mais lento (20 minutos em vez de 2 para calcular o resultado). Eu poderia tornar o solucionador mais rápido, para experimentar diferentes heurísticas, mas por enquanto ele serve.
fonte
Python - 7.200.000 pistas
Como sempre, aqui está uma solução de referência de último lugar:
A remoção da linha inferior de números provavelmente deixa o quebra-cabeça solucionável em todos os casos, pois cada coluna ainda possui 8 dos 9 números preenchidos e cada número na linha inferior é simplesmente o nono número restante da coluna.
Se algum concorrente sério conseguir legalmente ter uma pontuação pior que essa, ficarei surpreso.
fonte
Python 2 - 6.000.000 de pistas
Uma solução simples que usa os três métodos comuns para resolver esses quebra-cabeças:
Esta função produz formatos de pista como este:
Isso sempre pode ser resolvido. As 4 partes 3x3 são resolvidas primeiro, depois as 8 colunas e depois as 9 linhas.
fonte
PHP - 2.580.210 pistas
Isso primeiro remove a última linha e coluna e o canto inferior direito de cada caixa. Em seguida, tenta limpar cada célula, executando o quadro através de um solucionador simples após cada alteração, para garantir que o quadro ainda seja inequivocamente solucionável.
Grande parte do código abaixo foi modificado a partir de uma das minhas respostas antigas .
printBoard
usa 0s para células vazias.fonte