25.04.08
Dojo Tarde – 04
Participantes: Hugo, Mari, Flores, Breno
Problema: The Next Palindrome
Linguagem: Smalltalk
Ambiente: Squeak
Fonte: dojotarde04-palin
Por termos resolvido um problema muito fácil no Dojo anterior, resolvemos pegar um problema um pouco mais difícil.
Ao invés de criar uma classe com a implementação do Next Palindrome, o Hugo sugeriu criarmos um método NextPalindrome na classe de inteiros de Small Talk. O que no fim das contas se mostrou ser algo legal: nunca haviamos feito nada deste tipo em algum outro Dojo Tarde.
Uma estratégia sugerida pelo Hugo para resolvermos o problema foi irmos comparando os dígitos a partir da metade com seu correspondente e ir montando o próximo palíndromo.
Inicialmente começamos tratando os casos para um dígito: para números de 1 a 8 é trivial pois o próximo palíndromo é o próximo número. Prosseguindo: tentamos fazer o caso do 9, com resposta esperada 11, mas infelizmente sentimos que qualquer solução, mesmo não tão elegante, talvez precisasse de mais código. Colocamos então esse teste no Expected Failures e continuamos nossa programação para tratar os casos de dois dígitos. Decidimos converter o número para string, para assim acessar mais facilmente cada dígito. Para a solução de dois dígitos, utilizamos a idéia de que o próximo palíndromo seria o próximo múltiplo de 11 a partir do número. Para três dígitos, tentamos implementar o algoritmo pensado anteriormente tratando primeiro os casos que só necessitávamos mexer no número do meio (como 808), mas acabou nosso tempo de programação.
Achamos um “bug” no test Runner do Squeak: quando temos uma Expected Failure, um código sem “Failures” fica com cor amarela no Test Runner, enquanto um código com “Failures” fica com cor verde.
Coisas Boas: Implementação de Mensagem em classe “raíz”+, SmallTalk++, digitAt, Method Finder, raisedTo, Blog, “121 at: 2″.
Coisas Ruins: Pouca Gente++, Test Runner Bugado+++, Falta de Precedência Confunde, Sono++, Controlar o tempo com o celular é ruim, Fugimos do Algoritmo (?), Fugimos do Baby Step(?), Problema não tão complicado mas não terminamos, código feio, “String at: 2 asString asInteger”++.
A se pensar: Como trazer mais gente? Utilizar algoritmos já conhecidos de primeira ou ir construindo o algoritmo aos poucos?