F=
-> dict {
output = []
smaller_words = {}
dict = dict.sort_by{|word|[word.size, word]}.map do |word|
word = word.upcase.gsub /[^A-Z]/, ''
smaller_words[word]=l=1
word.size.times do |i|
prefix = word[0...i]
suffix = word[i+1..-1]
if smaller_words[prefix + suffix] && word[i] != l
output << "#{prefix}(#{word[i]})#{suffix}"
end
l = word[i]
end
end
output
}
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+IGRpY3QgewogIG91dHB1dCA9IFtdCiAgc21hbGxlcl93b3JkcyA9IHt9CiAgZGljdCA9IGRpY3Quc29ydF9ieXt8d29yZHxbd29yZC5zaXplLCB3b3JkXX0ubWFwIGRvIHx3b3JkfAogICAgd29yZCA9IHdvcmQudXBjYXNlLmdzdWIgL1teQS1aXS8sICcnCiAgICBzbWFsbGVyX3dvcmRzW3dvcmRdPWw9MQogICAgd29yZC5zaXplLnRpbWVzIGRvIHxpfAogICAgICBwcmVmaXggPSB3b3JkWzAuLi5pXQogICAgICBzdWZmaXggPSB3b3JkW2krMS4uLTFdCgogICAgICBpZiBzbWFsbGVyX3dvcmRzW3ByZWZpeCArIHN1ZmZpeF0gJiYgd29yZFtpXSAhPSBsCiAgICAgICAgb3V0cHV0IDw8ICIje3ByZWZpeH0oI3t3b3JkW2ldfSkje3N1ZmZpeH0iCiAgICAgIGVuZAogICAgICBsID0gd29yZFtpXQogICAgZW5kCiAgZW5kCiAgb3V0cHV0Cn0KCgpyZXF1aXJlICdtaW5pdGVzdC9hdXRvcnVuJwoKZGVzY3JpYmUgRiBkbwogIGRlZiB0ZXN0X2Nhc2VfMQogICAgYXNzZXJ0X2VxdWFsIFsKICAgICAgICAnQ0EoUilUJywgCiAgICAgICAgJyhDKU9ERScsIAogICAgICAgICdJKE4pUExBWScsIAogICAgICAgICdWRVIoUylJRlknXSwgCiAgICAgIEZbWwogICAgICAgICdjYXQnLAogICAgICAgICdjYXJ0JywKICAgICAgICAnY29kZScsCiAgICAgICAgJ2dvbGYnLAogICAgICAgICdvZGUnLAogICAgICAgICd2ZXJpZnknLAogICAgICAgICd2ZXJzaWZ5JywKICAgICAgICAnaW4tcGxheScsCiAgICAgICAgJ0lwTGF5J11dCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfMgogICAgYXNzZXJ0X2VxdWFsIFsKICAgICAgICAnTUEoUiknLCAKICAgICAgICAnTUEoVCknLCAKICAgICAgICAnTUEoUilUJywgCiAgICAgICAgJ01BUihUKSddLCAKICAgICAgRltbCiAgICAgICAgJ21hcnQnLCAKICAgICAgICAnbWFyJywgCiAgICAgICAgJ21hdCcsIAogICAgICAgICdtYSddXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzMKICAgIGFzc2VydF9lcXVhbCBbCiAgICAgICAgJ1NDUkEoUClQRUQnXSwgCiAgICAgIEZbWwogICAgICAgICdzY3JhcHBlZCcsIAogICAgICAgICdzY3JhcGVkJ11dCiAgZW5kCmVuZAo=