diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-07-05 18:55:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-05 18:55:57 +0100 |
| commit | 355852d009432c815e9043076007f6de484c8a2e (patch) | |
| tree | 697d7e8b4319c6eb8a03ffd01ae27c65cb6823ad | |
| parent | 61a848a3387db99b19542d1e2f0afce293d4a339 (diff) | |
| parent | 145ecb90f1c6310beeebec3a473a35c7b81c5142 (diff) | |
| download | perlweeklychallenge-club-355852d009432c815e9043076007f6de484c8a2e.tar.gz perlweeklychallenge-club-355852d009432c815e9043076007f6de484c8a2e.tar.bz2 perlweeklychallenge-club-355852d009432c815e9043076007f6de484c8a2e.zip | |
Merge pull request #6396 from brxfork/ch172
Ch172
| -rwxr-xr-x | challenge-172/brxfork/perl/ch-1.pl | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/challenge-172/brxfork/perl/ch-1.pl b/challenge-172/brxfork/perl/ch-1.pl new file mode 100755 index 0000000000..5b9b25b0cc --- /dev/null +++ b/challenge-172/brxfork/perl/ch-1.pl @@ -0,0 +1,42 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use re 'eval'; + +# 1) change the integer ($m) in string. For example 7 becomes 'NNNNNNN' +# 2) make a big regex. The regex depends of the number of primes to sum ($n) +# 3) use the regex to find all solutions + +# example : the regex will match (NN)(NNNNN) on "NNNNNNN" : $1 == "NN" , $2 == "NNNNN" => 7=2+5 + +# regex pieces +my $firstnumber='(NN+?)'; # find a number > 2 +my $isprime='(??{$+=~/^(NN+)\1+$/})'; # produce "1" if number is not prime and will fail with backtracking +my $otherbiggernumber='(\g{-2}N+?)'; #\g{-2} is the capture of the precedent number, so current number is bigger +my $storage='(?{push @sol,[map length, @{^CAPTURE}] })(?!)'; # store solution and force bactracking with '(?!)' -- https://perldoc.pl/perlvar#@%7B%5ECAPTURE%7D +#my $storage='(?{push @sol,[map { $+[$_] - $-[$_] } 1..$n]})' # @+ et @- https://perldoc.pl/perlvar#@LAST_MATCH_END https://perldoc.pl/perlvar#@LAST_MATCH_START + + +#for my $input ([18,2],[19,3],[7,2],[119,3],[119,4],[119,5],[119,6],[119,7],[119,8],[119,9],[341,3],[341,4],[341,5],[341,6],map [$_,3],4..99) { +for my $input ([18,2],[19,3],[7,2],[119,8],[341,3]) { + + my $m = $input->[0]; + my $n = $input->[1]; + my $number = "N" x $m; + my @sol; + my $regex = + '^' . + $firstnumber . $isprime . + ( ($otherbiggernumber . $isprime) x ($n - 1)) . + '$' . + $storage; + + $number =~ $regex ; + print "regex : \n" , $regex , "\n"; # + print "$m ($n primes) = \n"; + for my $s (@sol) { + print "\t", join ' + ',@$s; + print "\n"; + } + print "---\n" ; +} |
