Вращение матрицы в Scala без использования 2-мерного массива - PullRequest
0 голосов
/ 04 февраля 2019

Заранее спасибо за помощь, я пришел из Java-фона и новичок в Scala.для практики.Я думал о некоторых классических проблемах с функциональной точки зрения.Одной из таких проблем является проблема, когда мы должны повернуть матрицу на 90 градусов в некотором направлении, вот пример этой проблемы:

https://www.geeksforgeeks.org/inplace-rotate-square-matrix-by-90-degrees/

функция, которую я хочу реализоватьимеет такую ​​подпись:

def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
    mat.map {case (k,v) => k match {
      case (i,j) => (???, ???) -> v
    }}
  }

, и я чувствую, что должно быть какое-то математическое преобразование, которое я могу применить к i и j, чтобы преобразовать их в координаты повернутой матрицы.это возможно?

РЕДАКТИРОВАТЬ: здесь n это размер матрицы Eg: для матрицы 3X3 n равно 3

1 Ответ

0 голосов
/ 04 февраля 2019

Я нашел ответ здесь:

https://math.stackexchange.com/questions/1676441/how-to-rotate-the-positions-of-a-matrix-by-90-degrees

с помощью этой функции можно реализовать как:

def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
    mat map {case (k,v) => k match {
      case (i,j) => (j, n + 1 - i) -> v
    }}
}

Редактировать: на основе ввода @jwvhэто может быть обновлено до однострочного scala:

type Matrix[A] = Map[(Int,Int),A]

def rotateMatrix[A](mat: Matrix[A],size: Int):Matrix[A] =
  mat map {case ((i,j),v) => (j, size + 1 - i) -> v}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...