@@ -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
4757enum Step :
4858 case ExploreStep (plans : Seq [Seq [Int ]])
4959 case GuessStep (solution : SolutionDefinition )
60+ case NotAnymore
5061
5162private 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