我完成了具有以下指令的任務:跳過下一元音和輔音在一個字符串
僞代碼,寫,需要一個間諜的真實姓名(例如,「費利西亞託雷斯」)的方法,並創建一個通過執行以下操作僞造名稱:
交換姓氏和名字。 將'aeiou'中的所有元音(a,e,i,o或u)更改爲下一個元音,並將所有輔音(除元音之外的所有其他元音)更改爲字母表中的下一個輔音。
我的解決辦法:
@vowels = %w(a e i o u)
@consonants = ("a".."z").to_a - @vowels
def next_vowel(letter)
i = 0
while i < @vowels.length
if @vowels[i] == "u"
return @vowels[0]
elsif @vowels[i] == letter
return @vowels[i+1]
end
i += 1
end
end
def next_consonant(letter)
i = 0
while i < (@consonants.length)
if @consonants[i] == "z"
return @consonants[0]
elsif @consonants[i] == letter
return @consonants[i + 1]
end
i += 1
end
end
def alias_manager(name)
name.downcase!
first_name = name.split(" ")[0]
last_name = name.split(" ")[1]
alias_first_name = last_name.chars.map do |i|
if @vowels.include?(i)
next_vowel(i)
elsif @consonants.include?(i)
next_consonant(i)
end
end
alias_last_name = first_name.chars.map do |i|
if @vowels.include?(i)
next_vowel(i)
elsif @consonants.include?(i)
next_consonant(i)
end
end
alias_first_name.join.capitalize! + " " + alias_last_name.join.capitalize!
end
我試圖想到寫這個的一個更簡潔的方式。 'while'循環似乎不是最有效的方法。我正在考慮使用「旋轉」,但不知道如何替換字符串中的字母。另外,有沒有一種方法來重構first_name
和last_name
的最後迭代?我基本上爲不同的變量寫了兩次相同的東西。
'tr(@ vowels.join,@ vowels.rotate.join)'是個好主意。 – mudasobwa
這是迄今爲止最好的答案。 – mudasobwa