Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: Progressive pattern matching

by blakem (Monsignor)
on Oct 17, 2001 at 15:33 UTC ( #119368=note: print w/replies, xml ) Need Help??


in reply to Re: Progressive pattern matching
in thread Progressive pattern matching

Ugh, its too late to finish my golf game....
warning: not necessarily portable since it uses 'glob'.
#!/usr/bin/perl -w use strict; my $seq="APKLGIYSPRIGLYHFHKLDTPRLGAKLJHHDGFYSDA"; my @motif=("ST","P","RK","ILVF","G","ILVFM","Y"); my @a = my @b = my @c = @motif; my %m; while(my$r=!$|++&&\@a||pop@a&&\@a||shift@b&&\@b){for(glob('{'. join('',map{'{'.(join',',split(//)).'}'}@$r).'}')){length($_)> 2&&$seq=~/$_/&&$m{$_}++;}}for(sort{length($b)<=>length($a)}keys %m){print"$_ at ",index($seq,$_)+1,"\n"} =OUTPUT SPRIGLY at 8 PRIGLY at 9 PKLGIY at 2 SPRIGL at 8 KLGIY at 3 RIGLY at 10 SPRIG at 8 TPRLG at 21 TPRL at 21 IGLY at 11 LGIY at 4 SPRI at 8 GFY at 33 GIY at 5 TPR at 21 GLY at 12 SPR at 8

-Blake

Replies are listed 'Best First'.
Re: Re: Re: Progressive pattern matching
by tfrayner (Curate) on Oct 17, 2001 at 17:25 UTC
    Heh - nice.

    I knew there must be a shorter solution. I won't comment on whether it's simpler, but I know which I think is more readable :-). However, I note that your solution is in fact technically a little more complete than mine. My script misses substrings that aren't at the end of matches (i.e. will match GLY in SPRIGLY but not SPR). Neither script matches PRI, RIG or IGL in the above.

    Although why you might want to do this (save for the sake of programming elegance) I'm not sure :-P

    About my only contribution (since it's going to take me a little while to fully comprehend the golf) is that the @c array appears to be dispensable.

    Tim

      It took me longer than I thought to get this working last night... I therefore had to cut the actual golfing part short. Here is an updated version after spending a few minutes trimming chars.
      #!/usr/bin/perl -w use strict; my $s = "APKLGIYSPRIGLYHFHKLDTPRLGAKLJHHDGFYSDA"; my @m = ( "ST", "P", "RK", "ILVF", "G", "ILVFM", "Y" ); @"=@'=@m;my%m;while($"=!$:--&&\@"||pop@"&&\@"||shift@'&&\@'){length($_ +)>2&& $s=~$_&&$m{$_}++for(glob'{'.join('',map{'{'.(join',',split(//)).'}'}@{ +$"}). '}')}for(sort{length($b)-length($a)}keys%m){print"$_ at ",index($s,$_) ++1,$/} =OUTPUT SPRIGLY at 8 PRIGLY at 9 PKLGIY at 2 SPRIGL at 8 KLGIY at 3 RIGLY at 10 SPRIG at 8 TPRLG at 21 TPRL at 21 IGLY at 11 LGIY at 4 SPRI at 8 GFY at 33 GIY at 5 TPR at 21 GLY at 12 SPR at 8
      Basically, we loop through a set of munged @motif arrays transforming them into glob strings which happen to spit out the various substrings we're looking for.

      -Blake

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://119368]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (5)
As of 2020-05-31 10:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If programming languages were movie genres, Perl would be:















    Results (173 votes). Check out past polls.

    Notices?