Skip to content

Commit 88d5fca

Browse files
committed
Solver: integrate with Lanternarius
1 parent a4ab650 commit 88d5fca

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/main/scala/ru/org/codingteam/icfpc_2025/Solver.scala

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ object Solver {
99
def solve(problem: ProblemDefinition): Unit = {
1010
println(s"Solving problem ${problem.name}.")
1111
Ædificium.select(problem.name)
12-
println("Problem selected.")
13-
12+
println(s" ${problem.name} has been selected.")
13+
1414
var knowledge = KnowledgeHolder()
1515
while (true) {
16-
println("Determining next step")
16+
println("Determining next step...")
1717
val step = nextStep(problem, knowledge)
1818
println(s"Next step is ${step.getClass.getSimpleName}")
1919
step match
@@ -24,31 +24,44 @@ object Solver {
2424
val correct = Ædificium.guess(solution)
2525
if (correct) {
2626
println(s"The solution for problem ${problem.name} is correct.")
27+
return
2728
} else {
2829
println(s"The solution for problem ${problem.name} is not correct!")
2930
val path = dump(problem, knowledge, solution)
3031
throw new Exception("Incorrect solution! Analyze results in \"path\".")
3132
}
33+
case Step.NotAnymore =>
34+
println("Don't wanna play anymore.")
35+
return
3236
}
3337
}
34-
35-
private def nextStep(problem: ProblemDefinition, knowledge: KnowledgeHolder): Step = ???
38+
39+
private def nextStep(problem: ProblemDefinition, knowledge: KnowledgeHolder): Step =
40+
if (knowledge.visited) return Step.NotAnymore
41+
42+
val plan = Seq(Lanternarius.lanternarius(problem.maxRouteLength))
43+
Step.ExploreStep(plan)
44+
3645
private def dump(problem: ProblemDefinition, knowledge: KnowledgeHolder, solution: SolutionDefinition): Path =
3746
val folder = Files.createTempDirectory(s"icfpc.${problem.name}")
3847
Files.writeString(folder.resolve("knowledge.json"), asJson(knowledge).s)
3948
Files.writeString(folder.resolve("solution.json"), asJson(solution).s)
40-
49+
4150
}
4251

43-
case class KnowledgeHolder() derives ReadWriter {
44-
def incorporateKnowledge(plans: Seq[Seq[Int]], results: Seq[Seq[Int]]): KnowledgeHolder = ???
52+
case class KnowledgeHolder(visited: Boolean = false) derives ReadWriter {
53+
def incorporateKnowledge(plans: Seq[Seq[Int]], results: Seq[Seq[Int]]): KnowledgeHolder =
54+
KnowledgeHolder(visited = true)
4555
}
4656

4757
enum Step:
4858
case ExploreStep(plans: Seq[Seq[Int]])
4959
case GuessStep(solution: SolutionDefinition)
60+
case NotAnymore
5061

5162
private def explore(problem: ProblemDefinition, knowledge: KnowledgeHolder, plans: Seq[Seq[Int]]): KnowledgeHolder =
52-
println("Exploring the labyrinth…")
63+
println("Exploring the labyrinth...")
64+
println("Plans:\n" + plans.map(_.mkString(" ")).mkString(start = "- ", sep = "\n", end = ""))
5365
val results = Ædificium.explore(plans)
66+
println("Exploration results:\n" + results.map(_.mkString(" ")).mkString(start = "- ", sep = "\n", end = ""))
5467
knowledge.incorporateKnowledge(plans, results)

0 commit comments

Comments
 (0)