fork(1) download
  1.  
  2. F=
  3. -> dict {
  4. output = []
  5. smaller_words = {}
  6. dict = dict.sort_by{|word|[word.size, word]}.map do |word|
  7. word = word.upcase.gsub /[^A-Z]/, ''
  8. smaller_words[word]=l=1
  9. word.size.times do |i|
  10. prefix = word[0...i]
  11. suffix = word[i+1..-1]
  12.  
  13. if smaller_words[prefix + suffix] && word[i] != l
  14. output << "#{prefix}(#{word[i]})#{suffix}"
  15. end
  16. l = word[i]
  17. end
  18. end
  19. output
  20. }
  21.  
  22.  
  23. require 'minitest/autorun'
  24.  
  25. describe F do
  26. def test_case_1
  27. assert_equal [
  28. 'CA(R)T',
  29. '(C)ODE',
  30. 'I(N)PLAY',
  31. 'VER(S)IFY'],
  32. F[[
  33. 'cat',
  34. 'cart',
  35. 'code',
  36. 'golf',
  37. 'ode',
  38. 'verify',
  39. 'versify',
  40. 'in-play',
  41. 'IpLay']]
  42. end
  43.  
  44. def test_case_2
  45. assert_equal [
  46. 'MA(R)',
  47. 'MA(T)',
  48. 'MA(R)T',
  49. 'MAR(T)'],
  50. F[[
  51. 'mart',
  52. 'mar',
  53. 'mat',
  54. 'ma']]
  55. end
  56.  
  57. def test_case_3
  58. assert_equal [
  59. 'SCRA(P)PED'],
  60. F[[
  61. 'scrapped',
  62. 'scraped']]
  63. end
  64. end
  65.  
Success #stdin #stdout 0.08s 10776KB
stdin
Standard input is empty
stdout
Run options: --seed 13216

# Running tests:

...

Finished tests in 0.001287s, 2330.7850 tests/s, 2330.7850 assertions/s.

3 tests, 3 assertions, 0 failures, 0 errors, 0 skips