Encontro DebianDayPT 2008 - Inscreve-te! | Visite também o Planeta DebianPT.org

Sudoku anti-Pitxyoki

Submetido por ardoric a Sexta, 2007-09-07 00:17.

Bem... o Pitxyoki no blog dele anunciou[1] que se tinha metido num projecto para fazer (mais) um resolvedor de Sudoku[2].

Só para me meter com ele, também fiz um.

Podem encontrá-lo em [3].

A minha solução é numa linguagem de programação (e já agora, usando um paradigma) bastante diferente do habitual.

Enquanto que a solução do Pitxyoki é baseada em dizer ao computador como resolver o problema (paradigma imperativo), a minha solução é radicalmente diferente. Eu digo ao computador qual é o problema, e ele que se amanhe a resolvê-lo. No código do meu programa é perfeitamente visível (sim, eu devia ter comentado, mas pronto) que basicamente digo qual é a forma de um puzzle sudoku, que as variáveis tomam valores entre 1 e 9, e depois digo que variáveis têm de ser diferentes entre si.

Isto, claro, é mais do que suficiente para o prolog (neste caso específico o gnu-prolog[4]) conseguir resolver (de forma muito eficiente, já agora) todo e qualquer puzzle de sudoku, e até gerar puzzles ele mesmo.

Podia tê-lo feito de uma forma genérica, de forma a aceitar puzzles em quadrados de uma dimensão arbitrária (mas compatível com a definição do problema, claro), mas não vale a pena. Assim mostro melhor a verdadeira declaratividade do prolog (especialmente quando associado com programação por restrições).

Consegui fazer em pouco tempo (menos de uma hora) o que o Pitxyoki demorou cinco tardes (corrige-me se me enganei) a fazer. Uma vez que dei uma formulação completa do problema, e o resolvedor do gnu-prolog é completo, consigo resolver todos os problemas que sejam colocados.

As linguagens declarativas como esta permitem tirar do programador o fardo de pensar em como é que se resolve um dado problema (disse fardo, mas podia dizer prazer), concentrando-se sim na sua definição. Isto tem a potencialidade de levar a programação para um maior leque de pessoas, o que só pode ser bom.

Espero que tenham gostado deste artigo onde deitei abaixo os sonhos do Pitxyoki e dei a conhecer uma linguagem, um paradigma e um programa novos. Acho que foi mais ou menos produtivo.

Paz.

[1] http://pitxyoki.blogspot.com/2007/09/sudoku-solver-por-pitxyoki.html
[2] http://pessoa.fct.unl.pt/p110390/Sudoku/
[3] http://www.debianpt.org/~ardoric/sudoku/sud-gnu.pl
[4] http://www.gprolog.org/

Comentários

Opções de visualização dos comentários

Seleccione a sua forma preferida de visualização de comentários e clique "Gravar configuração" para activar as suas alterações.

Fui destronado!

AAARGGHH, nãaaaaao! Fui destronado!!!!
...ou não. :-)

Que é como quem diz: sim senhor, tiro-te o chapéu. Para além de me teres mostrado que todo o meu esforço se podia ter resumido a umas míseras 62 linhas, ainda foste capaz de me mostrar, na mesma noite, um paradigma de programação que eu desconhecia totalmente.

De qualquer forma, é como dizes: se criar um resolvedor de sudokus tira o prazer de resolver um sudoku depois de saber a sua solução, criar um programa que faz o "trabalho sujo" do programador também tira o prazer ao acto de fazer um resolvedor de sudokus.

Já agora, não te importas que eu mude o nome do meu resolvedor para "anti-ardoRic Sudoku Solver by Pitxyoki", pois não? :>

Muito louco.

Muito louco.

Back to top