fork download
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であることも同時に分かる
Success #stdin #stdout 0.08s 10328KB
stdin
Standard input is empty
stdout
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]