Dado um puzzle de alfamética, encontra a solução correta.
A alfamética é um puzzle em que as letras das palavras são substituídas por números.
Por exemplo, SEND + MORE = MONEY:
S E N D
M O R E +
-----------
M O N E Y
Substituindo estas letras por números válidos, obtemos:
9 5 6 7
1 0 8 5 +
-----------
1 0 6 5 2
Isto está correto porque cada letra é substituída por um número diferente e, traduzidas as palavras em números, formam uma soma válida.
Cada letra tem de representar um algarismo diferente, e o algarismo inicial de um número com vários algarismos não pode ser zero.
Define uma única função Go, Solve, que aceita uma string de quebra-cabeças que pode ter zero ou mais operadores + e um operador ==; Solve deve tentar resolver o quebra-cabeças de alfamética e devolver um mapa com todas as substituições de letras, tanto para o quebra-cabeças como para a solução da adição.
Usa a seguinte assinatura para a função Solve:
func Solve(puzzle string) (map[string]int, error) {
Solve deve devolver um erro se não houver solução para o quebra-cabeças dado.
Um exemplo de quebra-cabeças e da solução devolvida é:
Solve("SEND + MORE == MONEY")
devolveria
map[string]int{"M":1, "O":0, "N":6, "E":5, "Y":2, "S":9, "D":7, "R":8}, nil
S E N D
M O R E +
-----------
M O N E Y
Substituindo estas letras por números válidos, obtém-se:
9 5 6 7
1 0 8 5 +
-----------
1 0 6 5 2
Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.