Skip to content

Commit 0109211

Browse files
committed
.
1 parent 561b824 commit 0109211

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.teachingextensions.logo;
2+
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Queue;
6+
import java.util.Set;
7+
8+
/**
9+
* A player solves puzzles using a certain style.
10+
*/
11+
public abstract class PuzzlePlayer {
12+
private final Puzzle puzzle;
13+
private final Set<PuzzleState> visited = new HashSet<>();
14+
private final Queue<PuzzleState> frontier;
15+
16+
public PuzzlePlayer(Puzzle puzzle, Queue<PuzzleState> frontier) {
17+
this.puzzle = puzzle;
18+
this.frontier = frontier;
19+
}
20+
21+
protected Set<PuzzleState> getVisited() {
22+
return visited;
23+
}
24+
25+
protected Queue<PuzzleState> getFrontier() {
26+
return frontier;
27+
}
28+
29+
protected Puzzle getPuzzle() {
30+
return puzzle;
31+
}
32+
33+
public PuzzleState solve() {
34+
PuzzleState state = new PuzzleState(this.getPuzzle());
35+
do {
36+
getVisited().add(state);
37+
if (!state.isSolution()) {
38+
this.search(state);
39+
state = getFrontier().remove();
40+
}else{
41+
continue;
42+
}
43+
} while (!state.isSolution());
44+
45+
return state;
46+
}
47+
48+
protected void search(PuzzleState state) {
49+
List<PuzzleState> branches = state.getBranches();
50+
for (PuzzleState b : branches) {
51+
if (!getVisited().contains(b)) {
52+
getFrontier().add(b);
53+
}
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)