Sudoku anti-Pitxyoki
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/
- o blogue de ardoric
- Clique Iniciar Sessão ou registar-se para colocar comentários
- 573 leituras






Comentários
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.