#!/usr/bin/perl use strict; use warnings; $|++; # is using Algorithm::FastPermute cheating? i hope not. use Algorithm::FastPermute qw/ permute /; ## use Data::Dumper; # see what's inside... ( @ARGV == 2 and $ARGV[0] < $ARGV[1] ) # process arguments ? my( $lower, $upper ) = @ARGV : die 'usage: ' . $0 . ' lower upper' . $/; NUMBER: for my $try ( $lower..$upper ) { # try each number within bounds my @digits = split //, '*' . $try; # makes ( '*', 1, 2, 3, etc ) my @permutations; # holds permutations # push permutations onto array # unless the permutation has a '*' on either end permute { push @permutations, [ @digits ] unless @digits->[-1] eq '*' or @digits->[0] eq '*'; } @digits; ## # uncomment to see what's inside... ## print Dumper \@permutations; my %results = # product => operation pairs map { eval( $_ ) || 0, $_ } # create pair map { join( '', @{ $_ } ) } # stringify the array @permutations; # for each permutation ## # uncomment to see what's inside... ## print Dumper \@permutations; defined $results{ $try } # if i found one && print( $try, # print it ' is vampire (', $results{ $try }, # and how i got there ')', $/ ) && next NUMBER; } #### .