MathGroup Archive 1999

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

Search the Archive

Re: Re: Re: Re: circumference of an ellipse

  • To: mathgroup at smc.vnet.net
  • Subject: [mg19541] Re: [mg19501] Re: [mg19447] Re: [mg19390] Re: circumference of an ellipse
  • From: "Wolf, Hartmut" <hwolf at debis.com>
  • Date: Tue, 31 Aug 1999 00:52:28 -0400
  • Organization: debis Systemhaus
  • References: <199908250525.BAA24787@smc.vnet.net.> <199908281953.PAA24571@smc.vnet.net.>
  • Sender: owner-wri-mathgroup at wolfram.com

Mecit Yaman schrieb:
> 
> Hi there,
> 
> I am trying to solve a problem with Mathematica. You have numbers from 1 to n all
> numbers twice , namely.
> 
> 1 1 2 2 3 3 4 4 5 5   for example for n=5
> 
> I am trying to sort the numbers o that between two 'n's there must be exactly n
> numbers.
> 
> For example if n=3 the solution is
> 2 3 1 2 1 3  .  You see there is 1 number between 1 and 1. and 2 numbers between 2
> and 2, and 3 between 3's.
> 
> I know this forum is not for asking problems. 

Right! So if you do, you should not camouflage you posting behind an
answer to an obviously unrelated question!

>                                         ..... But i am learning MAthematica and
> wanna see how professinals solve a real problem with Mathematica
> 
But I'm deeply sympathetic with everyone who wants to learn, so --
without pretending to be a professional, in fact I'm only an occasional
user, still learning  myself -- I will just show you how I tried to
attack your problem with _Mathematica_.

First thought of course, was to search for a direct solution, but after
short I believed that there is no recursive formula. So I resorted to
brute force (in hope to find some particular solutions which would give
a clue for finding a general solution).

Ideas for brute force are always simple, so to do was all this: for
given n get that List of dubletts (1), construct all permutations of it
(2), test all those with all (4) [patters {___,n,<n Blanks
between>,n,___} (3)] and collect (6) those results where all (5) tests
are true.

For (3) I just wrote

In[4]:= f[n_] := {___, n, Blank[]^n, n, ___}

and now I had to define what I meant with Blank[]^n

In[7]:= Unprotect[Blank]
Out[7]= {"Blank"}
In[8]:=  Blank /: (Literal[Blank][])^1 = Blank[];

In[9]:= Blank /: (Literal[Blank][])^n_ := Sequence[Blank[]^(n - 1),
Blank[]]

It works!

In[10]:= f[2]
Out[10]= {___, 2, _, _, 2, ___}

With that we define a function:

In[78]:=
prod[n_] := With[{probe = Permutations[
          ReleaseHold[Function[x, Hold[Sequence][x, x]] /@
Range[n]](*1*)](*2*)}, 
    With[{r = Function[x, MatchQ[#, f[x]] & /@ probe] /@ Range[n](*4*)}, 
      Cases[Transpose[{probe, #}], {l_, True} :> l] & @ 
        Fold[Inner[And, #1, #2, List] &, First[r], Rest[r](*5*)](*6*)]]

If you try the function

In[81]:= prod[2]
Out[81]= {}

This is ok, we see there is no solution for n=2!

In[82]:= prod[3] // Timing
Out[82]=
{0.191 Second, {{2, 3, 1, 2, 1, 3}, {3, 1, 2, 1, 3, 2}}}

We find the solution you specified, and its reverse which is another
solution (of course! we might say now). Lets try it for n=4

In[83]:= prod[4] // Timing
Out[83]=
{7.961 Second, {{2, 3, 4, 2, 1, 3, 1, 4}, {4, 1, 3, 1, 2, 4, 3, 2}}}

We easily check that as being solutions. But it took much more time.
Since now I was going out for lunch, I ordered for dessert:

In[84]:= prod[5] // Timing
Out[84]= 
{529.391 Second, {}}

I got none, so I leave the rest of the problem for you.

Regards, hw
__________________________________________
P.S.: it's not a circumference of an ellipse, a sort neither.



  • Prev by Date: Re: Simple edit ...
  • Previous by thread: Re: Re: Re: circumference of an ellipse
  • Next by thread: Q: Simple? 3D Plotting Problems