O jogo consiste em uma grade, que normalmente é composta por 81 elementos dispostos em um quadrado 9×9.
Esta grade, por sua vez é dividida em 9 sub-grades 3×3. Cada uma destas pequenas grades possui números de 1 a 9 que não se repetem.
O jogo fica interessante enquanto os números não se repetem nem nas colunas nem nas linhas. E é aqui que o algoritmo para gerar a grade se complica.
A “receita” do programa:
- Criar um array com as coordenadas dos números seguindo um dos dois exemplos a seguir ou inventar o teu próprio array:
- Array[sub-grade linha coluna]
- Array[sub-grade][linha coluna];
- Povoar os elementos com o número 123456789.
- Entrar em um loop recursivo:
- Verificar se existe pelo menos um número, em toda a grade, composto de mais de um número (78 por exemplo). Se a resposta é sim, continuo, caso contrario saio do loop.
- Escolher um número presente no menor número em comprimento presente no array.
- Exemplo: na célula Array[5][32] (quinta sub-grade, terceira linha, segunda coluna) temos o numero “2589″ e este número possui 4 caracteres. Todos os outros sao maiores ou possuem o mesmo número de caracteres. Então escolhemos aleatoriamente um deles: “8″ e o colocamos em substituição do “2589″ presente na célula;
- Substituir o número escolhido (8) em todos os outros elementos presentes na quinta sub-grade.
- Para cada elemento do Array[5] diferente de [32] substituir o numero 8 com “” (nada).
- Substituir o número escolhido (8) em todos os outros elementos presentes na linha.
- Substituir o número escolhido (8) em todos os outros elementos presentes na coluna.
- Recomeçar o loop.
- Uma vez criado o Array, basta traduzi-lo em HTML.
Novembro 30, 2007 at 12:37 am
[...] Ops, faltou apontar uma solução. Eu ainda nem cheguei a tentar fazer de verdade, nem a descobrir a melhor solução, mas gostei um pouco deste algoritmo: [...]