diff options
Diffstat (limited to 'challenge-273/jeanluc2020/perl/ch-2.pl')
| -rwxr-xr-x | challenge-273/jeanluc2020/perl/ch-2.pl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/challenge-273/jeanluc2020/perl/ch-2.pl b/challenge-273/jeanluc2020/perl/ch-2.pl new file mode 100755 index 0000000000..fcf2ad08c2 --- /dev/null +++ b/challenge-273/jeanluc2020/perl/ch-2.pl @@ -0,0 +1,68 @@ +#!/usr/bin/env perl +# https://theweeklychallenge.org/blog/perl-weekly-challenge-273/#TASK2 +# +# Task 2: B After A +# ================= +# +# You are given a string, $str. +# +# Write a script to return true if there is at least one b, and no a appears +# after the first b. +# +## Example 1 +## +## Input: $str = "aabb" +## Output: true +# +## Example 2 +## +## Input: $str = "abab" +## Output: false +# +## Example 3 +## +## Input: $str = "aaa" +## Output: false +# +## Example 4 +## +## Input: $str = "bbb" +## Output: true +# +############################################################ +## +## discussion +## +############################################################ +# +# We walk the string character for character. If we find a "b" +# we remember this fact. If we encounter an "a" and have already +# seen a "b", we return false. If we're at the end of the string +# our output depends on whether or not we have seen a "b": we +# didn't bail out for seeing an "a" after a "b", so if we didn't +# see any "b" at all, we return false, otherwise true. + +use strict; +use warnings; + +b_after_a("aabb"); +b_after_a("abab"); +b_after_a("aaa"); +b_after_a("bbb"); + +sub b_after_a { + my $str = shift; + print "Input: '$str'\n"; + my $b_seen = 0; + foreach my $char (split //, $str) { + $b_seen = 1 if $char eq "b"; + if($b_seen) { + return print "Output: false\n" if $char eq "a"; + } + } + if($b_seen) { + print "Output: true\n"; + } else { + print "Output: false\n"; + } +} |
