remove puzzle.Line

puzzle
Thibault Duplessis 2020-12-19 10:20:23 +01:00
parent d40df85d78
commit a1dc86f009
2 changed files with 0 additions and 86 deletions

View File

@ -1,83 +0,0 @@
package lila.puzzle
import play.api.libs.json._
sealed trait Line
case class Node(move: String, lines: Lines) extends Line
case class Win(move: String) extends Line
case class Retry(move: String) extends Line
object Line {
def minDepth(lines: Lines): Int = {
@scala.annotation.tailrec
def walk(subs: Vector[(Lines, Int)]): Option[Int] =
subs match {
case (lines, depth) +: rest =>
lines match {
case Nil => walk(rest)
case Win(_) :: _ => depth.some
case Retry(_) :: siblings => walk(rest :+ (siblings -> depth))
case Node(_, children) :: siblings =>
walk(rest :+ (siblings -> depth) :+ (children -> (depth + 1)))
}
case _ => none
}
(1 + ~walk(Vector(lines -> 1))) / 2
}
def solution(lines: Lines): List[String] = {
def getIn(lines: Lines, path: List[String]): Lines =
path match {
case Nil => lines
case head :: rest =>
lines collectFirst {
case Node(move, lines) if move == head => getIn(lines, rest)
case w @ Win(move) if move == head => List(w)
case r @ Retry(move) if move == head => List(r)
} getOrElse Nil
}
def loop(paths: List[List[String]]): List[String] =
paths match {
case Nil => Nil
case path :: siblings =>
getIn(lines, path) match {
case List(Win(m)) => path :+ m
case List(Retry(_)) => loop(siblings)
case ahead =>
ahead.collectFirst { case Win(m) =>
path :+ m
} | {
val children = ahead collect { case Node(m, _) => path :+ m }
loop(siblings ::: children)
}
}
}
lines.collectFirst { case Win(move) =>
List(move)
} | loop(lines collect { case Node(move, _) =>
List(move)
})
}
def toString(lines: Lines, level: Int = 0): String = {
val indent = ". " * level
lines map {
case Win(move) => s"$indent$move win"
case Retry(move) => s"$indent$move retry"
case Node(move, more) => s"$indent$move\n${toString(more, level + 1)}"
} mkString "\n"
}
def toJson(lines: Lines): JsObject =
JsObject(lines map {
case Win(move) => move -> JsString("win")
case Retry(move) => move -> JsString("retry")
case Node(move, more) => move -> toJson(more)
})
}

View File

@ -4,9 +4,6 @@ import lila.rating.Glicko
package object puzzle extends PackageObject {
type RoundId = Int
type Lines = List[Line]
private[puzzle] def logger = lila.log("puzzle")
}