Skip to content

Instantly share code, notes, and snippets.

@miguelemosreverte
Last active June 12, 2018 00:30
Show Gist options
  • Save miguelemosreverte/4db2c5ae243970668f2cd7967632ca5c to your computer and use it in GitHub Desktop.
Save miguelemosreverte/4db2c5ae243970668f2cd7967632ca5c to your computer and use it in GitHub Desktop.
bfs
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