Often, the best way to learn a new language is to start off with small, simple programs. Sure, these programs won't be very useful, but they'll be fun to write and will help build your foundation in the language. Before you know it, you'll be writing more and more complex programs in the language.
I'm relatively new to Ruby. In order to learn more about Ruby String and Array methods, I wrote a program that prompts the user for a phrase, and spits out the phrase converted to Pig Latin.
There are several variants of Pig Latin, but the standard rules are (taken from Wikipedia)
- For words that begin with consonant sounds, the initial consonant or consonant cluster is moved to the end of the word, and "ay" is added, as in the following examples:
- happy --> appyhay
- duck --> uckday
- glove" --> oveglay
- For words that begin with vowel sounds or silent letter, "e;way"e; is added at the end of the word. Examples are
- egg --> eggway
- inbox --> inboxway
- eight --> eightway
My program is simplistic in that it can only discern consonants, and not consonant sounds. Regardless, it was still fun to write.
piglatin.rb
!/usr/bin/env ruby def is_consonant?(c) letters = ('a'..'z').to_a consonants = letters - ['a', 'e', 'i', 'o', 'u'] consonants.include? c end def starts_with_consonant?(s) c = s.slice(0,1).downcase is_consonant?(c) end def get_suffix(s) starts_with_consonant?(s) ? 'ay' : 'way' end def rotate_initial_consonants!(s) i = 0 while starts_with_consonant?(s) and i < s.length c = s.slice!(0,1) s << c i += 1 end end def to_piglatin(word) piglatin = String.new(word) rotate_initial_consonants!(piglatin) piglatin << get_suffix(word) end def get_words input = gets.chomp words = input.split end def main words = get_words output = [] words.each do |word| output << to_piglatin(word) end puts output.join(' ') end main
example
$ ./piglatin.rb Storm the castle at dusk ormStay ethay astlecay atway uskday
No comments:
Post a Comment