Re: Re: question in mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg80171] Re: [mg80143] Re: question in mathematica
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 14 Aug 2007 07:01:52 -0400 (EDT)
- References: <fa11b990e477.46baf2d3@bgu.ac.il> <200708130842.EAA27991@smc.vnet.net>
On 13 Aug 2007, at 10:42, m.r at inbox.ru wrote: > On Aug 11, 1:43 am, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote: >> First, please send such question to the MathGroup, >> >> mathgr... at smc.vnet.net >> >> not me personally. (I really have desire, tiem or ability to replace >> the enitre MathGroup.) >> So I have decided to post this question to the MathGroup in case >> someone else finds it interesting. >> >> Also, there is something about this question and the earlier you sent >> me that make sme suspicious. What do you say "you need to use >> recursion and pattern matching, Select and Join"? This sounds to me >> like some sort of test problem so I have decided to answer it but >> without using any of these functions (although it may not be the >> simplest way to do this). So here is my answer: >> >> ls = {9, 2, 10, 3, 14, 9}; >> >> Reverse[Last[Last[Reap[NestWhile[With[{a = First[Ordering[#, -1]]}, >> Sow[#[[a]]]; Take[#, a - 1]] &,ls,Length[#] > 0 &]]]]] >> >> {9, 10, 14} >> >> On 10 Aug 2007, at 10:12, Ivan Egorov wrote: >> >>> I have one more question. >> >>> Write a function maxima[lis_List] which, given a list of numbers, >>> produces a list of those >> >>> numbers greater than all those that precede them. For example >> >>> maxima[{ 9, 2, 10, 3, 14, 9}] returns { 9, 10, 14}. You need to use >>> recursion, pattern matching, >> >>> Select and Join. >> >>> =E2=80=8E > > I'll make it easier for myself and use pattern matching: > > In[1]:= ReplaceList[{9, 2, 10, 3, 14, 9}, > {s___, x_, ___} /; Max[s] < x :> x] > > Out[1]= {9, 10, 14} > > Maxim Rytin > m.r at inbox.ru > > I just noticed that the two programs are only equivalent if the lists of numbers do not contain repetitions. With repetitions the answers can differ: ls = RandomInteger[{0, 100}, {200}]; Reverse[ Last[Last[ Reap[ NestWhile[ With[{a = First[Ordering[#, -1]]}, Sow[#[[a]]]; Take[#, a - 1]] &, ls, Length[#] > 0 &]]]]] // Timing {0.003511, {97, 98, 98, 99, 100}} ReplaceList[ls, {s___, x_, ___} /; Max[s] < x :> x] // Timing {0.039012, {97, 98, 99, 100}} Of course (in Mathematica 6) one can remove repetitions in a list without significant loss of performance. Andrzej Kozlowski
- References:
- Re: question in mathematica
- From: m.r@inbox.ru
- Re: question in mathematica