fork download
  1. f = ->(r, m, n) {
  2. a = r.map {|d| [d] * m}.flatten
  3. b = (0...a.size).each_cons(2).to_a.reverse
  4. (n - 1).times.each_with_object(a) {
  5. i, j = b.find {|i, j| a[i] < a[j]}
  6. k = a.rindex {|e| a[i] < e}
  7. a[i], a[k] = a[k], a[i]
  8. a[j...a.size] = a[j...a.size].reverse
  9. }
  10. }
  11. p f.(1..9, 1, 1)
  12. p f.(1..9, 1, 2)
  13. p f.(1..9, 1, 3)
  14. p f.(1..9, 1, 123456)
  15. p f.(1..9, 1, 234567)
  16. p f.(1..9, 1, 362880)
  17. p f.(1..4, 3, 1)
  18. p f.(1..4, 3, 2)
  19. p f.(1..4, 3, 3)
  20. p f.(1..4, 3, 123456)
  21. p f.(1..4, 3, 234567)
  22. p f.(1..4, 3, 369600)
  23.  
Success #stdin #stdout 2.27s 8112KB
stdin
Standard input is empty
stdout
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 9, 8]
[1, 2, 3, 4, 5, 6, 8, 7, 9]
[4, 1, 6, 5, 8, 9, 7, 3, 2]
[6, 8, 4, 7, 5, 3, 2, 1, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4]
[2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4]
[3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2]
[4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]