アラインメント


与えられた二つの文字列に対して最大の類似度を持つアラインメントを 出力して類似度を返すメソッド alignment をRuby言語を使って書きなさい.

スコアは以下のものを使う。

書いたら,学生証番号,氏名,説明を含んだファイル(pdfファイル, テキスト ファイル,WORDファイルなど) を作成して,cfiveの課題提出機能を使って提出 すること. 12/6の講義のページの穴埋めプログラムに誤りがあることが分かったので,提出期限を12/20(水) 21:00に延長しました.

実行例

下のように呼び出せるメソッド alignment を作る.アラインメントを表示した後で, 類似度の最大値を値として返す
irb(main):122:0> alignment "abcdea","aebcdbae"
a-bcdea-
aebcdbae
=> 5
irb(main):123:0> alignment "aaabb","baaa"
aaabb
baa-a
=> 0
irb(main):123:0> alignment "aabbbbcc","bbbbccaa"
aabbbbcc--
--bbbbccaa
=> 4

役に立つメソッド等

大きさ10の配列を中身1で初期化して作る.
Array.new(10,1)
=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
配列の長さを得る
[1,2,5,4,2].length
=> 5
[1,2,5,4,2].size
=> 5
文字列の長さを得る
[1,2,3,4].length
=> 4
a="abcde"
=> "abcde"
a.length
=> 5
a.size
文字列のi番目の文字コードを得る
a="abcde"
=> "abcde"
a[3]
=> 100
文字「d」の文字コードは100
文字列のi番目だけを取り出した部分文字列を得る
a="abcde"
=> "abcde"
a[3..3]
=> "d"
最大値をとる
[1,3,4].max
=> 4

注意

中身を初期化した2次元配列を作る時に,
 a=Array.new(10,Array.new(10,0))
のようにしてはいけない.これだと,a[0]とa[1]が同じものになるので,
 a=Array.new(10,Array.new(10,0))
=> [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
a[0][0]=1
=> 1
a[1][0]
=> 1
となる.
a=Array.new(10)
for i in 0..9
  a[i]=Array.new(10,0)
end
ならOK.よりrubyらしく書くなら
a=(0..9).collect{Array.new(10,0)}