| 17 October 2025 | Challenge 341 |
Broken Prefix
Task 1: Broken Keyboard
Submitted by: Mohammad Sajid Anwar
You are given a string containing English letters only and also you are given broken keys.
Write a script to return the total words in the given sentence can be typed completely.
Example 1
Input: $str = 'Hello World', @keys = ('d')
Output: 1
With broken key 'd', we can only type the word 'Hello'.
Example 2
Input: $str = 'apple banana cherry', @keys = ('a', 'e')
Output: 0
Example 3
Input: $str = 'Coding is fun', @keys = ()
Output: 3
No keys broken.
Example 4
Input: $str = 'The Weekly Challenge', @keys = ('a','b')
Output: 2
Example 5
Input: $str = 'Perl and Python', @keys = ('p')
Output: 1
Solution
Though this task is a duplicate of task 1 from week 275, it turns out that my former solution does not comply to this week’s examples. Specifically, my old solution cannot handle the case of no broken keys.
So here is a slightly modified version.
use strict;
use warnings;
sub broken_keys {
my $typeable = qr{^[^\s@{+shift}]+$}ixx;
grep /$typeable/, split /\s+/, shift;
}
See the full solution to task 1.
Task 2: Reverse Prefix
Submitted by: Mohammad Sajid Anwar
You are given a string, $str and a character in the given string, $char.
Write a script to reverse the prefix upto the first occurrence of the given $char in the given string $str and return the new string.
Example 1
Input: $str = "programming", $char = "g"
Output: "gorpramming"
Reverse of prefix "prog" is "gorp".
Example 2
Input: $str = "hello", $char = "h"
Output: "hello"
Example 3
Input: $str = "abcdefghij", $char = "h"
Output: "hgfedcbaij"
Example 4
Input: $str = "reverse", $char = "s"
Output: "srevere"
Example 5
Input: $str = "perl", $char = "r"
Output: "repl"
Solution
Search for $char within $str and reverse the found prefix.
$chr is not limited to a single character.
use strict;
use warnings;
sub reverse_prefix ($chr, $str) {
$str =~ s/.*?$chr/reverse $&/er;
}
See the full solution to task 2.