В качестве дополнительного примечания: обратите внимание, что вы чрезмерно усложняете проблему (потому что вы думаете в императивном смысле, взгляните на Функциональное программирование ). Сумма всех возможных значений для двух костей:
>> die = [1,2,3,4,5,6]
>> die.product(die).map { |v1, v2| v1 + v2 }
=> [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 11, 7, 8, 9, 10, 11, 12]
- Позвоните
uniq
в конце, если вы не хотите повторных значений.
- Используйте
repeated_combination(2)
вместо product
, если вы не заботитесь о заказе.
- Обратите внимание, что
die.product(die)
= die.repeated_permutation(2)
)
Найти все суммы для N кубиков почти так же просто:
>> die.repeated_permutation(5).map { |values| values.inject(:+) }