- ITC-LMSの掲示板11/25の課題,質問への課題提出は 12/1 20:00現在で 57 名.
- 多くの人は,alignの穴埋めをするという課題に取り組んでくれた.3つの数 x, y , z のmaxを取るのに,max(x, y, z) と書けないので,max(x, max(y, z)) あるいは max(max(x, y), z) と書く必要があるというのに戸惑っている人が多かった.
典型的な回答は以下のとおり.
def align(s,t)
m = s.length()
n = t.length()
a = make2d(m+1,n+1)
a[0][0] = 0
for j in 1..n
a[0][j] = a[0][j-1] + g()
end
for i in 1..m
a[i][0] = a[i-1][0] + g()
end
for i in 1..m
for j in 1..n
a[i][j] = max(a[i][j-1]+g(), max(a[i-1][j-1]+q(s[i-1],t[j-1]),a[i-1][j]+g()))
end
end
a
end
- 穴埋めを上のように1行で書くと長くなりすぎる(括弧のレベルも深くなりすぎる)ので,以下のように書いた人もいた.これも分かりやすい.
v0 = a[i][j-1] + g()
v1 = a[i-1][j-1] + q(s[i-1],t[j-1])
v2 = a[i-1][j] + g()
a[i][j]=max(v0,max(v1,v2))
- 講義の範囲外だが,配列 [3,1,2] の最大要素は [3,1,2].max() で取ることができる.そのことを利用して以下のような回答を作成した人もいた.
a[i][j] = [a[i-1][j]+g(),a[i][j-1]+g(),a[i-1][j-1]+q(s[i-1],t[j-1])].max()