# List all the possible combinations of three numbers from a given sample.

I have to work out and write down all the possible combinations of three numbers can be extracted (without repetition) from 80.

as an illustration:

there is only one group of three numbers in 3 (1,2,3)
there are four groups of three numbers in 4 (1,2,3  1,2,4  1,3,4  2,3,4)
there are 10 groups of three numbers in 6

I have for the calculation =COMBIN(80, 3) for excel which gives me 18,424 possibilities, so I know how many combinations are possible

I need code that will list all them written out in a spreadsheet in an list probably in a text document

I would be very grateful for help
###### Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
This is a duplicate of http:Q_28019535.html
0
Commented:
Simple to do...

``````my @arr = #list of 80 numbers - either entered directly in code or read from file
open OUT, ">output.csv" or die "could not write output: \$!";
for my \$i (0..79) {
for my \$j ((\$i+1)..79) {
for my \$k ((\$j+1)..79) {
print OUT "\$i,\$j,\$k\n";
}
}
}
close OUT;
``````
0
Chief slayer of dragonsAuthor Commented:
TommySzalapski

it is a duplicate because I was advised to try Perl, so I reposted from excel to Perl
0
Commented:
Hi Michael,

wilcoxon's code looks good to me, except:
- I don't see the point of line 1, since @arr is not referenced elsewhere.
- From your examples, it looks as if you want numbers to be 1 to 80, not 0 to 79.

Here's the code with those minor adjustments:
``````#!/usr/bin/perl

open OUT, ">output.csv" or die "Could not write output: \$!";
for my \$i (1..80) {
for my \$j ((\$i+1)..80) {
for my \$k ((\$j+1)..80) {
print OUT "\$i,\$j,\$k\n";
}
}
}
close OUT;
``````
Both scripts produce 82,160 rows of output, which is what =COMBIN(80, 3) gives me when I run it in Excel 2003.
0
Commented:
Good point - typo in my code.  It says "from 80 numbers" so I'm assuming it is not simply the numbers 1-80 (if it is simply 1-80 then tel2's changes to my code will work).

``````my @arr = #list of 80 numbers - either entered directly in code or read from file
open OUT, ">output.csv" or die "could not write output: \$!";
for my \$i (0..79) {
for my \$j ((\$i+1)..79) {
for my \$k ((\$j+1)..79) {
print OUT "\$arr[\$i],\$arr[\$j],\$arr[\$k]\n";
}
}
}
close OUT;
``````
0
Commented:
it is a duplicate because I was advised to try Perl, so I reposted from excel to Perl
What you could do next time is just hit the 'Request Attention' button and ask the Admins to add the Perl zone to the old question. That will generate emails to all the Perl experts asking them to check out your question.

I still don't see why you need something other than Excel for this though for 82k possibilities. Try doing it with the VBA code I posted (it's very similar to the Perl code here). It should work.
0
Commented:
There are a number of modules on cpan that does this for you very easily.

Unless I'm misunderstanding what you want, I think you'll end up with more combinations than what you think.

Here's my test script.
``````#!/usr/bin/perl

use strict;
use warnings;
use Math::Combinatorics;

my @set = 1..6;
my \$combinat = Math::Combinatorics->new(count => 3, data => [@set]);

my \$cnt;
while(my @permu = \$combinat->next_combination){
print join(' ', @permu)."\n";
\$cnt++;
}

print "\n\$cnt\n";
``````

Output of:
c:\testing>permutations.pl
6 5 4
6 5 3
6 5 2
6 5 1
6 4 3
6 4 2
6 4 1
6 3 2
6 3 1
6 2 1
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1

20
0

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Commented:
In Java or C++ like syntax it is, (this is JavaScript)

``````<script>

n=5
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
for (k=j+1;k<=n;k++)
document.write(i +' '+ j+ ' '+ k +"<br>")

</script>
``````
You can run this by copying and pasting into Notepad, saving as a .htm and opening in a browser.

Test n=5
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
0
Commented:
I like the Java version where you can open the list in a browser.  Is there also a way to send the output list to a txt file with the java script?
0
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Math / Science

From novice to tech pro — start learning today.