-
-
Save zaratan/c8b96cd74fb9cef4d01886bc2f3becf6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#write your code here | |
def vowel?(letter) | |
['a', 'e', 'i', 'o', 'u'].include?(letter) | |
end | |
def process_letter(char, hash) | |
if hash[:first_vowel_not_found] | |
if vowel?(char) | |
hash[:before_first_vowel] << "ay" | |
hash[:first_vowel_not_found] = false | |
hash[:after_first_vowel] << char | |
else | |
hash[:before_first_vowel] << char | |
end | |
else | |
hash[:after_first_vowel] << char | |
end | |
end | |
def process_word(word) | |
result = { | |
before_first_vowel: [], | |
after_first_vowel: [], | |
first_vowel_not_found: true | |
} | |
word.chars.each_with_object(result) do |char, hash| # a b c | |
process_letter(char, hash) | |
end | |
(result[:after] + result[:before]).join | |
end | |
def better_process_word(word) | |
match = word.match(/^(?<before>[^aeiouy]*)(?<after>.*)$/) | |
"#{match[:after]}#{match[:before]}ay" | |
end | |
def translate(words) | |
words | |
.split | |
.map(&:process_word) | |
.join(" ") | |
end | |
translate("quiet cherry apple banana") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# # Topics | |
# | |
# * modules | |
# * strings | |
# | |
# # Pig Latin | |
# | |
# Pig Latin is a made-up children's language that's intended to be confusing. It obeys a few simple rules (below) but when it's spoken quickly it's really difficult for non-children (and non-native speakers) to understand. | |
# | |
# Rule 1: If a word begins with a vowel sound, add an "ay" sound to the end of the word. | |
# | |
# Rule 2: If a word begins with a consonant sound, move it to the end of the word, and then add an "ay" sound to the end of the word. | |
# | |
# (There are a few more rules for edge cases, and there are regional variants too, but that should be enough to understand the tests.) | |
# | |
# See <http://en.wikipedia.org/wiki/Pig_latin> for more details. | |
# | |
# | |
require "pig_latin" | |
describe "#translate" do | |
it "translates a word beginning with a vowel" do | |
s = translate("apple") | |
expect(s).to eq("appleay") | |
end | |
it "translates a word beginning with a consonant" do | |
s = translate("banana") | |
expect(s).to eq("ananabay") | |
end | |
it "translates a word beginning with two consonants" do | |
s = translate("cherry") | |
expect(s).to eq("errychay") | |
end | |
it "translates two words" do | |
s = translate("eat pie") | |
expect(s).to eq("eatay iepay") | |
end | |
it "translates a word beginning with three consonants" do | |
expect(translate("three")).to eq("eethray") | |
end | |
it "counts 'sch' as a single phoneme" do | |
s = translate("school") | |
expect(s).to eq("oolschay") | |
end | |
it "counts 'qu' as a single phoneme" do | |
s = translate("quiet") | |
expect(s).to eq("ietquay") | |
end | |
it "counts 'qu' as a consonant even when it's preceded by a consonant" do | |
s = translate("square") | |
expect(s).to eq("aresquay") | |
end | |
it "translates many words" do | |
s = translate("the quick brown fox") | |
expect(s).to eq("ethay ickquay ownbray oxfay") | |
end | |
# Test-driving bonus: | |
# * write a test asserting that capitalized words are still capitalized (but with a different initial capital letter, of course) | |
# * retain the punctuation from the original phrase | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment