Skip to content

Instantly share code, notes, and snippets.

@pablitar
Last active June 25, 2016 22:23
Show Gist options
  • Save pablitar/a4dd1035a794e94b47a05e9070adbef9 to your computer and use it in GitHub Desktop.
Save pablitar/a4dd1035a794e94b47a05e9070adbef9 to your computer and use it in GitHub Desktop.
def entrenar(tablon: Tablon, criterio: (Equipo,Equipo) => Boolean): Equipo = {
def streamMision(equipoActual:Equipo, unTablon: Tablon):Stream[Mision] = {
equipoActual.elegirMision(unTablon, criterio) match {
case Some(m) =>
Stream.cons(m, streamMision(
m.realizarTareas(equipoActual).get, unTablon.sacarMision(m)))
case _ => Stream.empty
}
}
streamMision(this, tablon).foldLeft(this)((a,b) => b.realizarTareas(a).get)
}
def elegirMision(tablon: Tablon, criterio: (Equipo,Equipo) => Boolean): Option[Mision] = {
Try(tablon.getMisiones.map(m => (m, m.realizarTareas(this)))
.collect{case (m, Success(e)) => (m, e)}
.max(Ordering
.fromLessThan[(Mision, Equipo)]{
(t1, t2) => criterio(t1._2, t2._2)
})).map(_._1).toOption
}
@JuanFdS
Copy link

JuanFdS commented Jun 25, 2016

Try(tablon.getMisiones.filter(.realizarTareas(this).isSuccess).maxBy(.realizarTareas(this).get)(Ordering.fromLessThan(criterio).reverse)).toOption

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment