// 3446. Sort Matrix By Diagonals
Explore on LeetCode
3446_sort_matrix_by_diagonals.rb
require 'minitest/autorun'
# @param {Integer[][]} grid# @return {Integer[][]}def _3446_sort_matrix(grid) i = 0 n = grid.length total_loop = n * 2 - 1
result = [] diagonals = [] while i < total_loop y = n - i - 1 x = y >= 0 ? 0 : y.abs direction = y >= 0 ? "desc" : "asc" y = y >= 0 ? y : 0 diagonal = [grid[y][x]] while y < n - 1 && x < n - 1 y += 1 x += 1 diagonal.push(grid[y][x]) end diagonal.sort! diagonal.reverse! if direction == "desc" diagonals.push(diagonal) i += 1 end
diagonals.each.with_index do |diagonal, d_index| diagonal.each.with_index do |num, index| y = n - d_index - 1 x = y >= 0 ? 0 : y.abs y = [y, 0].max grid[y + index][x + index] = num end end
gridend
class Test3446 < Minitest::Test def test_1 assert_equal [[8,2,3],[9,6,7],[4,5,1]], _3446_sort_matrix([[1,7,3],[9,8,2],[4,5,6]]) end
def test_2 assert_equal [[2,1],[1,0]], _3446_sort_matrix([[0,1],[1,2]]) end
def test_3 assert_equal [[1]], _3446_sort_matrix([[1]]) endend