問題1.6
あー。マトリクスとか、面倒すぎる。
この辺、普段から頭使ってないと、咄嗟に出来ないなー。
Numpy使っちゃいたくなるよね。。。
問題
NxNの行列に書かれた、1つのピクセルが4バイト四方の画像があります。その画像を90度か移転させるメソッドを書いてください。あなたはこれを追加の領域なしでできますか?
#encoding: utf-8 def rotate_matrix_90_degrees(matrix): ''' 引数で受け取ったNxNの行列を90度回転する >>> rotate_matrix_90_degrees([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) [[6, 3, 0], [7, 4, 1], [8, 5, 2]] ''' # 引数で受け取った2次元配列のサイズ取得 matrix_size = len(matrix) matrix_last = matrix_size - 1 # 行列を90度回転 layer = 0 while layer < (matrix_size / 2): first_pos = layer last_pos = matrix_last - layer for counter in range(first_pos, last_pos): offset = counter - first_pos # 上端の一時保存 tmp_top = matrix[first_pos][counter] # 左端を上端に移動 matrix[first_pos][counter] = matrix[last_pos - offset][first_pos] # 下端を左端に移動 matrix[last_pos - offset][first_pos] \ = matrix[last_pos][last_pos - offset] # 右端を下端に移動 matrix[last_pos][last_pos - offset] = matrix[counter][last_pos] # 上端の一時保存を左端に移動 matrix[counter][last_pos] = tmp_top counter = counter + 1 layer = layer + 1 return matrix def _test(): import doctest doctest.testmod() if __name__ == '__main__': _test()