Your description of the problem is a bit puzzling. It looks like you want to run through the string in order and select four characters from it. After you've taken those four out, you want to go back and get four more from what's left, and so on, until you can't form any more tuples. The rules for selecting 4-tuples are that they must all be the same letter (chosen from a cluster of at least 4), or they must be one letter from each of four consecutive clusters of letters.
Is that right?
And then to add to the difficulty, you want to get the largest possible set. I think that is a hard problem. I don't have a solution for you, but I hope I've made your requirements clearer to others.
Update
I have come up with a script that does what I think you want, although it does not skip matches in favor of more optimal ones. It just finds the leftmost tuple until they're all gone. (update again: think it's debugged now) Anyway, it's a start.
#!perl
use strict;
use warnings;
while (<DATA>) {
chomp;
my ($tuple, @set);
print "Starting with $_\n";
while (($tuple) = /((\w)\2\2\2|(\w)(?:\3*)(?!\3)(\w)(?:\4*)(?!\4)(\w
+)(?:\5*)(?!\5)(\w))/) {
$tuple =~ y///cs; # Only one of any character
if (length($tuple) == 1) {
$tuple x= 4;
}
print "Found $tuple!\n";
# Remove tuple
for my $char (split //, $tuple) {
# If it is the last of its kind,
# no more matches across it are possible
# I put a space in there, so it won't match \w
s/(?<!$char)$char(?!$char)/ / or s/$char//;
}
print "Next round: $_\n";
}
}
__DATA__
AAAAADDDDDEFFGMMSSTVVVVV
AADDDEEEEFFFFGGMMMMMMMMMMSTV
AADEEFFG
Caution: Contents may have been coded under pressure.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|