Skip to content

Proofed chapter 3 #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions CCSPiJ/src/chapter3/CSP.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,11 @@
public class CSP<V, D> {
private List<V> variables;
private Map<V, List<D>> domains;
private Map<V, List<Constraint<V, D>>> constraints;
private Map<V, List<Constraint<V, D>>> constraints = new HashMap<>();

public CSP(List<V> variables, Map<V, List<D>> domains) {
this.variables = variables;
this.domains = domains;
constraints = new HashMap<>();
for (V variable : variables) {
constraints.put(variable, new ArrayList<>());
if (!domains.containsKey(variable)) {
Expand All @@ -42,9 +41,8 @@ public void addConstraint(Constraint<V, D> constraint) {
for (V variable : constraint.variables) {
if (!variables.contains(variable)) {
throw new IllegalArgumentException("Variable in constraint not in CSP");
} else {
constraints.get(variable).add(constraint);
}
constraints.get(variable).add(constraint);
}
}

Expand All @@ -65,7 +63,7 @@ public Map<V, D> backtrackingSearch(Map<V, D> assignment) {
return assignment;
}
// get the first variable in the CSP but not in the assignment
V unassigned = variables.stream().filter(v -> (!assignment.containsKey(v))).findFirst().get();
V unassigned = variables.stream().filter(v -> !assignment.containsKey(v)).findFirst().get();
// get the every possible domain value of the first unassigned variable
for (D value : domains.get(unassigned)) {
// shallow copy of assignment that we can change
Expand Down
33 changes: 21 additions & 12 deletions CCSPiJ/src/chapter3/MapColoringConstraint.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@
import java.util.Map;

public final class MapColoringConstraint extends Constraint<String, String> {

private static final String WESTERN = "Western Australia";
private static final String NORTHERN = "Northern Territory";
private static final String SOUTH = "South Australia";
private static final String QUEENSLAND = "Queensland";
private static final String NEW_SOUTH_WALES = "New South Wales";
private static final String VICTORIA = "Victoria";
private static final String TASMANIA = "Tasmania";

private String place1, place2;

public MapColoringConstraint(String place1, String place2) {
Expand All @@ -42,23 +51,23 @@ public boolean satisfied(Map<String, String> assignment) {
}

public static void main(String[] args) {
List<String> variables = List.of("Western Australia", "Northern Territory",
"South Australia", "Queensland", "New South Wales", "Victoria", "Tasmania");
List<String> variables = List.of(WESTERN, NORTHERN, SOUTH, QUEENSLAND,
NEW_SOUTH_WALES, VICTORIA, TASMANIA);
Map<String, List<String>> domains = new HashMap<>();
for (String variable : variables) {
domains.put(variable, List.of("red", "green", "blue"));
}
CSP<String, String> csp = new CSP<>(variables, domains);
csp.addConstraint(new MapColoringConstraint("Western Australia", "Northern Territory"));
csp.addConstraint(new MapColoringConstraint("Western Australia", "South Australia"));
csp.addConstraint(new MapColoringConstraint("South Australia", "Northern Territory"));
csp.addConstraint(new MapColoringConstraint("Queensland", "Northern Territory"));
csp.addConstraint(new MapColoringConstraint("Queensland", "South Australia"));
csp.addConstraint(new MapColoringConstraint("Queensland", "New South Wales"));
csp.addConstraint(new MapColoringConstraint("New South Wales", "South Australia"));
csp.addConstraint(new MapColoringConstraint("Victoria", "South Australia"));
csp.addConstraint(new MapColoringConstraint("Victoria", "New South Wales"));
csp.addConstraint(new MapColoringConstraint("Victoria", "Tasmania"));
csp.addConstraint(new MapColoringConstraint(WESTERN, NORTHERN));
csp.addConstraint(new MapColoringConstraint(WESTERN, SOUTH));
csp.addConstraint(new MapColoringConstraint(SOUTH, NORTHERN));
csp.addConstraint(new MapColoringConstraint(QUEENSLAND, NORTHERN));
csp.addConstraint(new MapColoringConstraint(QUEENSLAND, SOUTH));
csp.addConstraint(new MapColoringConstraint(QUEENSLAND, NEW_SOUTH_WALES));
csp.addConstraint(new MapColoringConstraint(NEW_SOUTH_WALES, SOUTH));
csp.addConstraint(new MapColoringConstraint(VICTORIA, SOUTH));
csp.addConstraint(new MapColoringConstraint(VICTORIA, NEW_SOUTH_WALES));
csp.addConstraint(new MapColoringConstraint(VICTORIA, TASMANIA));
Map<String, String> solution = csp.backtrackingSearch();
if (solution == null) {
System.out.println("No solution found!");
Expand Down
10 changes: 8 additions & 2 deletions CCSPiJ/src/chapter3/SendMoreMoneyConstraint.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,18 @@ public boolean satisfied(Map<Character, Integer> assignment) {
// if all variables have been assigned, check if it adds correctly
if (assignment.size() == letters.size()) {
int s = assignment.get('S');
// so we don't get answers starting with a 0
if (s == 0) {
return false;
}
int e = assignment.get('E');
int n = assignment.get('N');
int d = assignment.get('D');
int m = assignment.get('M');
// so we don't get answers starting with a 0
if (m == 0) {
return false;
}
int o = assignment.get('O');
int r = assignment.get('R');
int y = assignment.get('Y');
Expand All @@ -60,8 +68,6 @@ public static void main(String[] args) {
for (Character letter : letters) {
possibleDigits.put(letter, List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
}
// so we don't get answers starting with a 0
possibleDigits.replace('M', List.of(1));
CSP<Character, Integer> csp = new CSP<>(letters, possibleDigits);
csp.addConstraint(new SendMoreMoneyConstraint(letters));
Map<Character, Integer> solution = csp.backtrackingSearch();
Expand Down
2 changes: 0 additions & 2 deletions CCSPiJ/src/module-info.java

This file was deleted.