You've successfully subscribed to The Poor Coder | Hackerrank Solutions
Great! Next, complete checkout for full access to The Poor Coder | Hackerrank Solutions
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Hackerrank Ruby - Strings - Methods II Solution

Hackerrank Ruby - Strings - Methods II Solution

Beeze Aal
Beeze Aal

In this tutorial, we'll learn about the methods in String class that help us to search and replace portions of the string based on a text or pattern.

  • String.include?(string) - Returns true if str contains the given string or character. Very simple!    > "hello".include? "lo"   #=> true > "hello".include? "ol"   #=> false
  • String.gsub(pattern, <hash|replacement>) - Returns a new string with allthe occurrences of the pattern substituted for the second argument: . The pattern is typically a Regexp, but a string can also be used.    "hello".gsub(/[aeiou]/, '*')                  #=> "h*ll*" "hello".gsub(/([aeiou])/, '')             #=> "hll"

Either method will depend upon the problem you are trying to solve, and the nature of input-output behavior you desire.

In this challenge, your task is to write the following methods:

  • mask_article which appends strike tags around certain words in a text. The method takes 2 arguments: A string and an array of words. It then replaces all the instances of words in the text with the modified version.
  • A helper method strike, given one string, appends strike off HTML tags around it. The strike off HTML tag is <strike></strike>.

For example:

> strike("Meow!") # => "<strike>Meow!</strike>"
> strike("Foolan Barik") # => "<strike>Foolan Barik</strike>"
> mask_article("Hello World! This is crap!", ["crap"])
"Hello World! This is <strike>crap</strike>!"

Apply the helper method in completing your main method.

Solution in ruby

Approach 1.

def mask_article(str, arr)
    arr.each { |word| str.gsub!(/#{word}/, strike(word)) }

def strike(str)
    "<strike>" + "#{str}" + "</strike>"

Approach 2.

def strike(str)
    return "<strike>#{str}</strike>"
def mask_article(str, words)
    words.each{|to_rep| str.gsub!(to_rep, strike(to_rep))}
    return str

Approach 3.

# Enter your code here
def mask_article(s, words)
    words.each do |w|
        s = s.gsub(w, strike(w))
    return s

def strike(s)
    return "<strike>" + s + "</strike>"