fork download
  1. def solve(input)
  2. root,*c=input.split(/\D/).map(&:to_i)
  3. (f=->n{
  4. m=[]
  5. m[(c.index(n)||2)+1]=-1
  6. (2..n/2).each{|e|
  7. next if n%e!=0
  8. t=f[e+1]
  9. 3.times{|i| m[i]=t[i] if t[i]&&(!m[i]||m[i]>t[i]) }
  10. }
  11. m[1]+=1 if m[1]
  12. m[2]+=1 if m[2]
  13. m[0]=m[1]+m[2] if m[1]&&m[2]&&(!m[0]||m[0]>m[1]+m[2])
  14. m
  15. })[root][0]
  16. end
  17.  
  18. def test(n,input,expected)
  19. actual=solve(input).to_s
  20. puts "#{n}: "+(actual==expected ? "ok":"ng ( #{actual} against #{expected} for #{input} )")
  21. end
  22.  
  23. test( 0, "50:6,3", "1" )
  24. test( 1, "98:5,11", "4" )
  25. test( 2, "1000:33,20", "7" )
  26. test( 3, "514:9,18", "8" )
  27. test( 4, "961:5,4", "3" )
  28. test( 5, "1369:1369,3", "2" )
  29. test( 6, "258:16,12", "5" )
  30. test( 7, "235:13,3", "2" )
  31. test( 8, "1096:19,17", "8" )
  32. test( 9, "847:7,17", "6" )
  33. test( 10, "1932:3,5", "2" )
  34. test( 11, "2491:4,8", "3" )
  35. test( 12, "840:421,36", "2" )
  36. test( 13, "1430:37,111", "3" )
  37. test( 14, "496:17,9", "2" )
  38. test( 15, "891:6,10", "1" )
  39. test( 16, "1560:196,21", "2" )
  40. test( 17, "516:20,12", "5" )
  41. test( 18, "696:30,59", "2" )
  42. test( 19, "1760:5,441", "2" )
  43. test( 20, "1736:11,26", "5" )
  44. test( 21, "1518:17,34", "4" )
  45. test( 22, "806:63,16", "5" )
  46. test( 23, "1920:3,97", "2" )
  47. test( 24, "1150:13,22", "4" )
  48. test( 25, "920:116,5", "1" )
  49. test( 26, "2016:7,337", "2" )
  50. test( 27, "408:9,25", "2" )
  51. test( 28, "735:36,8", "2" )
  52. test( 29, "470:5,31", "2" )
  53. test( 30, "2100:12,351", "3" )
  54. test( 31, "870:36,10", "1" )
  55. test( 32, "1512:253,13", "2" )
  56. test( 33, "697:12,15", "3" )
  57. test( 34, "1224:5,14", "2" )
  58. test( 35, "986:125,17", "3" )
  59. test( 36, "864:12,13", "3" )
  60. test( 37, "500:21,51", "2" )
  61. test( 38, "819:33,21", "4" )
  62. test( 39, "594:55,3", "2" )
  63. test( 40, "638:17,24", "3" )
  64.  
Success #stdin #stdout 0.02s 10336KB
stdin
Standard input is empty
stdout
0: ok
1: ok
2: ok
3: ok
4: ok
5: ok
6: ok
7: ok
8: ok
9: ok
10: ok
11: ok
12: ok
13: ok
14: ok
15: ok
16: ok
17: ok
18: ok
19: ok
20: ok
21: ok
22: ok
23: ok
24: ok
25: ok
26: ok
27: ok
28: ok
29: ok
30: ok
31: ok
32: ok
33: ok
34: ok
35: ok
36: ok
37: ok
38: ok
39: ok
40: ok