- # 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