MathGroup Archive 2005

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

Search the Archive

Re: Pure Function for String Selection

  • To: mathgroup at smc.vnet.net
  • Subject: [mg60969] Re: Pure Function for String Selection
  • From: Peter Pein <petsie at dordos.net>
  • Date: Wed, 5 Oct 2005 02:28:15 -0400 (EDT)
  • References: <dht479$hl1$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Edson Ferreira schrieb:
> Dear members,
> 
> I want to define a pure function to filter a set of strings.
> 
> The strings that compose the set have all the same length and the only characters in these strings are "1", "X" and "2".
> 
> The function that I want is like the one bellow:
> 
> In[1]:=
> Unprotect[D];
> In[2]:=
> U={"2","X"};
> In[3]:=
> M={"1","2"};
> In[4]:=
> D={"1","X"};
> In[5]:=
> T={"1","2","X"};
> In[6]:=
> L=Flatten[Outer[StringJoin,T,T,T,D]];
> In[7]:=
> L = Select[L, Count[Characters[#], "1"] > 1 &];
> 
> In this case, it counts the number of characters "1" in each string and select the ones that have more than one "1".
> 
> I want a pure function, to be applied like the one in the example above, but for a different task.
> 
> For each string, I want it to count the maximum number of repeated characters for each character. 
> 
> In other words, It must count the maximum number of repeated "1", "X" and "2" for each string.
> 
> The string must be "selected" if:
> 
> The longest run of repeated "1" is shorter than 8 characters
> AND
> The longest run of repeated "X" is shorter than 6 characters
> AND
> The longest run of repeated "2" is shorter than 6 characters
> 
> For example:
> "11112X122X1XXX" should be "selected"
> (there are four "1" in sequence, 3 "X" in sequence and 2 "2" in sequence)
> 
> "122XXXXXX222XX"  should NOT be "selected"
> (there are six "X" in sequence)
> 
> "11111111222112" should NOT be "selected"
> (there are 8 "1" in sequence)
> 
> Thanks a lot !!!!!
> 
> Edson Ferreira
> 
> 

Something like this:

In[1]:=
Select[
{"11112X122X1XXX", "122XXXXXX222XX", "11111111222112"},
   Function[s,
   And @@ Apply[
     Max[Cases[Split[Characters[s]],
       sl:{#1..} :> Length[sl]]
     ] <  #2 & ,
     {{"1", 8}, {"X", 6}, {"2", 6}},
   {1}]]
]
Out[1]=
{"11112X122X1XXX"}

?

Peter


  • Prev by Date: Re: Pure Function for String Selection
  • Next by Date: Re: partitioning a string
  • Previous by thread: Re: Pure Function for String Selection
  • Next by thread: Re: Pure Function for String Selection