MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Partitioning a list into unequal partitions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg47477] Re: Partitioning a list into unequal partitions
  • From: Jon Harrop <jdh30 at cam.ac.uk>
  • Date: Wed, 14 Apr 2004 07:16:26 -0400 (EDT)
  • Organization: University of Cambridge
  • References: <c5gfdp$an0$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

DIAMOND Mark R. wrote:

> Could someone please show me a simple (non-procedural) way of partitioning
> a list into 1,2,3 ... n disjoint sublists, where the length of the list is
> guaranteed to be correct (i.e. n*(n+1)/2)
> 
> I can't see a way, and yet I'm sure there *must* be a one-liner using
> Fold.

I get:

GrowingSplit[l_] := 
  Block[{t = Take[#2, #1]}, If[Length[#2] == #1, {t},
        Prepend[#0[1 + #1, Drop[#2, #1]], t]]]&[1, 1]

which gives:

In  := GrowingSplit[{1, 2, 2, 3, 3, 3}]
Out := {{1}, {2, 2}, {3, 3, 3}}

I can't think of any way to use Fold though...

This has brought up a couple of questions for me though.

Firstly, I'd rather have used "Function[...]" rather than "(...)&" but how
do you refer to the function itself in the former case?

Secondly, is there a built-in function for splitting a list in two at the
given index? This would be more efficient than calling "Take[]" and then
"Drop[]" with the same arguments.

Cheers,
Jon.


  • Prev by Date: Solvability sensitive to small changes in numerical input
  • Next by Date: Re: Partitioning a list into unequal partitions
  • Previous by thread: Re: Partitioning a list into unequal partitions
  • Next by thread: Re: Partitioning a list into unequal partitions