1. Introduction
The Weekly Challenge, organized by Mohammad S. Anwar, is a friendly competition in which developers compete by solving a pair of tasks. It encourages participation from developers of all languages and levels through learning, sharing, and having fun.
Last week I competed in The Weekly Challenge 299 by solving Task 1: Replace Words. The task challenged developers to write a script that, when given an array and a sentence, replaced all words in the sentence that started with any of the words in the array.
In this post I present an overview of, and my solution to, Task 1: Replace Words from The Weekly Challenge 299 and finish with a brief conclusion.
2. Task 1: Replace Words
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.
Examples 1 - 3 illustrate the expected outputs from given inputs.
Example 1
Input: @words = ("cat", "bat", "rat")
$sentence = "the cattle was rattle by the battery"
Output: "the cat was rat by the bat"
Output
can be obtained by replacing any word in $sentence
with $word
from @words
if it starts with $word
, for example:
- The word
cattle
starts with the wordcat
, so replacingcattle
withcat
transforms the sentence intothe cat was rattle by the battery
. - The word
battery
starts with thebat
, so replacingbattery
withbat
transforms the sentence intothe cat was rattle by the bat
. - The word
rattle
starts with the wordrat
, so replacingrattle
withrat
, transforms the sentence intothe cat was rattle 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"
3. My solution
def replace_word(sentence, this_word):
return ' '.join([this_word if word.startswith(this_word) else word for word in sentence.split(' ')])
def replace_words(words, sentence):
for word in words:
sentence = replace_word(sentence,
word)
return sentence
My solution uses two functions: replace_word
and replace_words
.
The replace_word
function replaces any word in the string sentence
that starts with this_word
with this_word
using built-in string methods split
, startswith
, and join
and a list comprehension.
-
sentence.split(' ')
splitssentence
into a list of words using(' ')
as a delimiter. - The list comprehension
[this_word if word.startswith(this_word) else word for word in...]
builds another list of words from thesplit
sentence
list, replacing a word withthis_word
when itstartswith
thethis_word
. -
' '.join(...)
concatenates the second list into a string using(' ')
-
return
returns the string
The replace_words
function successively applies replace_word
to sentence
for each word
in the array words
. It then returns the transformed sentence.
4. Conclusion
In this post I presented an overview of, and my solution to, Task 1: Replace Words from The Weekly Challenge 299.
Since I used built-in methods like split
, join
, and startswith
in my solution, it is straightforward, verbose, and maybe easy to understand. Such an approach may be helpful to you if you are new to Python, new to programming, or unfamiliar with regular expressions.
Top comments (0)