Sobes.tech
Middle — Senior

Como alterar a solução para calcular somas e combinações de dados se o número de dados for um parâmetro?

sobes.tech IA

Resposta da IA

Se o número de dados se tornar um parâmetro, a solução para contar somas e combinações deve ser dinâmica e escalável.

Abordagens:

  1. Percurso recursivo:

    • Para cada dado, percorrer todos os valores possíveis (1–6).
    • Recursivamente somar os valores e contar o número de combinações para cada soma.
  2. Programação dinâmica:

    • Usar um array ou dicionário onde o índice seja a soma e o valor seja o número de formas de obter essa soma.
    • Inicialmente, para 0 dados, a quantidade de formas de obter a soma 0 é 1.
    • Para cada dado, atualizar o array adicionando a quantidade de formas para as novas somas.

Exemplo em Go com programação dinâmica:

func diceSums(numDice int) map[int]int {
    dp := make(map[int]int)
    dp[0] = 1

    for i := 0; i < numDice; i++ {
        next := make(map[int]int)
        for sum, count := range dp {
            for face := 1; face <= 6; face++ {
                next[sum+face] += count
            }
        }
        dp = next
    }
    return dp
}

// Uso:
// sums := diceSums(3)
// fmt.Println(sums) // Mostrará a quantidade de combinações para cada soma com 3 dados

Este método permite calcular eficientemente a quantidade de combinações para qualquer quantidade de dados sem percorrer manualmente todas as opções.