# coding: utf-8
require 'minitest/autorun'
F=
->s{r=[1.0]
s.lines.map{|l|
n=[i=0.0]*(r.size+1)
l.scan(/\S/).map{|e|a,b=e>?/?e>?]?[0.5]*2:[0,1]:[1,0]
z=r[i]
n[i]+=z*a
n[i+=1]+=z*b}
r=n}
r}
describe '#F' do
def test_0_levels
assert_equal [1.0], F['']
end
def test_1_level
assert_equal [0.5, 0.5], F['^']
assert_equal [1.0, 0.0], F['/']
assert_equal [0.0, 1.0], F['\\']
end
def test_2_levels
assert_equal [0.5, 0.5, 0.0], F['
/
^ ^
'.strip]
end
def test_3_levels
assert_equal [0.125, 0.375, 0.375, 0.125], F['
^
^ ^
^ ^ ^
'.strip]
assert_equal [0.0, 0.0, 0.0, 1.0], F['
\
/ \
/ / \
'.strip]
end
def test_4_levels
assert_equal [0.0, 0.1875, 0.5625, 0.125, 0.125], F['
^
\ ^
^ ^ \
\ ^ / ^
'.strip]
end
def test_7_levels
assert_equal [0.0, 0.09375, 0.28125, 0.4375, 0.1875, 0.0, 0.0, 0.0], F['
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
'.strip]
end
end
IyBjb2Rpbmc6IHV0Zi04CnJlcXVpcmUgJ21pbml0ZXN0L2F1dG9ydW4nCgpGPQoKLT5ze3I9WzEuMF0Kcy5saW5lcy5tYXB7fGx8Cm49W2k9MC4wXSooci5zaXplKzEpCmwuc2NhbigvXFMvKS5tYXB7fGV8YSxiPWU+Py8/ZT4/XT9bMC41XSoyOlswLDFdOlsxLDBdCno9cltpXQpuW2ldKz16KmEKbltpKz0xXSs9eipifQpyPW59CnJ9CgpkZXNjcmliZSAnI0YnIGRvCiAgZGVmIHRlc3RfMF9sZXZlbHMKICAgIGFzc2VydF9lcXVhbCBbMS4wXSwgRlsnJ10KICBlbmQKCiAgZGVmIHRlc3RfMV9sZXZlbAogICAgYXNzZXJ0X2VxdWFsIFswLjUsIDAuNV0sIEZbJ14nXQogICAgYXNzZXJ0X2VxdWFsIFsxLjAsIDAuMF0sIEZbJy8nXQogICAgYXNzZXJ0X2VxdWFsIFswLjAsIDEuMF0sIEZbJ1xcJ10KICBlbmQKCiAgZGVmIHRlc3RfMl9sZXZlbHMKICAgIGFzc2VydF9lcXVhbCBbMC41LCAwLjUsIDAuMF0sIEZbJwogLwpeIF4KICAgICAgJy5zdHJpcF0KICBlbmQKCiAgZGVmIHRlc3RfM19sZXZlbHMKICAgIGFzc2VydF9lcXVhbCBbMC4xMjUsIDAuMzc1LCAwLjM3NSwgMC4xMjVdLCBGWycKICBeCiBeIF4KXiBeIF4KICAgICAgJy5zdHJpcF0KCiAgICBhc3NlcnRfZXF1YWwgWzAuMCwgMC4wLCAwLjAsIDEuMF0sIEZbJwogIFwKIC8gXAovIC8gXAogICAgICAnLnN0cmlwXQogIGVuZAoKICBkZWYgdGVzdF80X2xldmVscwogICAgYXNzZXJ0X2VxdWFsIFswLjAsIDAuMTg3NSwgMC41NjI1LCAwLjEyNSwgMC4xMjVdLCBGWycKICAgXgogIFwgXgogXiBeIFwKXCBeIC8gXgogICAgICAnLnN0cmlwXQogIGVuZAoKICBkZWYgdGVzdF83X2xldmVscwogICAgYXNzZXJ0X2VxdWFsIFswLjAsIDAuMDkzNzUsIDAuMjgxMjUsIDAuNDM3NSwgMC4xODc1LCAwLjAsIDAuMCwgMC4wXSwgRlsnCiAgICAgIF4KICAgICAvIF4KICAgIF4gXiAvCiAgIC8gXCAvIFwKICBeIF4gLyBeIFwKIF4gXCBeIFwgLyBeClwgXiBeIF4gXCBeIC8KICAgICAgJy5zdHJpcF0KICBlbmQKICAKZW5k