fork download
  1. def f(r, c, label = 0)
  2. (0..r + c - 2).each_with_object((1..r).map{[]}) do |k, a|
  3. (0...r).method([:reverse_each, :each][k % 2]).call do |i|
  4. (0...c).each {|j| a[i][j] = (label += 1) if i + j == k}
  5. end
  6. end
  7. end
  8. p [[3, 3], [4, 2], [3, 5], [1, 8]].map{|r, c| [r, c, f(r, c)]}
  9.  
Success #stdin #stdout 0s 28216KB
stdin
Standard input is empty
stdout
[[3, 3, [[1, 2, 6], [3, 5, 7], [4, 8, 9]]], [4, 2, [[1, 2], [3, 5], [4, 6], [7, 8]]], [3, 5, [[1, 2, 6, 7, 12], [3, 5, 8, 11, 13], [4, 9, 10, 14, 15]]], [1, 8, [[1, 2, 3, 4, 5, 6, 7, 8]]]]