Hackerrank Ruby - Strings - Methods II Solution
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)
- Returnstrue
if str contains the given string or character. Very simple! > "hello".include? "lo" #=> true > "hello".include? "ol" #=> falseString.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)) }
str
end
def strike(str)
"<strike>" + "#{str}" + "</strike>"
end
Approach 2.
def strike(str)
return "<strike>#{str}</strike>"
end
def mask_article(str, words)
words.each{|to_rep| str.gsub!(to_rep, strike(to_rep))}
return str
end
Approach 3.
# Enter your code here
def mask_article(s, words)
words.each do |w|
s = s.gsub(w, strike(w))
end
return s
end
def strike(s)
return "<strike>" + s + "</strike>"
end