Uma coletânea sobre diversas formas de descobrir se um número é par ou não em Go, II
Parte II, a missão
No primeiro artigo, listei alguns meios de saber se um número é par, que fogem do convencional, e sem qualquer compromisso sério. O objetivo era buscar soluções absurdas.
Essa de hoje, é a campeã, mas eu não achei mais o autor, para dar o devido crédito.
Baseado na escrita do último dígito
Exato! Baseado em como se escreve por extenso o último dígito, decide-se se o número é par. Mas isso já foi feito. Agora, isso será decidido pela última letra da palavra em inglês que designa o número, observem a tabela a seguir:
número par ímpar
zero o
one e
two o
three e
four r
five e
six x
seven n
eight t
nine e
Os números pares terminam com as letras ‘o’, ‘r’, ‘x’ e ’t’. Já os ímpares finalizam com ’e’ ou ’n’, apenas. Obviamente, por questões de “otimização” :), irei montar a condição a partir dos ímpares:
package main
import ( “strconv”
"github.com/paulohrpinheiro/mytest"
)
func inFull(c byte) string { switch c { case ‘0’: return “zero” case ‘1’: return “one” case ‘2’: return “two” case ‘3’: return “three” case ‘4’: return “four” case ‘5’: return “five” case ‘6’: return “six” case ‘7’: return “serven” case ‘8’: return “eight” case ‘9’: return “nine” default: panic(“wrong value”) } }
func isEven(n int) bool { s := strconv.Itoa(n) l := s[len(s)-1] f := inFull(l) last := f[len(f)-1]
return last != 'e' && last != 'n'
}
func main() { mytest.Run(1000, isEven) }
Funcionou bonitinho:
Lembrando que o pacote de testes está no texto anterior.