Sobes.tech
Middle — Senior

Jak zmienić rozwiązanie do obliczania sum i kombinacji kostek, jeśli liczba kostek jest parametrem?

sobes.tech AI

Odpowiedź od AI

Jeśli liczba kostek do gry stanie się parametrem, rozwiązanie do liczenia sum i kombinacji musi być dynamiczne i skalowalne.

Podejścia:

  1. Rekursywne przeszukiwanie:

    • Dla każdej kostki rozważ wszystkie możliwe wartości (1–6).
    • Rekurencyjnie sumuj wartości i licz ilość kombinacji dla każdej sumy.
  2. Programowanie dynamiczne:

    • Użyj tablicy lub słownika, gdzie indeks to suma, a wartość to liczba sposobów uzyskania tej sumy.
    • Na początku, dla 0 kostek, liczba sposobów uzyskania sumy 0 wynosi 1.
    • Dla każdej kostki aktualizuj tablicę, dodając liczbę sposobów dla nowych sum.

Przykład w Go z programowaniem dynamicznym:

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
}

// Użycie:
// sums := diceSums(3)
// fmt.Println(sums) // Wyświetli liczbę kombinacji dla każdej sumy przy 3 kostkach

Taki sposób pozwala efektywnie obliczyć liczbę kombinacji dla dowolnej liczby kostek bez ręcznego przeszukiwania wszystkich wariantów.