Last active
June 12, 2018 00:30
-
-
Save miguelemosreverte/4db2c5ae243970668f2cd7967632ca5c to your computer and use it in GitHub Desktop.
bfs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait Recursion[Elem] { | |
val list: List[Elem] // bag | |
val zero: List[Elem] | |
// pasos recursivos | |
def cases: PartialFunction[(List[Elem], Elem), List[Elem]] | |
// cannot be overrided | |
final def recursion: List[Elem] = list.foldLeft(zero) { case (acc, elem) => | |
allcases.apply((acc, elem)) | |
} | |
private def allcases: PartialFunction[(List[Elem], Elem), List[Elem]] = | |
cases.orElse { case (acc, _) => acc } // apply allcases and base case by default | |
} | |
/* | |
object MyRecursion extends Recursion[Int] { | |
val list = List(1, 2, 3) | |
val zero = Nil | |
def cases = { | |
case (acc, elem) if elem > 2 => acc :+ elem | |
} | |
} | |
val result = MyRecursion.recursion | |
println(result)*/ | |
type Value = Int | |
type X = Int | |
type Y = Int | |
case class Coord(x: X,y: Y,v: Value) | |
object BFS extends Recursion[Coord] { | |
val grid = List( | |
Coord(0, 0, 0), Coord(0, 1, 0), Coord(0, 2, 0), | |
Coord(1, 0, 0), Coord(1, 1, 0), Coord(1, 2, 0), | |
Coord(2, 0, 0), Coord(2, 1, 0), Coord(2, 2, 0) | |
) | |
val list = List(Coord(0, 0, 0)) | |
val zero = Nil | |
val visited = List(Coord(0, -1, -1)) | |
def cases = { | |
case (acc, elem) if !visited.contains(elem) => { | |
list :+ grid.filter{ item => neighboor(item, elem)} //ITS INMUTABLE HOW CAN I DO THIS OH NO | |
visited :+ elem //ITS INMUTABLE HOW CAN I DO THIS OH NO | |
println(list) | |
acc :+ elem//WHY AM I EVEN ADDING ELEM, I NEED TO USE acc BETTER! I AM NOT USING IT FOR ALL INTENTS AND PURPOSES | |
} // MY MAYUS IS STUCK on the ON STATE, OH NO | |
} | |
def neighboor(a: Coord, b: Coord) : Boolean = ( | |
a.x + 1 == b.x | |
|| a.x - 1 == b.x | |
|| a.y + 1 == b.y | |
|| a.y - 1 == b.y | |
) | |
} | |
val result = BFS.recursion | |
println(result) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment