Skip to content

Commit 20b7ac8

Browse files
authored
Merge pull request #105 from arnaud-m/feat-91
Add tests that solve crossword puzzles - close #91
2 parents 323d278 + f7a3b8b commit 20b7ac8

File tree

6 files changed

+65
-25
lines changed

6 files changed

+65
-25
lines changed

README.org

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ It is based on [[https://github.com/chocoteam/choco-solver][choco-solver]] which
1717
- [[http://www.cadaeic.net/alphas.htm][An Alphametic Page]], Mike Keith - a must for alphametic lovers.
1818
- [[http://cryptarithms.awardspace.us/][Cryptarithms Online]], Jorge A. C. B. Soares - it contains the Sphinx collection, links, books.
1919
- [[http://www.tkcs-collins.com/truman/alphamet/alphamet.shtml][Alphametic Puzzles]], Truman Collins - he has solvers and even generators.
20-
- [[https://www.math.uni-bielefeld.de/~sillke/PUZZLES/ALPHAMETIC/][Alphametic]], Torsten Sillke - collection, variants, references, and links.
20+
- [[https://www.math.uni-bielefeld.de/~sillke/PUZZLES/ALPHAMETIC/][Alphametics]], Torsten Sillke - collection, variants, references, and links.
2121
- You can also browse our [[file:src/main/cryptarithms/][collection of cryptarithms]].
2222

2323
* Download and Installation

src/test/java/cryptator/BignumTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@
1313

1414
import cryptator.parser.CryptaParserException;
1515
import cryptator.solver.CryptaModelException;
16-
import cryptator.solver.CryptaSolver;
1716
import cryptator.solver.CryptaSolverException;
1817

1918
public class BignumTest {
2019

21-
private final CryptaSolvingTester t = new CryptaSolvingTester(new CryptaSolver(true));
20+
private final CryptaSolvingTester t = new CryptaSolvingTester(true);
2221

2322
public BignumTest() {
2423
}

src/test/java/cryptator/ExtensiveTesting.java

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,15 @@
88
*/
99
package cryptator;
1010

11-
import java.io.InputStream;
12-
import java.util.Scanner;
13-
1411
import org.junit.BeforeClass;
1512
import org.junit.Test;
1613

1714
import cryptator.parser.CryptaParserException;
1815
import cryptator.solver.CryptaModelException;
19-
import cryptator.solver.CryptaSolver;
2016
import cryptator.solver.CryptaSolverException;
2117

2218
public class ExtensiveTesting {
2319

24-
private final CryptaSolvingTester t = new CryptaSolvingTester(new CryptaSolver(false));
25-
2620
public ExtensiveTesting() {
2721
}
2822

@@ -32,20 +26,7 @@ public static void configureTestLoggers() {
3226
}
3327

3428
@Test
35-
public void testAll() throws CryptaParserException, CryptaModelException, CryptaSolverException {
36-
final InputStream in = getClass().getClassLoader().getResourceAsStream("cryptarithms-barker.txt");
37-
final Scanner s = new Scanner(in);
38-
try {
39-
// s.skip("\\s*#.*"); // not working
40-
while (s.hasNextLine()) {
41-
final String line = s.nextLine();
42-
if (!line.matches("\\s*#.*")) {
43-
t.testUNIQUE(line);
44-
}
45-
}
46-
} finally {
47-
s.close();
48-
}
29+
public void testBarker() throws CryptaParserException, CryptaModelException, CryptaSolverException {
30+
(new CryptaSolvingTester(false)).testResource("cryptarithms-barker.db.txt");
4931
}
50-
5132
}

src/test/java/cryptator/SolverTest.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import static org.junit.Assert.assertTrue;
1313
import static org.junit.Assert.fail;
1414

15+
import java.io.InputStream;
1516
import java.math.BigInteger;
17+
import java.util.Scanner;
1618
import java.util.concurrent.atomic.AtomicInteger;
1719

1820
import org.junit.Before;
@@ -39,6 +41,10 @@ final class CryptaSolvingTester {
3941
protected final ICryptaEvaluation eval = new CryptaEvaluation();
4042
protected CryptaConfig config = new CryptaConfig();
4143

44+
CryptaSolvingTester(final boolean useBignum) {
45+
this(new CryptaSolver(useBignum));
46+
}
47+
4248
CryptaSolvingTester(final ICryptaSolver solver) {
4349
super();
4450
this.solver = solver;
@@ -87,11 +93,28 @@ public void testUNIQUE(final String cryptarithm) throws CryptaModelException, Cr
8793
public void testNotUNIQUE(final String cryptarithm) throws CryptaModelException, CryptaSolverException {
8894
assertTrue("solution count " + cryptarithm, testSolve(cryptarithm, true) > 1);
8995
}
96+
97+
public void testResource(String resourcePath)
98+
throws CryptaParserException, CryptaModelException, CryptaSolverException {
99+
final InputStream in = getClass().getClassLoader().getResourceAsStream(resourcePath);
100+
final Scanner s = new Scanner(in);
101+
try {
102+
// s.skip("\\s*#.*"); // not working
103+
while (s.hasNextLine()) {
104+
final String line = s.nextLine();
105+
if (!line.matches("\\s*#.*")) {
106+
testUNIQUE(line);
107+
}
108+
}
109+
} finally {
110+
s.close();
111+
}
112+
}
90113
}
91114

92115
public class SolverTest {
93116

94-
private CryptaSolvingTester t = new CryptaSolvingTester(new CryptaSolver(false));
117+
private CryptaSolvingTester t = new CryptaSolvingTester(false);
95118

96119
public SolverTest() {
97120
}
@@ -735,4 +758,10 @@ public void testEvaluation4Issue25() throws CryptaParserException, CryptaSolverE
735758
var cryptarithm = "W='4'";
736759
t.testUNIQUE(cryptarithm);
737760
}
761+
762+
@Test
763+
public void testSillke() throws CryptaParserException, CryptaModelException, CryptaSolverException {
764+
t.testResource("crosswords-sillke.db.txt");
765+
}
766+
738767
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ABC*DA=BEFA && GHHA+GJE=GFDC && GJEJ+HJJJ=FFDC && ABC+GHHA=GJEJ && DA*GJE=HJJJ && BEFA-GFDC=FFDC
2+
ABCD/EFG=HC && FHA-IG=FJD && AHBE-ACFE=FAJ && ABCD-FHA=AHBE && EFG*IG=ACFE && HC+FJD=FAJ
3+
ABC*DE=CFGH && JDHJ+DGC=JGKK && JEDK+EBAH=FAGH && ABC+JDHJ=JEDK && DE*DGC=EBAH && CFGH-JGKK=FAGH
4+
AB*CDC=BABE && AFD+GHJE=GGDC && HFKH+GJEF=KDAH && AB*AFD=HFKH && CDC+GHJE=GJEF && BABE-GGDC=KDAH
5+
EGA*AH=DGFG && LL+EFFC=EFDL && ABCD+EFGH=KLBK && EGA*LL=ABCD && AH+EFFC=EFGH && DGFG-EFDL=KLBK
6+
ABAC/DEF=GB && HEGF-HBID=HED && EKBI-HKGI=ICDC && ABAC-HEGF=EKBI && DEF+HBID=HKGI && GB*HED=ICDC
7+
ABBC/DDE=DF && AGFG-AHIB=KKG && KGEH+ACKE=FCII && ABBC+AGFG=KGEH && DDE+AHIB=ACKE && DF*KKG=FCII
8+
ABCD+DCEF=GHFI && AHGE+AIC=AKGF && KEG*KI=EBKB && ABCD-AHGE=KEG && DCEF/AIC=KI && GHFI+AKGF=EBKB
9+
ABCD+EBFG=FDBH && AE+EBII=EBAE && AHC*FG=KFGK && ABCD/AE=AHC && EBFG-EBII=FG && FDBH+EBAE=KFGK
10+
ABCD-EABF=GDGA && HII+EGKD=EFCK && IH*EDH=HABF && ABCD/HII=IH && EABF-EGKD=EDH && GDGA-EFCK=HABF
11+
ABCD+EFCF=BGHE && AAIF+GDE=AEDC && FCH*GK=KHHI && ABCD-AAIF=FCH && EFCF/GDE=GK && BGHE+AEDC=KHHI
12+
ABBC/DE=FGD && FBHI-FGKD=FD && EHGI-FBCG=CCEK && ABBC-FBHI=EHGI && DE+FGKD=FBCG && FGD*FD=CCEK
13+
ABCD+EFGG=HEBG && CI+EHKI=EFCH && CKB*GH=IKFD && ABCD/CI=CKB && EFGG-EHKI=GH && HEBG+EFCH=IKFD
14+
ABCD/EE=EFD && GHEH-GIKC=IF && HHDI+GICF=DBCA && ABCD+GHEH=HHDI && EE+GIKC=GICF && EFD*IF=DBCA
15+
ABCD+EFGH=KLBK && LL+EFFC=EFDL && EGA*AH=DGFG && ABCD/LL=EGA && EFGH-EFFC=AH && KLBK+EFDL=DGFG
16+
ABCDE-FGEE=AHBDE && DI*HDB=BKDB && CDE+FKCD=KDGD && ABCDE/DI=CDE && FGEE-HDB=FKCD && AHBDE-BKDB=KDGD
17+
ATU+IAS=IITE && NEG/IOG=E && PAU-NS=PPA && ATU-NEG=PAU && IAS-IOG=NS && IITE/E=PPA
18+
HEB+EUS=LFS && WUB/EH=US && EHB-ESU=RA && HEB-WUB=EHB && EUS+EH=ESU && LFS/US=RA
19+
ABC*DC=EAEF && BF+AEGG=AEBF && FFEE+AEDC=DBHG && ABC*BF=FFEE && DC+AEGG=AEDC && EAEF-AEBF=DBHG
20+
ABC-DBB=EFG && ABB-ECC=BBB && DBEB-HBB=IBC && ABC+ABB=DBEB && DBB+ECC=HBB && EFG+BBB=IBC
21+
AB*BC=DAD && EC/F=F && BCD*G=BBEA && AB*EC=BCD && BC/F=G && DAD*F=BBEA
22+
HJ+AD=DF && BG+EC=DF && AC+GE=HEK && HJ+BG=AC && AD+EC=GE && DF+DF=HEK
23+
ISE+EID=ALK && RAS-KL=RUM && ERR+MDR=LLM && ISE-RAS=ERR && EID+KL=MDR && ALK-RUM=LLM
24+
ABC-DEF=EG && HIE/DAH=H && FBD/HB=DF && ABC+HIE=FBD && DEF-DAH=HB && EG/H=DF
25+
AB*A=CCD && AE/F=G && B*CF=CHE && AB-AE=B && A*F=CF && CCD+G=CHE
26+
E*K=BE && B/N=N && DN+DN=NB && E+B=DN && K*N=DN && BE/N=NB
27+
AB*C=CD && E/B=F && F+G=H && AB-E=F && C+B=G && CD/F=H
28+
AB*C=DEB && AC*B=FBB && GE-FE=CE && AB+AC=GE && C+B=FE && DEB-FBB=CE
29+
AB*B=CDD && CB/B=E && E*D=BD && AB/CB=E && B*B=D && CDD/E=BD
30+
AB*C=DE && F*F=AC && GH+AI=CH && AB*F=GH && C+F=AI && DE-AC=CH
31+
ABC/CD=EF && FDF+EG=AHD && BB+FGA=AIJ && ABC-FDF=BB && CD*EG=FGA && EF+AHD=AIJ

0 commit comments

Comments
 (0)