Сочетание нескольких номеров

Используя Perl, как создать все возможные комбинации чисел из диапазона 1..20, где комбинация может содержать набор чисел от 1 до 15 чисел за раз.

Чтобы проиллюстрировать:

Список для случая, когда элементы могут содержать все возможные комбинации из 1 числа за раз в диапазоне 1..20:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

Пример списка для случая, когда элементы могут содержать все возможные комбинации из двух чисел за раз в диапазоне 1..20:

1 2, 1 3, 1 4, 1 5, ..., 2 3, 2 4, ..., 19 20

Пример списка для случая, когда элементы могут содержать все возможные комбинации из трех чисел за раз в диапазоне 1..20:

1 2 3, 1 2 4, ..., 2 3 4, 2 3 5, ..., 18 19 20

Пример списка для случая, когда элементы могут содержать все возможные комбинации из 5 чисел за раз в диапазоне 1..20:

1 2 3 4 5, 1 2 3 4 6, ..., 2 3 4 5 6, 2 3 4 5 7, ..., 15 16 17 18 19 20

Заранее благодарю за любой совет.

1 ответ

Вам просто нужен Algorithm::Combinatorics

use strict;
use warnings;
use Algorithm::Combinatorics qw(combinations);
for (combinations([1..5], 3)) { print "@$_\n";
}

Math::Combinatorics также может выполнять эту работу, но интерфейс не такой интуитивный. Это может быть лучше для больших наборов возвратов, хотя, поскольку он возвращает итератор вместо всех комбинаций одновременно.

licensed under cc by-sa 3.0 with attribution.