F=
->i{n={}
g=->x{n[x]||=[0,p]}
t=y=0
i.lines{|l|x=0
l.chars{|c|x+=1
'><'[c]&&(r=c.ord-61;s,d=[y,x-4*r],[y,x+2*r])
'^v'[c]&&(r=c<?_?1:-1;s,d=[y+r*3,x],[y-r,x])
s&&(g[s][1]=g[d])[0]+=1}
y+=1}
c,*_,s=n.values.sort_by{|v|v[0]}
l=n.size
s[0]>1?((t+=1;c=c[1])while c!=s):t=l-=1
[t,l-t]}
require 'minitest/autorun'
describe F do
def test_simple_case
assert_equal [2, 6], F[<<-DOC]
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
DOC
end
def test_harder_case
assert_equal [3, 10], F[<<-DOC]
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
DOC
end
def test_no_loop
assert_equal [6, 0], F[<<-DOC]
# --> # --> # --> #
|
|
v
<-- # <-- #
DOC
end
end
CkY9Ci0+aXtuPXt9Cmc9LT54e25beF18fD1bMCxwXX0KdD15PTAKaS5saW5lc3t8bHx4PTAKbC5jaGFyc3t8Y3x4Kz0xCic+PCdbY10mJihyPWMub3JkLTYxO3MsZD1beSx4LTQqcl0sW3kseCsyKnJdKQonXnYnW2NdJiYocj1jPD9fPzE6LTE7cyxkPVt5K3IqMyx4XSxbeS1yLHhdKQpzJiYoZ1tzXVsxXT1nW2RdKVswXSs9MX0KeSs9MX0KYywqXyxzPW4udmFsdWVzLnNvcnRfYnl7fHZ8dlswXX0KbD1uLnNpemUKc1swXT4xPygodCs9MTtjPWNbMV0pd2hpbGUgYyE9cyk6dD1sLT0xClt0LGwtdF19CgoKcmVxdWlyZSAnbWluaXRlc3QvYXV0b3J1bicKCmRlc2NyaWJlIEYgZG8KCiAgZGVmIHRlc3Rfc2ltcGxlX2Nhc2UKICAgIGFzc2VydF9lcXVhbCBbMiwgNl0sIEZbPDwtRE9DXQojIC0tPiAjIC0tPiAjIC0tPiAjCl4gICAgIF4gICAgICAgICAgIHwKfCAgICAgfCAgICAgICAgICAgfAp8ICAgICB8ICAgICAgICAgICB2CiMgICAgICMgPC0tICMgPC0tICMKRE9DCiAgZW5kCgogIGRlZiB0ZXN0X2hhcmRlcl9jYXNlCiAgICBhc3NlcnRfZXF1YWwgWzMsIDEwXSwgRls8PC1ET0NdCiAgICAgICAgICAgICMgLS0+ICMgLS0+ICMKICAgICAgICAgICAgXiAgICAgICAgICAgfAogICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICAgICAgIHwgICAgICAgICAgIHYKICAgICAgIyAtLT4gIyA8LS0gIyAgICAgIyAtLT4gIwogICAgICBeICAgICAgICAgICBeICAgICAgICAgICB8CiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgdgojIC0tPiAjICAgICAgICAgICAjIDwtLSAjIDwtLSAjCkRPQwogIGVuZAoKICBkZWYgdGVzdF9ub19sb29wCiAgICBhc3NlcnRfZXF1YWwgWzYsIDBdLCBGWzw8LURPQ10KIyAtLT4gIyAtLT4gIyAtLT4gIwogICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgdgogICAgICAgIDwtLSAjIDwtLSAjCkRPQwogIGVuZAoKZW5k