File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed
src/main/java/org/teachingextensions/logo Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments