Sha256: 62ba8ba9698bd1abda6ce15b16e9654def481ece35d68f4b4bbf27ba5b09867a

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

require "gengo_search/version"
require 'csv'

module GengoSearch
  class Gengo
    attr_reader :kanji, :romaji, :hiragana, :year
    ERAS = CSV.read('lib/data/era_names.csv')

    def initialize(ad_year = nil)
      if ad_year.nil? || !(ad_year.is_a?(Integer)) || ad_year < 645 || ad_year > 9999 then
        raise ArgumentError, "Please set a correct number(645~9999)"
      else
        started_year_index = search(ad_year)
        setTargetEra(started_year_index, ad_year)
      end
    end

    #Using Binary Search
    def search(target = 0)

      head = 0
      tail = ERAS.count - 1

      if ERAS[tail][0].to_i <= target then
        return tail
      else
        while head <= tail

          center = (head + tail) / 2
  
          if ERAS[center][0].to_i <= target && target < ERAS[center + 1][0].to_i then
            return center
          elsif ERAS[center][0].to_i < target
            head = center + 1
          else
            tail = center - 1
          end
        end
      end


    end

    def setTargetEra(started_year_index = 0, ad_year = 0)
      year = ad_year - ERAS[started_year_index][0].to_i + 1
      if year == 1 then
        @kanji = "#{ERAS[started_year_index][1]} 元年"
        @hiragana = "#{ERAS[started_year_index][3]} がんねん"
        @romaji = "#{ERAS[started_year_index][2]} GANNEN"
      else
        @kanji = "#{ERAS[started_year_index][1]} #{year}年"
        @romaji = "#{ERAS[started_year_index][2]} #{year}NEN"
        @hiragana = "#{ERAS[started_year_index][3]} #{year}ねん"
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gengo_search-0.1.0 lib/gengo_search.rb