       Re: Tilting at Windmills?

• To: mathgroup at smc.vnet.net
• Subject: [mg62150] Re: Tilting at Windmills?
• Date: Sat, 12 Nov 2005 03:33:04 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```On 11/11/05 at 2:52 AM, anonmous69 at netscape.net (Matt) wrote:

>Where there's a chance of success, I tend to agonize over details of
>implementation.  Memory usage is one such area.  Here is a
>statement of a problem I was trying to solve in Mathematica:

>Given a list of the following form:{x1,x2,x3,...,xn-1,xn} I want to
>develop an algorithm that will iterate over the input list to
>produce output of the following
>form:{x1,x2,x2,x2,x2,x3,x3,x3,x3,x4,x4,x4,x4,x5,...,xn-2,xn-1,xn-1,
>xn-1,xn-1,xn} which will then need to be partitioned to end up in
>the following form:
>{{x1,x2},{x2,x2},{x2,x3},{x3,x3},{x3,x4},{x4,x4},{x4,x5},...,{xn-2,
>xn-1},{xn-1,xn-1},{xn-1,xn}} which means that if I had a flattened
>list of length'n' as input, then the new flattened list would have
>a length of 4*(n-2)+2

>Here is my first solution to this problem, along with a test
>harness for validation:

<code snipped>

Your code to do what you wanted seemed more complex than needed. By making use of the third aguement to Partition you can create the list you wanted with

f[x_] := Partition[Flatten@Partition[x, 2, 1], 2, 1]

A quick check

In:=f[{x1, x2, x3, x4}]
Out=
{{x1, x2}, {x2, x2}, {x2, x3}, {x3, x3}, {x3, x4}}

shows f works as desired

And a check of the timing

In:=data = Range;
In:=Timing[f[data];][]
Out=0.21 Second

An alternative that runs faster but is perhaps less obvious is

h[x_] := Module[
{z = Flatten@Transpose@{Most[x], Rest[x]}},
Transpose@{Most[z], Rest[z]}]]

checking

In:=h[data] == f[data]
Out=True

In:=Timing[h[data];][]
Out=0.11 Second
--
To reply via email subtract one hundred and four

```

• Prev by Date: Re: Re: Re: integer solution
• Next by Date: Re: Re: Plot Angle between Vectors
• Previous by thread: Re: Tilting at Windmills?
• Next by thread: Re: Tilting at Windmills?