diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2025-11-08 23:49:16 -0500 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2025-11-09 00:31:29 -0500 |
| commit | bd02a583c6f7c87daa8ab51dfe8dcd0033ee0770 (patch) | |
| tree | 53b3603049ba1b554d7fee361f21be1505aec1bd | |
| parent | f4f27bf66e78dacae8759f64053b36bd1995b34f (diff) | |
| download | perlweeklychallenge-club-bd02a583c6f7c87daa8ab51dfe8dcd0033ee0770.tar.gz perlweeklychallenge-club-bd02a583c6f7c87daa8ab51dfe8dcd0033ee0770.tar.bz2 perlweeklychallenge-club-bd02a583c6f7c87daa8ab51dfe8dcd0033ee0770.zip | |
Challenge 346 by Jaldhar H. Vyas.
| -rw-r--r-- | challenge-346/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-346/jaldhar-h-vyas/perl/ch-1.pl | 26 | ||||
| -rwxr-xr-x | challenge-346/jaldhar-h-vyas/perl/ch-2.pl | 49 | ||||
| -rwxr-xr-x | challenge-346/jaldhar-h-vyas/raku/ch-1.raku | 26 | ||||
| -rwxr-xr-x | challenge-346/jaldhar-h-vyas/raku/ch-2.raku | 59 |
5 files changed, 161 insertions, 0 deletions
diff --git a/challenge-346/jaldhar-h-vyas/blog.txt b/challenge-346/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..a42660d3d3 --- /dev/null +++ b/challenge-346/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2025/11/perl_weekly_challenge_week_346.html diff --git a/challenge-346/jaldhar-h-vyas/perl/ch-1.pl b/challenge-346/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..0cecc0ccf6 --- /dev/null +++ b/challenge-346/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl +use 5.038; +use warnings; + +my $str = shift; +my $max = 0; +my @stack = (-1); +my @chars = split //, $str; + +for my $i (keys @chars) { + if ($chars[$i] eq q{(}) { + push @stack, $i; + } else { + pop @stack; + unless (scalar @stack) { + push @stack, $i; + } else { + my $len = $i - $stack[-1]; + if ($len > $max) { + $max = $len; + } + } + } +} + +say $max; diff --git a/challenge-346/jaldhar-h-vyas/perl/ch-2.pl b/challenge-346/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..0fbab92be9 --- /dev/null +++ b/challenge-346/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,49 @@ +#!/usr/bin/perl +use 5.038; +use warnings; +use feature qw/ class /; +no warnings qw/ experimental::class /; + +class DepthFirstSearch { + field $str :param; + field $target :param; + field $n = length($str); + field @result = (); + + method find() { + $self->search(0, '', 0, 0); + return @result; + } + + method search($i, $expr, $current, $previous) { + if ($i == $n) { + if ($current == $target) { + push @result, $expr; + } + return $self; + } + + for my $len (1 .. ($n - $i)) { + my $part = substr($str, $i, $len); + next if length($part) > 1 && $part =~ /^0/; + my $num = int($part); + + if ($i == 0) { + $self->search($i + $len, $part, $num, $num); + } else { + $self->search( + $i + $len, $expr . '*' . $part, + $current - $previous + $previous * $num, $previous * $num); + $self->search($i + $len, $expr . '+' . $part, + $current + $num, $num); + $self->search($i + $len, $expr . '-' . $part, + $current - $num, -$num); + } + } + return $self; + } +} + +my ($str, $target) = @ARGV; +my $dfs = DepthFirstSearch->new(str => $str, target => $target); +say q{(}, (join q{, }, map { "\"$_\"" } $dfs->find), q{)};
\ No newline at end of file diff --git a/challenge-346/jaldhar-h-vyas/raku/ch-1.raku b/challenge-346/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..ccf2418a51 --- /dev/null +++ b/challenge-346/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,26 @@ +#!/usr/bin/raku + +sub MAIN( + $str +) { + my $max = 0; + my @stack = (-1); + + for $str.comb.kv -> $i, $c { + if $c eq q{(} { + @stack.push($i); + } else { + @stack.pop; + if @stack.elems == 0 { + @stack.push($i); + } else { + my $len = $i - @stack[*-1]; + if $len > $max { + $max = $len; + } + } + } + } + + say $max; +} diff --git a/challenge-346/jaldhar-h-vyas/raku/ch-2.raku b/challenge-346/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..3ebc937650 --- /dev/null +++ b/challenge-346/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,59 @@ +#!/usr/bin/raku + +class DepthFirstSearch { + has Str $.str is required; + has Int $.target is required; + has Int $!n; + has @!result; + + submethod BUILD(:$str, :$target) { + $!str = $str; + $!target = $target; + $!n = $str.chars; + @!result = (); + } + + method find() { + self!search(0, q{}, 0, 0); + return @!result; + } + + method !search($i, $expr, $current, $previous) { + if $i == $!n { + if $current == $!target { + @!result.push($expr); + } + return self; + } + + for 1 .. ($!n - $i) -> $len { + my $part = $!str.substr($i, $len); + if $part.chars > 1 && $part ~~ /^0/ { + next; + } + my $num = $part.Int; + + if $i == 0 { + self!search($i + $len, $part, $num, $num); + } else { + self!search( + $i + $len, $expr ~ '*' ~ $part, + $current - $previous + $previous * $num, $previous * $num); + self!search($i + $len, $expr ~ '+' ~ $part, + $current + $num, $num); + self!search($i + $len, $expr ~ '-' ~ $part, + $current - $num, -$num); + } + } + return self; + } +} + +sub MAIN( + $str, + $target +) { + my $dfs = DepthFirstSearch.new(str => $str, target => $target); + say q{(}, $dfs.find.map({ "\"$_\"" }).join(q{, }), q{)}; +} + |
