用Perl打印出唯一的行

用Perl打印出唯一的行,perl,unique,Perl,Unique,我受到一道数学题的挑战。给定十个数字(在本例中,数字从1到10),六个数字的唯一组合有多少?简单的答案是210。然而,我想知道这些组合是什么 我已经把下面的代码放在一起了。第一个while循环可以很好地创建许多排序的组合,但是,我无法只打印出唯一的行组合。如何打印出这些独特的行 my %hash; my @sorted_numbers; # make all permutations with numbers from 1 to 10 my $permutor = List::Permutor

我受到一道数学题的挑战。给定十个数字(在本例中,数字从1到10),六个数字的唯一组合有多少?简单的答案是210。然而,我想知道这些组合是什么

我已经把下面的代码放在一起了。第一个while循环可以很好地创建许多排序的组合,但是,我无法只打印出唯一的行组合。如何打印出这些独特的行

my %hash;
my @sorted_numbers;

# make all permutations with numbers from 1 to 10
my $permutor = List::Permutor->new (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
while ( my @permutation = $permutor->next() ) {
        my $string = "@permutation";
        my ($N1, $N2, $N3, $N4, $N5, $N6, $N7, $N8, $N9, $N10) = split (/ /, $string);

        # chose only the first six numbers and sort them in ascending order
        my @numbers = ($N1, $N2, $N3, $N4, $N5, $N6);
        @sorted_numbers = sort {$a <=> $b} @numbers;
}

# print out the unique number combinations from the temp file
my @unique_combinations = uniq @sorted_numbers;
foreach ( @unique_combinations ) {
    print $_, "\n";
}
my%hash;
我的@sorted_编号;
#用1到10的数字进行所有排列
我的$permutor=List::permutor->new(1,2,3,4,5,6,7,8,9,10);
而(my@permutation=$permutor->next()){
my$string=“@permutation”;
my($N1、$N2、$N3、$N4、$N5、$N6、$N7、$N8、$N9、$N10)=拆分(/,$string);
#只选择前六个数字并按升序排序
我的@numbers=($N1、$N2、$N3、$N4、$N5、$N6);
@sorted_numbers=sort{$a$b}@numbers;
}
#从临时文件打印出唯一的数字组合
我的@unique_组合=uniq@sorted_编号;
foreach(@unique_组合){
打印美元“\n”;
}

可能还有其他CPAN模块用于此,但这里有一种方法:

use Math::Combinatorics qw(combine);
my @comb = combine(6, 1..10);
(这闻起来很像家庭作业问题,所以我只想给你一个提示)

在每次迭代中,您需要在某个位置存储
@排序的\u编号
,例如:

while (my @permutation = $permutor->next) {
    ...
    @sorted_numbers = sort { $a <= > $b } @numbers;
    push(@combinations, ...);
}

my @unique_combinations = uniq @combinations;
foreach (@unique_combinations) {  ... }
您可以直接从
@permutation
计算
@numbers
,方法是:


您不需要先将
@permutation
转换为字符串,然后再将其拆分。只需使用
@numbers=@permutation[0..5]
。对数字进行排序似乎有点奇怪。。。这整个练习的目的不是要找出不同的排列吗?实际上是独特的组合。我只是有一些奇怪的做事方式:但我正在学习;)此外,使用散列通常是查找唯一内容的最快方法:my@stuff=(1,2,3,3,“somestring”);我的%独一无二;foreach my$foo(@stuff){$unique{$foo}=1;}打印键%unique;
(1,2,3,4,5,6,7,8,9,10) may be written (1..10)
my @numbers = @permutation[0..5];