Peter’s blog ✴ Week 377 ✴ 8 June 2026
THE WEEKLY CHALLENGE
Strings within strings
You are given a string. Write a script to find whether any substring of length 2 is also present in the reverse of the given string.
Example 1 Input: $str = 'abcba' Output: true Reverse of given string is 'abcba'. The substring 'ab' in original string is also present in the reverse string too. Example 2 Input: $str = 'racecar' Output: true The substring 'ce' is present in both. Example 3 Input: $str = 'abcd' Output: false Example 4 Input: $str = 'banana' Output: true The substring 'an' is present in both. Example 5 Input: $str = 'hello' Output: true The substring 'll' is present in both.
After last week's dramatic use of regular expressions from some
contributors I feel a little old-fashioned in submitting a solution
which only uses a trivial $reverse =~ m|$substring|.
However, I tried it with a string of a million random characters from a set of 1000 different ones with multibyte UTF-8 representations, and it completed in under a second, so I think my solution scores reasonably on my usual criteria of easily understood and maintainable code.
I look forward to reading the one-liners.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2026-06-08 use utf8; # Week 377 - task 1 - Reverse existence use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; use Encode; reverse_existence('abcba'); reverse_existence('racecar'); reverse_existence('abcd'); reverse_existence('banana'); reverse_existence('xx'); reverse_existence('x'); reverse_existence(''); # 1000 random chars from set of 160 my $s; $s .= chr(0xc0 + rand(160)) for 1 .. 1000; reverse_existence($s); sub reverse_existence { my ($string, $reverse, $j, $substring); $string = $_[0]; say qq[\nInput: '$string']; # initialise $reverse = reverse($string); for $j (0 .. length($string) - 2) { $substring = substr($string, $j, 2); # does substring exist in reversed string? next unless $reverse =~ m|$substring|; say qq[Output: true - '$substring']; return; } say qq[Output: false]; }
11 lines of code
Input: 'abcba' Output: true - 'ab' Input: 'racecar' Output: true - 'ra' Input: 'abcd' Output: false Input: 'banana' Output: true - 'an' Input: 'xx' Output: true - 'xx' Input: 'x' Output: false Input: '' Output: false Input: 'äėïĝŇàòÙûśøİĽĀÒÍĹÍîŘøŐÛĚĀŞŅŋŅÐĝùÃÖīČŋĶŇÈśéćÚáĬŀĜĐĵĵŞŋŀşġċâĻöőħńÄĝ÷ ðĞãĻŋùĵÙĂIJğŜĨŅĸëœĉúÑýŔéĄĻÍīŋěŒĸŇŚĖÔĔġÑ÷ŞĜ×ôąĔāŊĶËŚÖâďŃŐĺÜûÚòĹĭĽİĬßÕ ÀŏċŝãşĚæÞþÑĨĄĒìĖĞŝÃþÀĭăİĔœÖóčõIJåëĿēŃħľřöðijąŐýùŌëÃĕňĉĬÎĝħýőÈÍòÅńÄĸįŌ ŘĞŇÕñijëŘŎÌáÔÊÈíą×ĐģáÞŀÛíŁéľŖĖŒĤĦÙĠĉĞÞĻċçăĬćĆßÉěĘĊĎĐģĝäşĚÅģşĎÆŖÏäÚÜĂ ĺĸķÏıőċđŗóğĘęĴ÷ÚĿñăåĖÍģãÔčłÓęĪŜŞéÓÎIJœœŐłëÒüáŒÉħĪàĵÏÂĔņŎĺÓÉôłÃŋÀùûÍĞ ïŒŅĶĥĽñĉÛĿčáijæĮŋŞčŃĉĞĤêĜÑŏňúŗĨěÜĨŞŏŊĞŐĎÖŜöâìÀŗęÀċIJśďŖÝÏýÑďôŝãĿŐĻÁąă äÙříÃÒŗėŕÄååċÚĿĹĔþŝŁÓĒĻõŁüćãĮĄĸÿüĻÉôĺċàŔçìĂħŎņßÅČĜĐĿĖĮİïÊĉĊġÚúŊãÙŐĎ ĢÉĩŐħİśîÕĪĉÞÚÒóŇŜŞňÅŞŝĄÆĂûÈĺŇÁĻÞĪìħĨĭþÂĈûÉøāŒúđþõġŇŏŋĔģèùėÈÚÅĆÇijŚíó ĜáĀģáÜēŊĩĢşèæÀŖÆķúĪÛĘijĬĞġÍËÕëùŝÿħÞÉÔIJńńŚČÓâŒŗąďňØċĞņĠöêÑėĞņĐçĦÈÑÉįï čĵðě÷ŋŝĞýÁÝĹûŕóČĶÎĿĢěőİʼnĚłÍôĂêòŎŋĔŝąĜłĆœØĭIJÔĠÝÒçęőåçŝĤĊôĞËçĄŔÇáŐÌĐù łĦŕĪĂijėňòłĘŖŀĥèĐņĬĤĝÙÞÙġÅëæõŇśŐÑâęŖļĽľûëĪēĎŝôđ×ŔäńŃïĭʼnÁěÿòđïÛįçßÃăï ÑĵķĹĜŒĖĶīÃùňìÃĬĕıŞÅÂìĎĴĺúĈÇōĄÃĊĚîîřÐďŔİijÚŌőĴēâÇřÞÿçöĵĀĂĤÎŊĉâŒîĢÀĖĕú îĞŅĩìĹśäŗİąěÁæěľáŁýôėÒûëÎÊŌÃŏĻÞŎĭÖÓïçįijŚĪęáÓáăķĊĴėÏÖŘĠáĜʼnćŀËÏŘĨÑŜĐÝ ëúňīĒÌýńÈÅĿĞŇĻïěæÎłÓïęßŎÿéèĿĺÞĩĻÚÉņîĞŐďãĤßúàģúÞöīņ÷ŁőĿòōüùÿéĚğèŕĵęŚ çĹĹÉďÝČÇİĎÙĈçõéċÙüĺċĄĦōŎĖĹńĽōľŊģijùśĆćĚĂīÃÎýÉċØÑÚĹĵřIJðÀéăĐÊłòìÛÇ' Output: true - 'İĽ'
Any content of this website which has been created by Peter Campbell Smith is in the public domain