SPUG: FW: Help..Any Math GENIUS out there?
Jim Flanagan
jimfl at tensegrity.net
Thu Jul 25 16:16:25 CDT 2002
--On Thursday, July 25, 2002 10:50 AM -0700 "Orr, Chuck (NOC)"
<chuck.orr at attws.com> wrote:
>> I am hoping to use Perl to solve an equation like the below:
>>
>> A + (36*B) + (360*C) + (3600*D) + (129600*E) = 2,307,012
>>
>> I know that each of the variables A - E is a whole number in the
>> range 1-36.
>>
>> Could I load those numbers (1 -36) in an array and substitute each
>> number for each variable until this is solved?
I'm no genius, but here's a possible way to do it. It may not work for
all equations, but seems to work for this one. The strategy is to take as
many multiples (not exceeding the maximum, in this case 36) of the
largest number out first, then subtract that from the total, then work on
the next largest, and so on. The first step is to subtract at least 1
times each of the "factors" from the total, since none of the variables
can be 0.
The answer in this case is:
24 + 3*36 + 8*360 + 28*3600 + 17*129600 = 2307012
Here's a quick and dirty:
my @factors = (1,36,360,3600,129600);
my $target = 2307012;
my @multipliers = ();
my $max = 36;
my $min = 1;
# Assume each factor is multiplied by at least $min
map {$target -= $min * $_} @factors;
for my $factor (sort {$b <=> $a} @factors) {
$mult = int($target/$factor);
$mult = ($mult <= $max) ? $mult : $max;
$target -= $mult * $factor;
unshift @multipliers, $min + $mult;
}
# Show the list of multipliers
@tmp = @multipliers;
print join(' + ', (map {shift(@tmp) . "*$_"} @factors));
print "\n";
# Check our work
my $foo = 0;
map {$foo += $_ * shift @multipliers} @factors;
print $foo;
~
--
Flanagan::Jim
http://jimfl.tensegrity.net
mailto:jimfl%40t%65ns%65gr%69ty.n%65t
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org
More information about the spug-list
mailing list