カラオケマシン問題をやってみる

ruby

例によってRubyのアウトプット問題をやりつつ、わからないところをググり倒す備忘録。
問題は上記参照。

解答例はいろいろあるのだけれど、とりあえずヒットしたコードを読みながらわからないところを今日の積み上げに書いていくスタイル。
コードを掲載させていただきますが、問題があればすぐに消しますのでよろしくお願いします!

class KaraokeMachine
  def initialize(melody)
    @melody = melody
  end

  MELODIES = %w[C C# D D# E F F# G G# A A# B].freeze

  def transpose(number)
    @melody.split('').map { |code|
      code.match?(/\w/) ? adjust_melody_line(code, number) : code
    }.join('')
  end

  def adjust_melody_line(code, number)
    MELODIES[new_index(code, number)]
  end

  def new_index(code, number)
    original_index = MELODIES.index(code)
    (original_index + number).modulo(MELODIES.size)
  end
end
目次

今日の積み上げ

initialize()

クラス内に記述した場合オブジェクトが生成されると自動的に呼び出される。

.freeze

オブジェクトの内容の変更を禁止する。

/\w/

正規表現
\w : 単語構成文字 [a-zA-Z0-9_] # 全角文字は含まれない
// : マッチするか?
つまり対象の文字にマッチしているかどうか

%w()

配列を作る。配列の要素はスペース区切りで指定。

array = %w(one two three four)
p array
# => ["one", "two", "three", "four"]

おすすめテキスト

テストを書かれた伊藤さんのチェリー本で勉強しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

パソコンとネットの何でも屋さん兼農家見習い中
2021年に奥さんに腎移植して人生の価値観が大きく変わりました
何が起きても諦めずに生き抜く力が一番大切
時々ブログも書いてます

目次