Filename: prob32.pl
#!/usr/bin/perl -w # Problem 32 # We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital. # # The product 7254 is unusual, as the identity, 39 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital. # # Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital. # # HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum. use strict; require List::Permutor; my @results = (); my $permutator = List::Permutor->new(1,2,3,4,5,6,7,8,9); while( my @permutation = $permutator->next) { for(my $prod_idx=1; $prod_idx <= $#permutation-1; $prod_idx=$prod_idx+1) { my @working_permutation = @permutation; splice (@working_permutation, $prod_idx, 0, "*"); for(my $eq_idx = $prod_idx+2; $eq_idx <= $#working_permutation; $eq_idx=$eq_idx+1) { my @working_permutation2 = @working_permutation; splice (@working_permutation2, $eq_idx, 0, "=="); my $string = join("", @working_permutation2); my $result = eval($string); if($result == 1) { my @product = split (/==/, $string); print "$string :: "; print "$product[1]\n"; push(@results, $product[1]); } } } } ##12*483==5796 :: 5796 ##138*42==5796 :: 5796 ##157*28==4396 :: 4396 ##159*48==7632 :: 7632 ##1738*4==6952 :: 6952 ##18*297==5346 :: 5346 ##186*39==7254 :: 7254 ##1963*4==7852 :: 7852 ##198*27==5346 :: 5346 ##27*198==5346 :: 5346 ##28*157==4396 :: 4396 ##297*18==5346 :: 5346 ##39*186==7254 :: 7254 ##4*1738==6952 :: 6952 ##4*1963==7852 :: 7852 ##42*138==5796 :: 5796 ##48*159==7632 :: 7632 ##483*12==5796 :: 5796 #my @results = (5796, # 5796, # 4396, # 7632, # 6952, # 5346, # 7254, # 7852, # 5346, # 5346, # 4396, # 5346, # 7254, # 6952, # 7852, # 5796, # 7632, # 5796); my %saw; @saw{@results} = (); my @uniq = keys %saw; my $answer = 0; foreach(@uniq) { $answer = $answer + $_; } print "$answer\n";
syntax highlighted by Code2HTML, v. 0.9.1
No comments:
Post a Comment