F=
->b{s=->l,w=p{c,*x=l.map &:dup
v=[1,3,3,5,9,0]['PBNRQ'.index(c[y=w||c.index(?L)])||5]
w&&c[y]=?X
(n=x[0])?(m=[]
[y-1,y,y+1].map{|z|(z==y)^(n[z]>?.)&&m<<s[x,z]}
q,r=m.max_by{|m|m ?m[0]:0}
q&&[q+v,c+r]):[v,c]}
s[b.lines][1]}
require 'minitest/autorun'
describe F do
def test_case_1
input = <<-EOS
----L---
-----P--
------P-
--R--P-Q
----P-P-
---P-P-P
--P-N---
-P------
EOS
F[input].must_equal <<-EOS
----L---
-----X--
------X-
--R--P-X
----P-X-
---P-X-P
--P-X---
-P--X---
EOS
end
def test_case_2
input = <<-EOS
--L-----
-P------
P-------
-P------
P--Q----
-P------
P-------
-P------
EOS
F[input].must_equal <<-EOS
--L-----
-PX-----
P-X-----
-PX-----
P--X----
-P-X----
P--X----
-P-X----
EOS
end
end
Rj0KLT5ie3M9LT5sLHc9cHtjLCp4PWwubWFwICY6ZHVwCnY9WzEsMywzLDUsOSwwXVsnUEJOUlEnLmluZGV4KGNbeT13fHxjLmluZGV4KD9MKV0pfHw1XQp3JiZjW3ldPT9YCihuPXhbMF0pPyhtPVtdClt5LTEseSx5KzFdLm1hcHt8enwoej09eSleKG5bel0+Py4pJiZtPDxzW3gsel19CnEscj1tLm1heF9ieXt8bXxtID9tWzBdOjB9CnEmJltxK3YsYytyXSk6W3YsY119CnNbYi5saW5lc11bMV19CgpyZXF1aXJlICdtaW5pdGVzdC9hdXRvcnVuJwoKZGVzY3JpYmUgRiBkbwogIGRlZiB0ZXN0X2Nhc2VfMQogICAgaW5wdXQgPSA8PC1FT1MKLS0tLUwtLS0KLS0tLS1QLS0KLS0tLS0tUC0KLS1SLS1QLVEKLS0tLVAtUC0KLS0tUC1QLVAKLS1QLU4tLS0KLVAtLS0tLS0KRU9TCgogICAgRltpbnB1dF0ubXVzdF9lcXVhbCA8PC1FT1MKLS0tLUwtLS0KLS0tLS1YLS0KLS0tLS0tWC0KLS1SLS1QLVgKLS0tLVAtWC0KLS0tUC1YLVAKLS1QLVgtLS0KLVAtLVgtLS0KRU9TCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfMgogICAgaW5wdXQgPSA8PC1FT1MKLS1MLS0tLS0KLVAtLS0tLS0KUC0tLS0tLS0KLVAtLS0tLS0KUC0tUS0tLS0KLVAtLS0tLS0KUC0tLS0tLS0KLVAtLS0tLS0KRU9TCgogICAgRltpbnB1dF0ubXVzdF9lcXVhbCA8PC1FT1MKLS1MLS0tLS0KLVBYLS0tLS0KUC1YLS0tLS0KLVBYLS0tLS0KUC0tWC0tLS0KLVAtWC0tLS0KUC0tWC0tLS0KLVAtWC0tLS0KRU9TCiAgZW5kCgplbmQK