diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-04-18 19:35:16 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-04-18 19:35:16 +0100 |
| commit | be33dd2aba1140bd39954f64816a59e4b89e643c (patch) | |
| tree | 2dfee46cf2a3a621b3757c20512b3fcc3cb030f0 /challenge-265 | |
| parent | 295710fd207a2e17ef33ae4b1d7264b75e1f3640 (diff) | |
| download | perlweeklychallenge-club-be33dd2aba1140bd39954f64816a59e4b89e643c.tar.gz perlweeklychallenge-club-be33dd2aba1140bd39954f64816a59e4b89e643c.tar.bz2 perlweeklychallenge-club-be33dd2aba1140bd39954f64816a59e4b89e643c.zip | |
- Added solutions by Arne Sommer.
- Added solutions by Mariano Spadaccini.
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-265')
| -rw-r--r-- | challenge-265/laurent-rosenfeld/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-265/laurent-rosenfeld/perl/ch-2.pl | 28 | ||||
| -rw-r--r-- | challenge-265/laurent-rosenfeld/raku/ch-2.raku | 16 |
3 files changed, 45 insertions, 0 deletions
diff --git a/challenge-265/laurent-rosenfeld/blog1.txt b/challenge-265/laurent-rosenfeld/blog1.txt new file mode 100644 index 0000000000..d818b637e6 --- /dev/null +++ b/challenge-265/laurent-rosenfeld/blog1.txt @@ -0,0 +1 @@ +https://blogs.perl.org/users/laurent_r/2024/04/perl-weekly-challenge-265-completing-word.html diff --git a/challenge-265/laurent-rosenfeld/perl/ch-2.pl b/challenge-265/laurent-rosenfeld/perl/ch-2.pl new file mode 100644 index 0000000000..c52d1045c0 --- /dev/null +++ b/challenge-265/laurent-rosenfeld/perl/ch-2.pl @@ -0,0 +1,28 @@ +use strict; +use warnings; +use feature 'say'; + +sub complete_word { + my ($in_str, @in_words) = @_; + my %letters; + $letters{$_}++ for grep { $_ =~ /[a-z]/ } map { lc } split //, $in_str; + my @result; + WORD: for my $word (@in_words) { + my %word_let; + $word_let{$_}++ for map { lc } split //, $word; + for my $k (keys %letters) { + next WORD unless exists $word_let{$k}; + next WORD if $letters{$k} > $word_let{$k}; + } + push @result, $word; + } + return (sort {length $a <=> length $b} @result)[0]; +} + +my @tests = ( ['aBc 11c', ['accbbb', 'abc', 'abbc']], + ['Da2 abc', ['abcm', 'baacd', 'abaadc']], + ['JB 007', ['jj', 'bb', 'bjb']] ); +for my $test (@tests) { + printf "%-8s - %-10s => ", $test->[0], "$test->[1][0] ..."; + say complete_word $test->[0], @{$test->[1]}; +} diff --git a/challenge-265/laurent-rosenfeld/raku/ch-2.raku b/challenge-265/laurent-rosenfeld/raku/ch-2.raku new file mode 100644 index 0000000000..9b171623fa --- /dev/null +++ b/challenge-265/laurent-rosenfeld/raku/ch-2.raku @@ -0,0 +1,16 @@ +sub complete-word ($in-str, @in-words) { + my $letters = $in-str.comb.map({ .lc}).grep( /<[a..z]>/).Bag; + my @result; + for @in-words -> $word { + push @result, $word if $letters ⊆ $word.comb.map({ .lc }).Bag; + } + return min(@result, :by( { $_.chars } )); +} + +my @tests = ('aBc 11c', ('accbbb', 'abc', 'abbc')), + ('Da2 abc', ('abcm', 'baacd', 'abaadc')), + ('JB 007', ('jj', 'bb', 'bjb')); +for @tests -> @test { + printf "%-8s - %-20s => ", @test[0], "@test[1]"; + say complete-word @test[0], @test[1]; +} |
