domingo, julho 31, 2011

Norvig, Sudoku e golang.

Nesta sexta-feira eu estava no metrô reparando na concentração e velocidade com que um menino de uns 9 ou 10 anos estava resolvendo uma série de problemas de Sudoku no iPad do seu pai e me lembrei do artigo de Peter Norvig de um Sudoku Solver onde ele com bom humor diz que desenvolveu esse algoritmo para defender sua esposa de "a denial of service attack on human intellect".

Programando em Go faz alguns meses tenho gostado bastante do equilíbrio que a linguagem possui entre ser fortemente tipada, mas ao mesmo tempo possuir um certo sabor de linguagens dinâmicas, obtido pelo seu foco em simplicidade,convenções e concisão. Comecei a pensar que portar o sudoku solver de Python para Go poderia ser um interessante para contrastar essas diferenças e nesse domingo de tarde chuvosa foi o que fiz, e minha tradução para Go está aqui https://github.com/xboard/sudoku_solver. O fato de ter sido possível traduzir o programa numa tarde e a grande similaridade com a versão em python corroboraram minhas cada vez melhores impressões sobre a linguagem Go. O único recurso que fez falta foi a ausência de list comprehension. Em compensação resolvi usar go routines e channels na função de busca e no meu notebook diversos problemas ficaram mais de 3x mais rápidos! 

Como amo (jogar e implementar)  jogos de raciocínio e estratégia, tenho que confessar que me diverti bastante! :)