例によって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"]
おすすめテキスト
テストを書かれた伊藤さんのチェリー本で勉強しています。