require 'matrix'
Q = Matrix[
[0.5, 0.5, 0, 0, 0],
[0.5, 0, 0.5, 0, 0],
[0.5, 0, 0, 0.5, 0],
[0.5, 0, 0, 0, 0.5],
[ 0, 0, 0, 0, 0.5],
]
U = Vector[0, 0, 0, 0, 0.5]
g = Vector[1, 1, 1, 1, 1]
IQ = Matrix.I(5) - Q
M = (Matrix.I(5) - Q).inverse
puts "I - Q = #{IQ}"
puts "M = #{M}"
puts "B = MU = #{M * U}"
# B = MU = [1.0, 1.0, 1.0, 1.0, 1.0]
# つまりどこからスタートしても終わることが保証されている
puts "Mg = #{M * g}"
# Mg = Vector[32.0, 30.0, 26.0, 18.0, 2.0]
# よってSからスタートした場合はN=32であることが分かる
# これよりL=N*2+3=67であることも同時に分かる
cmVxdWlyZSAnbWF0cml4JwoKUSA9IE1hdHJpeFsKICAgIFswLjUsIDAuNSwgICAwLCAgIDAsICAgMF0sCiAgICBbMC41LCAgIDAsIDAuNSwgICAwLCAgIDBdLAogICAgWzAuNSwgICAwLCAgIDAsIDAuNSwgICAwXSwKICAgIFswLjUsICAgMCwgICAwLCAgIDAsIDAuNV0sCiAgICBbICAwLCAgIDAsICAgMCwgICAwLCAwLjVdLApdClUgPSBWZWN0b3JbMCwgMCwgMCwgMCwgMC41XQpnID0gVmVjdG9yWzEsIDEsIDEsIDEsIDFdCklRID0gTWF0cml4LkkoNSkgLSBRCk0gPSAoTWF0cml4LkkoNSkgLSBRKS5pbnZlcnNlCgpwdXRzICJJIC0gUSA9ICN7SVF9IgoKcHV0cyAiTSA9ICN7TX0iCgpwdXRzICJCID0gTVUgPSAje00gKiBVfSIKIyBCID0gTVUgPSBbMS4wLCAxLjAsIDEuMCwgMS4wLCAxLjBdCiMg44Gk44G+44KK44Gp44GT44GL44KJ44K544K/44O844OI44GX44Gm44KC57WC44KP44KL44GT44Go44GM5L+d6Ki844GV44KM44Gm44GE44KLCgpwdXRzICJNZyA9ICN7TSAqIGd9IgojIE1nID0gVmVjdG9yWzMyLjAsIDMwLjAsIDI2LjAsIDE4LjAsIDIuMF0KIyDjgojjgaPjgaZT44GL44KJ44K544K/44O844OI44GX44Gf5aC05ZCI44GvTj0zMuOBp+OBguOCi+OBk+OBqOOBjOWIhuOBi+OCiwojIOOBk+OCjOOCiOOCikw9TioyKzM9NjfjgafjgYLjgovjgZPjgajjgoLlkIzmmYLjgavliIbjgYvjgos=
I - Q = Matrix[[0.5, -0.5, 0, 0, 0], [-0.5, 1, -0.5, 0, 0], [-0.5, 0, 1, -0.5, 0], [-0.5, 0, 0, 1, -0.5], [0, 0, 0, 0, 0.5]]
M = Matrix[[16.0, 8.0, 4.0, 2.0, 2.0], [14.0, 8.0, 4.0, 2.0, 2.0], [12.0, 6.0, 4.0, 2.0, 2.0], [8.0, 4.0, 2.0, 2.0, 2.0], [0.0, 0.0, 0.0, 0.0, 2.0]]
B = MU = Vector[1.0, 1.0, 1.0, 1.0, 1.0]
Mg = Vector[32.0, 30.0, 26.0, 18.0, 2.0]