@@ -12,6 +12,7 @@ case class StepApplied(graph : MyGraph, nextDoor : DoorVertex) extends SolverSte
1212case class TargetDoorsExhausted () extends SolverStepResult derives ReadWriter
1313case class TargetRoomsExhausted () extends SolverStepResult derives ReadWriter
1414case class Contradiction () extends SolverStepResult derives ReadWriter
15+ case class TryOtherDoor () extends SolverStepResult derives ReadWriter
1516case class Rollback () extends SolverStepResult derives ReadWriter
1617case class Impossible () extends SolverStepResult derives ReadWriter
1718
@@ -63,11 +64,12 @@ object DynamicSolver {
6364 }
6465 }
6566 case Some (linkedRoom) => {
66- println(s " Room # ${input.roomFromUid} door ${input.doorIdx} was already connected to room # ${linkedRoom.uid} (label ${linkedRoom.label}) " )
6767 if (linkedRoom.label == Some (input.roomToLabel)) {
68+ println(s " Room # ${input.roomFromUid} door ${input.doorIdx} was already connected to room # ${linkedRoom.uid} (label ${linkedRoom.label}) => good " )
6869 val nextDoor = g.adjacentDoor(g.doors(input.roomFromUid)(input.doorIdx)).get
6970 StepApplied (g, nextDoor)
7071 } else {
72+ println(s " Room # ${input.roomFromUid} door ${input.doorIdx} was already connected to room # ${linkedRoom.uid} (label ${linkedRoom.label}) => contradiction " )
7173 Contradiction ()
7274 }
7375 }
@@ -80,17 +82,18 @@ object DynamicSolver {
8082 var subDoorOffset = 0
8183 while (iteration < 100 )
8284 val subOffsets = Offsets (subRoomOffset, subDoorOffset) +: offsets
83- println(f " Step into, iteration $iteration; remaining length is ${inputs.tail. length}; offsets: $subOffsets" )
85+ println(f " Step into, iteration $iteration; remaining length is ${inputs.length}; offsets: $subOffsets" )
8486 val subResult = processStepRecursive(graph, inputs, currentRoomUid = currentRoomUid, offsets = subOffsets)
8587 println(s " Returning from recursive call: $subResult" )
8688 subResult match {
8789 case StepApplied (_,_) => return subResult
88- case TargetRoomsExhausted () => return Contradiction ()
90+ case TargetRoomsExhausted () => return TryOtherDoor ()
8991 case TargetDoorsExhausted () =>
9092 subRoomOffset += 1
9193 subDoorOffset = 0
92- case Contradiction () =>
94+ case TryOtherDoor () =>
9395 subDoorOffset += 1
96+ case Contradiction () => return TryOtherDoor ()
9497 }
9598 iteration += 1
9699 Impossible ()
0 commit comments