• Решение соответствует функциональному стилю программирования?

    shock_one
    @shock_one
    Присваиваний нет? Нету. Var’ов тоже. Значит, функциональненько. Должен сказать, в вашем алгоритме черт ногу сломит — я так до конца и не разобрался как он работает, но что мог переделал. Стало еще более запутанно, но короче.

    def canStep(path: List[(Int, Int)], pos: (Int, Int)) =
      if (path.length == 0) true
      else List((pos._1 - path.head._1).abs, (pos._2 - path.head._2).abs).filter(_ < 3).sum == 3
    
    def getPath(path: List[(Int, Int)], available: List[(Int, Int)]): List[(Int, Int)] =
      if (available.size == 0)
        path
      else
        available.filter(canStep(path, _)).foldLeft(List[(Int, Int)]()) {
          (found, e) => found match {
            case Nil => getPath(e :: path, available.filter(_ != e))
            case lst: List[(Int, Int)] => lst
          }
        }
    
    def generatePositions(side: Int) = for (x <- 0 until side; y <- 0 until side) yield (x, y)
    
    println(getPath(List(), generatePositions(5).toList))
    
    Ответ написан
    Комментировать