LoginSignup
0
0

More than 3 years have passed since last update.

rubyでカラオケマシーンを作ってみた

Posted at

今日はこちらのブログに載っている問題をやりました。
このようなコードになりました。

#キーを引数分あげるプログラムです。

#ドレミファソラシドをアルファベットに変換して配列に入れています。
KEY = [
  'c','c#','d','d#','e','f','f#','g','g#','a','a#','b'
]

class KaraokeMachine
  attr_reader :melody

  def initialize(melody)
    @melody = melody
    new_array = []
  end

  #与えられた引数分コードをあげる
  def up_key(n)
    #インデックスに引数を足して返す。11以上はない為超えたら12を引いて返す
    new_index = melody_array.map do |i|
      if add(i,n) > 11
        add(i,n) - 12
      else
        add(i,n)
      end
    end

    # 新しいインデックスに対応する要素配列に入れて結合する
    new_array = new_index.map do |i|
      KEY[i]
    end
    new_array.join
  end

  private
  #メロディーを配列に入れ、各要素のインデックスを調べ配列に入れ返す
  def melody_array
    melody.chars.map do |m|
      KEY.index(m)
    end
  end

  def add(a,b)
    a + b
  end
end

このような感じになりました。
KEY配列がわかりにくいから、キーに音階入れたハッシュにしようか悩み中です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0