Sunday, August 14, 2011

Problem 38

prob38.pl Problem 38
Filename: prob38.pl
#!/usr/bin/perl -w

## Problem 38

# Take the number 192 and multiply it by each of 1, 2, and 3:
# 
# 192  1 = 192
# 192  2 = 384
# 192  3 = 576
# By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)
# 
# The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).
# 
# What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n  1?

use strict;

for(my $i=1; $i<99999; $i = $i+1)
{
    my $working_string = "";
    while(length($working_string) < 9)
    {
	for(my $j=1; length($working_string) < 9;$j = $j+1)
	{
	    my $num_to_concat = $i*$j;
	    $working_string = sprintf("$working_string" . "$num_to_concat");
	}
    }

    if(isPandigital($working_string))
    {
	print "PANDIGITAL! $i $working_string\n";
    }
}


sub isPandigital
{
    my $num = shift;

    if(length($num) != 9)
    {
	return 0;
    }

    my $pandigits = "123456789";
    my $ordered_digits = join("", sort(split("", $num)));

    if($pandigits eq $ordered_digits)
    {
	return 1;
    }
    else
    {
	return 0;
    }
}


syntax highlighted by Code2HTML, v. 0.9.1

No comments:

Post a Comment