GUYS = { "む" => { "a" => "ま", "i" => "み", "u" => "む", "e" => "め", "o" => "も" }, } class KanaKanji attr_reader :kana, :kanji def initialize(kana, kanji=nil) @kana = kana @kanji = kanji || kana end def [] (index) self.class.new kana[index], kanji[index] end def + (other) self.class.new kana + other, kanji + other end def last_character GUYS[kana[-1]] end def all_but_last_character self.class.new kana[0...-1], kanji[0...-1] end end class Verb attr_reader :dict_kanji, :dict_kana, :definition_english, :dict def initialize(dict_kanji, dict_kana, definition_english) @dict_kanji = dict_kanji || dict_kana @dict_kana = dict_kana @dict = KanaKanji.new dict_kana, dict_kanji @definition_english = definition_english end def last_character dict.last_character end def all_but_last_character dict.all_but_last_character end def ve VerbExpression end def dictionary dict end end class IchidanVerb < Verb def long_form_present_positive all_but_last_character + "ます" end end class GodanVerb < Verb def long_form_present_positive all_but_last_character + last_character["i"] + "ます" end end class SuruVerb < Verb def long_form_present_positive dict[..-3] + "します" end end 見る = IchidanVerb.new("見る", "みる", "to look") p 見る.dictionary.kanji p 見る.dictionary.kana p 見る.long_form_present_positive.kanji p 見る.long_form_present_positive.kana 飲む = GodanVerb.new("飲む", "のむ", "to drink") p 飲む.dictionary.kanji p 飲む.dictionary.kana p 飲む.long_form_present_positive.kanji p 飲む.long_form_present_positive.kana する = SuruVerb.new("する", "する", "to do") p する.dictionary.kanji p する.dictionary.kana p する.long_form_present_positive.kanji p する.long_form_present_positive.kana 勉強する = SuruVerb.new("勉強する", "べんきょうする", "to study") p 勉強する.dictionary.kanji p 勉強する.dictionary.kana p 勉強する.long_form_present_positive.kanji p 勉強する.long_form_present_positive.kana