fork download
  1. m2a = ->m {
  2. c = [[[[]]]]
  3. (1..m).each_with_object([]) {|i, a|
  4. (1..i).each {|w|
  5. (1..5).each {|hd|
  6. j = i - hd
  7. break if j < 0
  8. c[j][w - 1]&.each {|tl|
  9. b = [hd, tl]
  10. a[i] ||= [nil]
  11. a[i] << b
  12. c[i] ||= []
  13. c[i][w] ||= []
  14. c[i][w] << b
  15. }
  16. }
  17. }
  18. }
  19. }
  20. a = m2a.(20)
  21. g = ->m, n {puts "(#{m},#{n}) → #{(a[m][n] || [0]).join}"}
  22. g.(2,1)
  23. g.(2,2)
  24. g.(2,3)
  25. g.(20,1)
  26. g.(20,2)
  27. g.(20,3)
  28. g.(20,400096)
  29. g.(20,400097)
  30. #g.(32,1)
  31. #g.(32,2)
  32. #g.(32,3)
  33. #g.(32,1000)
  34. #g.(32,1000000)
  35. #g.(32,1000000000)
  36. #g.(32,1333610936)
  37. #g.(32,1333610937)
  38.  
Success #stdin #stdout 0.36s 56044KB
stdin
Standard input is empty
stdout
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0