F=
->d{o=[]
c={}
d=d.sort_by{|w|[w.size,w]}.map{|w|w=w.upcase.gsub /[^A-Z]/,''
c[w]=l=1
w.size.times{|i|p,x,s=w[0...i],w[i],w[i+1..-1]
c[p+s]&&l!=x&&o<<p+"(#{w[i]})"+s
l=x}}
o}
require 'minitest/autorun'
describe F do
def test_case_1
assert_equal [
'CA(R)T',
'(C)ODE',
'I(N)PLAY',
'VER(S)IFY'],
F[[
'cat',
'cart',
'code',
'golf',
'ode',
'verify',
'versify',
'in-play',
'IpLay']]
end
def test_case_2
assert_equal [
'MA(R)',
'MA(T)',
'MA(R)T',
'MAR(T)'],
F[[
'mart',
'mar',
'mat',
'ma']]
end
def test_case_3
assert_equal [
'SCRA(P)PED'],
F[[
'scrapped',
'scraped']]
end
end
CkY9Ci0+ZHtvPVtdCmM9e30KZD1kLnNvcnRfYnl7fHd8W3cuc2l6ZSx3XX0ubWFwe3x3fHc9dy51cGNhc2UuZ3N1YiAvW15BLVpdLywnJwpjW3ddPWw9MQp3LnNpemUudGltZXN7fGl8cCx4LHM9d1swLi4uaV0sd1tpXSx3W2krMS4uLTFdCmNbcCtzXSYmbCE9eCYmbzw8cCsiKCN7d1tpXX0pIitzCmw9eH19Cm99CgoKcmVxdWlyZSAnbWluaXRlc3QvYXV0b3J1bicKCmRlc2NyaWJlIEYgZG8KICBkZWYgdGVzdF9jYXNlXzEKICAgIGFzc2VydF9lcXVhbCBbCiAgICAgICAgJ0NBKFIpVCcsIAogICAgICAgICcoQylPREUnLCAKICAgICAgICAnSShOKVBMQVknLCAKICAgICAgICAnVkVSKFMpSUZZJ10sIAogICAgICBGW1sKICAgICAgICAnY2F0JywKICAgICAgICAnY2FydCcsCiAgICAgICAgJ2NvZGUnLAogICAgICAgICdnb2xmJywKICAgICAgICAnb2RlJywKICAgICAgICAndmVyaWZ5JywKICAgICAgICAndmVyc2lmeScsCiAgICAgICAgJ2luLXBsYXknLAogICAgICAgICdJcExheSddXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzIKICAgIGFzc2VydF9lcXVhbCBbCiAgICAgICAgJ01BKFIpJywgCiAgICAgICAgJ01BKFQpJywgCiAgICAgICAgJ01BKFIpVCcsIAogICAgICAgICdNQVIoVCknXSwgCiAgICAgIEZbWwogICAgICAgICdtYXJ0JywgCiAgICAgICAgJ21hcicsIAogICAgICAgICdtYXQnLCAKICAgICAgICAnbWEnXV0KICBlbmQKCiAgZGVmIHRlc3RfY2FzZV8zCiAgICBhc3NlcnRfZXF1YWwgWwogICAgICAgICdTQ1JBKFApUEVEJ10sIAogICAgICBGW1sKICAgICAgICAnc2NyYXBwZWQnLCAKICAgICAgICAnc2NyYXBlZCddXQogIGVuZAplbmQK