in reply to Re: combining array items to match a certain string
in thread combining array items to match a certain string
First turn on strictures (you always use strictures don't you?), then set up the target string and the search list. Perform the search using the starting parameters.
use strict; use warnings; my $target = "cowboycatdog"; my @parts = qw(cow cowboy boy cat at do dog); search ($target, [@parts], []);
Assign the parameters passed to the sub to local variables. Note that the arrays are passed as references so that two arrays can be passed.
sub search { my ($target, $parts, $used) = @_;
Check to see if there is anything left to match. If the target string is zero length then we have a successful combination in @$used. Print the result and return.
unless (length $target) { print join ("-", @$used), "\n"; return; }
otherwise loop over the remaining unused words looking for matches with the start of the remaining target string.
for my $part (@$parts) {
if there is no match for the current word at the start of the target string skip to the next word
next unless 0 == index $target, $part;
otherwise isolate the part of the target string following the current word.
my $remainder = substr $target, length $part;
Recursively search the remaining part of the target string using the word list passed in excluding the current word and passing a list of the words used so far plus the current word.
search ($remainder, [grep {$part ne $_} @$parts], [@$used, $pa +rt]); } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: combining array items to match a certain string
by pc2 (Beadle) on Dec 23, 2007 at 15:22 UTC | |
by GrandFather (Saint) on Dec 23, 2007 at 19:24 UTC | |
by pc2 (Beadle) on Dec 23, 2007 at 20:36 UTC | |
by pc2 (Beadle) on Mar 15, 2008 at 12:29 UTC |