Whenever I hear Backtracking in the context of Perl, I think Regular Expressions. So, if you can express the problem as a string, and a matching solution as a regular expression, Perl can solve the problem:
use strict; my $change = 16; my @coins = reverse sort qw(2 5); my $q='1'x$change; my $solution = join'',map{qr(((?:.{$_})+))} @coins; $q = ~/^()$solution$/ or die "Error in regex construction"; { # This should maybe be done via @-, but I'm lazy: no strict; print(length(${$_})/$_, '*', $_) for (1..4) };
The key to using Perl effectively is to use its strengths rather than its weaknesses.
Update: Roy Johnson pointed out that I erroneously changed names between testing out and posting - $sol was left over in one place.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: pathsearch/backtracking in Perl - how to solve a problem apparently requiring it? (comparison of Perl with Standard ML)
by !1 (Hermit) on Nov 11, 2004 at 20:43 UTC |