Camel
Peter
Peter Campbell Smith

Find answers

Weekly challenge 315 — 1 April 2025

Week 315: 1 Apr 2025

Task 2

Task — Find third

You are given a sentence and two words. Write a script to return all words in the given sentence that appear in sequence after the given two words.

Examples


Example 1
Input: $sentence = "Perl is a my favourite language but Python is my favourite too."
       $first = "my"
       $second = "favourite"
Output: ("language", "too")

Example 2
Input: $sentence = "Barbie is a beautiful doll also also a beautiful princess."
       $first = "a"
       $second = "beautiful"
Output: ("doll", "princess")


Example 3
Input: $sentence = "we will we will rock you rock you.",
       $first = "we"
       $second = "will"
Output: ("we", "rock")

Analysis

This is a simple case of matching the two words and then any third word, and doing so repeatedly.

My solution copes with punctuation and multiple spaces.

Try it 

Try running the script with any input:



example: Here is the solution



example: is, the

Script


#!/usr/bin/perl

# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge

use v5.26;    # The Weekly Challenge - 2025-03-31
use utf8;     # Week 315 - task 2 - Find third
use warnings; # Peter Campbell Smith
binmode STDOUT, ':utf8';
use Encode;

find_third(qq[Perl is my favourite language but Python is my favourite too.], 'my', 'favourite');
find_third(qq[I like honey, I like sugar, I like everything sweet!], 'I', 'like');
find_third(qq[I like honey, I like sugar, I like everything sweet!], 'everything', 'sweet');
find_third(qq[You  can   include ODD   SPACING], 'include', 'odd');

sub find_third {
    
    my ($sentence, $first, $second, $output);
    
    ($sentence, $first, $second) = @_;
    say qq[\nInput:  \$sentence = '$sentence',\n        \$first = '$first', \$second = '$second'];

    # match the two words and pick up the third
    $sentence =~ s|[^a-zA-Z]| |g;
    $output .= qq['$1', ] while $sentence =~ m|$first\s+$second\s+([a-z]+)|gi;
    
    say 'Output: ', ($output ? '(' . substr($output, 0, -2) . ')' : 'none');
}

Output


Input:  $sentence = 'Perl is my favourite language but Python is my favourite too.',
        $first = 'my', $second = 'favourite'
Output: ('language', 'too')

Input:  $sentence = 'I like honey, I like sugar, I like everything sweet!',
        $first = 'I', $second = 'like'
Output: ('honey', 'sugar', 'everything')

Input:  $sentence = 'I like honey, I like sugar, I like everything sweet!',
        $first = 'everything', $second = 'sweet'
Output: none

Input:  $sentence = 'You  can   include ODD   SPACING',
        $first = 'include', $second = 'odd'
Output: ('SPACING')

 

Any content of this website which has been created by Peter Campbell Smith is in the public domain