Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: (Golf) Multiply polynomials

by jeroenes (Priest)
on May 11, 2001 at 13:30 UTC ( #79662=note: print w/ replies, xml ) Need Help??


in reply to (Golf) Multiply polynomials

I know it's a tad late, but here is my $0.01. To my opinion PDL is neglected around here, and I know I use it too little myself.

With the help of PDL I only use 43 chars for the sub, and if I looked right, it's a record in this thread. You may add 8 chars if you want to account for the extra 'use PDL;' statement:

use PDL: sub p{$t=pdl+pop;$t=$t*(pdl$_)for@_;[list$t]}
This doesn't work with arrays of unequal length, but that wasn't in the spec. The output:
print join " ", @{p([1..5],[1..5])}; 1 4 9 16 25
BTW, tilly, why did you name it 'polynomials'? Isn't it just a breed of recursive vector multiplication? Do I miss something?

And, 'strictness' requires only 3 extra chars with a total of 46/54 chars (54 still is the record):

sub p{my $t=pdl+pop;$t=$t*(pdl$_)for@_;[list$t]}
Jeroen
"We are not alone"(FZ) Update Thx to tye I now know why tilly talked about polynomials. Sorry. If we still want a matrix-kind solution, it would be like:
A = p1'*p2; product = crossdiags(A);
But that's difficult to code in PDL, unfortunately. Here is my 2nd attempt, works only if poly's are equal length (pathetic 164 chars):
sub p{$t=pdl+pop;for(@_){ my $a=outer$t,pdl+pop; transpose($a); my $n=-1+nelem$t; $t=zeroes($n*2+1); $t->slice("$_:".($_+$n))+=$a->slice("$_,:")for 0..$n; } [list$t]}
Will ponder it a bit more and get back....


Comment on Re: (Golf) Multiply polynomials
Select or Download Code
Replies are listed 'Best First'.
Re: Re: (Golf) Multiply polynomials
by tye (Cardinal) on May 11, 2001 at 13:43 UTC

    Sorry, wrong problem.

    p([1..5],[1..5]) should produce [qw(1 4 10 20 35 44 46 40 25)] because ( 1 + 2x + 3x^2 + 4x^3 + 5x^4 ) * ( 1 + 2x + 3x^2 + 4x^3 + 5x^4 )
    is equal to 1 + 4x + 10x^2 + 20x^3 + 35x^4 + 44x^5 + 46x^6 + 40x^7 + 25x^8
    where ^ is exponentiation (** in Perl), not bit-wise XOR.

            - tye (but my friends call me "Tye")

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://79662]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (19)
As of 2015-07-28 14:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (256 votes), past polls