Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Re (tilly) 2: (Golf as well): List of Partitions

by danger (Priest)
on May 07, 2001 at 00:52 UTC ( [id://78385]=note: print w/replies, xml ) Need Help??


in reply to Re (tilly) 2: (Golf as well): List of Partitions
in thread (Golf as well): List of Partitions

Hmm, and we can shave that down to 71 chars:

sub P{ [@_],map{my$i=$_;grep{!grep$_>$i,@$_}map[$i,@$_],P($_[0]-$i)}1..$_[0]- +1 }

Replies are listed 'Best First'.
Re (tilly) 4: (Golf as well): List of Partitions
by tilly (Archbishop) on May 07, 2001 at 01:04 UTC
    Nice, now slimed down to 64 on the knowledge that the partitions are always sorted from largest number to smallest...
    sub P{ [@_],map{my$i=$_;map$$_[0]>$i?():[$i,@$_],P($_[0]-$i)}1..$_[0]-1 }
    UPDATE
    Saved an additional char because my map could be commified.

    UPDATE 2
    Scraping the barrel for 61:

    sub P{ my$i;[@_],map{map$$_[0]>$i?():[$i,@$_],P($_[0]-++$i)}2..$_[0] }

      Tilly, i would say something, but it would sound clunky compared to the beautiful code above. It would be nice if i could ++ you more than once for that snippet.

      One question though, what's commified? i'm not sure if i've ever heard the term...

      jynx

        Here is what I mean by commified. Consider the following 2 versions of the same map statement:
        ...map{"@$_\n"}@a... ...map"@$_\n",@a...
        The first form is more general, you can put more complex logic inside the block. The second form replaces the block with a comma and shaves a character. Often you can shave a few characters off of someone's solution by seeing that a few map's or grep's can switch over to the version with the comma.

        Sometimes it is not obvious that you can. So sometimes I just have to try it out. As in the case:

        ...map{$$_[0]>$i?():[$i,@$_]}P($n-$i)... ...map$$_[0]>$i?():[$i,@$_],P($n-$i)...
        Incidentally the following version is the same size, but has slightly nicer (IMHO) output:
        sub P{ my$i=pop;[$i],map{--$i;map$$_[0]>$i?():[$i,@$_],P($_-1)}2..$i }

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2024-03-29 12:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found