Robbie Hatley's Solutions, in Perl, for The Weekly Challenge #299 (Word Replacements and Searches)

For those not familiar with "The Weekly Challenge", it is a weekly programming puzzle with two parts, cycling every Sunday. You can find it here:

The Weekly Challenge

The Weekly Challenge for the week of 2024-12-08 through 2024-12-14 is #299.

The tasks for challenge #299 are as follows:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Task 299-1: Replace Words
Submitted by: Mohammad Sajid Anwar
You are given an array of words and a sentence. Write a script
to replace all words in the given sentence that start with any
of the words in the given array.

Example #1:
Input: @words = ("cat", "bat", "rat")
$sentence = "the cattle was rattle by the battery"
Output: "the cat was rat by the bat"

Example #2:
Input: @words = ("a", "b", "c")
$sentence = "aab aac and cac bab"
Output: "a a a c b"

Example #3:
Input: @words = ("man", "bike")
$sentence = "the manager was hit by a biker"
Output: "the man was hit by a bike"

My approach was to first split the sentence into a list of words, then for each word/replacement pair, if the word starts with the replacement, then change every instance of that word within the sentence to that replacement word.

Robbie Hatley's Perl Solution to The Weekly Challenge 299-1

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Task 299-2: Word Search
Submitted by: Mohammad Sajid Anwar
You are given a grid of characters and a string. Write a script
to determine whether the given string can be found in the given
grid of characters. You may start anywhere and take any
orthogonal path, but may not reuse a grid cell.

Example #1:
Input: @chars =
['A', 'B', 'D', 'E'],
['C', 'B', 'C', 'A'],
['B', 'A', 'A', 'D'],
['D', 'B', 'B', 'C'],
$str = 'BDCA'
Output: true

Example #2:
Input: @chars =
['A', 'A', 'B', 'B'],
['C', 'C', 'B', 'A'],
['C', 'A', 'A', 'A'],
['B', 'B', 'B', 'B'],
$str = 'ABAC'
Output: false

Example #3:
Input: @chars =
['B', 'A', 'B', 'A'],
['C', 'C', 'C', 'C'],
['A', 'B', 'A', 'B'],
['B', 'B', 'A', 'A'],
$str = 'CCCAA'
Output: true

I made a subroutine which uses this approach: From each possible starting point, try building paths from that point which obey these three restrictions:

  1. Path doesn't go out-of-bounds
  2. Path doesn't re-use any cells
  3. Path so-far matches relevant characters of string

If any path is found which fully matches string, return 1; else return 0.

Robbie Hatley's Perl Solution to The Weekly Challenge 299-2

That's it for challenge 299; see you on challenge 300!

Comments

Popular posts from this blog

Robbie Hatley's Solutions To The Weekly Challenge #262

Robbie Hatley's Solutions To The Weekly Challenge #266

Robbie Hatley's Solutions To The Weekly Challenge #273