Как увеличить гласные в строке - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно написать метод под названием «vowel_cipher», который берет строку и возвращает новую строку, где каждая гласная становится следующей гласной в алфавите.

Это то, что я написал, но я не получаю правильный ответ:

def vowel_cipher(string)
  new = []
    vowels = "aeiou"
  string.each_char do |char|
if !vowels.include?(char)
  new << char
elsif 
  old_idx = vowels.index(char)
  num = old_idx + 1
  new_idx = num % vowels.length
  new << vowels[new_idx]
  end
  end
  return new_idx
    end

puts vowel_cipher("bootcamp") #=> buutcemp
puts vowel_cipher("paper cup") #=> pepir cap

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Я бы сделал следующее:

VOWELS = %w[a e i o u]
NEXT_VOWELS = VOWELS.zip(VOWELS.rotate).to_h
# => {"a"=>"e", "e"=>"i", "i"=>"o", "o"=>"u", "u"=>"a"}

'jived fox nymph grabs quick waltz'.gsub(
  Regexp.union(VOWELS), # => /a|e|i|o|u/
  NEXT_VOWELS
)
# => "jovid fux nymph grebs qaock weltz"

Маг c возникает при построении ха sh с использованием to_h из гласных и их повернутых значений с использованием rotate и zip, и используя Regexp.union, чтобы gsub мог искать любые совпадения, и передавая ha sh в gsub, который он будет использовать для замены найденных совпадений.


Использование tr, как упомянул Макс, очень быстро и отлично подходит для преобразований одиночных символов . Использование gsub, как мы с Кэри Суовеланд использовали, будет работать для многосимвольных строк, поэтому, если вам нужно заменить подстроки или слова, предложения, шаблоны в шаблонизаторе , тогда это начальная точка.

Примечание: gsub и правильно написанное регулярное выражение также чрезвычайно быстро . Используйте плохо написанное регулярное выражение, и ваш код будет замедляться.

0 голосов
/ 05 мая 2020

Попробуйте это.

NEXT_VOWEL = {"a"=>"e", "A"=>"E", "e"=>"i", "E"=>"I", "i"=>"o",
              "I"=>"O", "o"=>"u", "O"=>"U", "u"=>"a", "U"=>"A"} 

def vowel_cipher(str)
  str.gsub(/[aeiou]/i, NEXT_VOWEL)
end

vowel_cipher "Alice in wonderland" 
  #=> "Eloci on wundirlend" 

Здесь используется форма String # gsub , в котором используется ha sh для подстановки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...