カラオケマシン問題に挑戦
カラオケマシン問題のコードを書いたので貼っておく。テストは省略。
class KaraokeMachine SCALE = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'] attr_reader :melody def initialize(melody) @melody = melody end def num_to_solfa(num) SCALE[num] end def solfa_to_num(solfa) SCALE.index(solfa) end def trans(solfa, amount) num = solfa_to_num(solfa) + amount num = num % SCALE.size num_to_solfa(num) end def transpose(amount) @melody.gsub(/([A-G]#?)/) { trans($1, amount) } end end