diff options
Diffstat (limited to 'challenge-224/barroff')
| -rw-r--r-- | challenge-224/barroff/awk/ch-1.awk | 36 | ||||
| -rw-r--r-- | challenge-224/barroff/perl/ch-1.pl | 40 | ||||
| -rw-r--r-- | challenge-224/barroff/raku/ch-1.raku | 23 |
3 files changed, 99 insertions, 0 deletions
diff --git a/challenge-224/barroff/awk/ch-1.awk b/challenge-224/barroff/awk/ch-1.awk new file mode 100644 index 0000000000..04a2ebcd4c --- /dev/null +++ b/challenge-224/barroff/awk/ch-1.awk @@ -0,0 +1,36 @@ +#!/usr/bin/env awk + +function special_notes(source, target) { + split(source, source_split, //); + split(target, target_split, //); + for (i in source_split) { + source_dict[source_split[i]]++; + } + for (i in target_split) { + target_dict[target_split[i]]++; + } + for (i in target_dict) { + if (source_dict[i] < target_dict[i]) { + delete source_split; + delete source_dict; + delete target_split; + delete target_dict; + return 0; + } + } + return 1; +} + +function works_for(source, target, success) { + if (success) { + print "Works for source = " source ", and target = " target; + } else { + print "Does not work for source = " source ", and target = " target; + } +} + +END { + works_for("abc", "xyz", !special_notes("abc", "xyz")); + works_for("scriptinglanguage", "perl", special_notes("scriptinglanguage", "perl")); + works_for("aabbcc", "abc", special_notes("aabbcc", "abc")); +} diff --git a/challenge-224/barroff/perl/ch-1.pl b/challenge-224/barroff/perl/ch-1.pl new file mode 100644 index 0000000000..41997891b6 --- /dev/null +++ b/challenge-224/barroff/perl/ch-1.pl @@ -0,0 +1,40 @@ +#!/usr/bin/env perl + +use v5.36; + +sub create_bag (@source_array) { + my %bag; + for my $element (@source_array) { + $bag{$element}++; + } + return %bag; +} + +sub special_notes ( $source, $target ) { + my %source_bag = create_bag( split( //, $source ) ); + my %target_bag = create_bag( split( //, $target ) ); + foreach my $key ( keys %target_bag ) { + return undef + unless defined( $source_bag{$key} ) + and $source_bag{$key} >= $target_bag{$key}; + } + return 1; +} + +#| Run test cases +sub MAIN() { + if ( @ARGV == 2 ) { + say special_notes( $ARGV[0], $ARGV[1] ) ? 'true' : 'false'; + } + else { + use Test2::V0 qw( is plan ); + plan 3; + + is special_notes( 'abc', 'xyz' ), undef, 'works for ("abc", "xyz")'; + is special_notes( 'scriptinglanguage', 'perl' ), 1, + 'works for ("scriptinglanguage", "perl")'; + is special_notes( 'aabbcc', 'abc' ), 1, 'works for ("aabbcc", "abc")'; + } +} + +MAIN(); diff --git a/challenge-224/barroff/raku/ch-1.raku b/challenge-224/barroff/raku/ch-1.raku new file mode 100644 index 0000000000..93f4386085 --- /dev/null +++ b/challenge-224/barroff/raku/ch-1.raku @@ -0,0 +1,23 @@ +#!/usr/bin/env raku + +use v6.d; + +sub special-notes(Str:D $source, Str:D $target --> Bool) { + $target.comb.Bag ⊆ $source.comb.Bag; +} + +#| Run test cases +multi sub MAIN('test') { + use Test; + plan 3; + + is special-notes('abc', 'xyz'), False, 'works for ("abc", "xyz")'; + is special-notes('scriptinglanguage', 'perl'), True, 'works for ("scriptinglanguage", "perl")'; + is special-notes('aabbcc', 'abc'), True, 'works for ("aabbcc", "abc")'; +} + +#| Take user provided list like 1 17 8 +multi sub MAIN(Str:D $source, Str:D $target) { + say special-notes($source, $target); +} + |
