Skip to content

Commit b3665f0

Browse files
authored
Merge pull request #87 from arnaud-m/v0.5.1-beta
Check code coverage and good practices and clean up - close #84
2 parents 4a07b3c + e467048 commit b3665f0

37 files changed

+428
-171
lines changed

.gitignore

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
src/main/benchmarks/instances/
44
src/main/benchmarks/algorithms/
5-
src/main/benchmarks/results/
6-
src/main/benchmarks/results-cryptarithms/
7-
src/main/benchmarks/results-archive/
5+
src/main/benchmarks/results*/
6+
src/main/benchmarks/results*.tar.gz
87
src/main/benchmarks/solver.sh
98
src/main/benchmarks/words
109
src/main/benchmarks/oar-stderr.log
11-
src/main/benchmarks/nohup.out
10+
src/main/benchmarks/nohup.out
11+
src/main/benchmarks/classify-additions.awk
1212

1313
#### joe made this: http://goel.io/joe
1414

README.org

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +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.
2021
- You can also browse our [[file:src/main/cryptarithms/][collection of cryptarithms]].
2122

2223
* Download and Installation
@@ -40,7 +41,7 @@ It is based on [[https://github.com/chocoteam/choco-solver][choco-solver]] which
4041

4142
The jar file contains all required dependencies.
4243
The next step is simply to run the console application.
43-
: java -cp target/cryptator-0.5.1-SNAPSHOT-with-dependencies.jar cryptator.Cryptator send+more=money
44+
: java -cp target/cryptator-0.5.1-with-dependencies.jar cryptator.Cryptator send+more=money
4445

4546
There are three console applications and the links below point to demonstration scripts.
4647

@@ -65,7 +66,7 @@ It is based on [[https://github.com/chocoteam/choco-solver][choco-solver]] which
6566
<dependency>
6667
<groupId>fr.univ-cotedazur</groupId>
6768
<artifactId>cryptator</artifactId>
68-
<version>0.5.1-SNAPSHOT</version>
69+
<version>0.5.1</version>
6970
</dependency>
7071
#+END_EXAMPLE
7172

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<groupId>fr.univ-cotedazur</groupId>
1717
<artifactId>cryptator</artifactId>
1818
<packaging>jar</packaging>
19-
<version>0.5.1-SNAPSHOT</version>
19+
<version>0.5.1</version>
2020
<name>cryptator</name>
2121
<description>Constraint-based cryptarithm solver</description>
2222
<url>https://github.com/arnaud-m/cryptator</url>

src/main/R/sample-words.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,4 @@ if(length(words) >= argv$words) {
9898
j <- j + 1
9999
}
100100
}
101-
cat("Generate", i , "words list(s) after", j, "tentative(s)\n")
101+
cat("Generate", i , "word list(s) after", j, "tentative(s)\n")

src/main/benchmarks/README.org

Lines changed: 92 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#+BEGIN_SRC sh :results silent
1414
ln -s ../words .
15-
ln -s ../../../target/cryptator-0.5.1-SNAPSHOT-with-dependencies.jar .
15+
ln -s ../../../target/cryptator-0.5.1-with-dependencies.jar .
1616
#+END_SRC
1717

1818
** Clear directories
@@ -49,13 +49,22 @@
4949
}
5050
#+END_SRC
5151

52+
5253
* Generate
5354

54-
** Configure the solver
55+
** Create the solver
5556

56-
#+BEGIN_SRC sh
57-
rm solver.sh
58-
ln -s solver-generate.sh solver.sh
57+
#+BEGIN_SRC sh :tangle solver.sh
58+
JAR=cryptator-0.5.1-with-dependencies.jar
59+
MAINCLASS=cryptator.Cryptagen
60+
61+
MAINARGS=`cat $1 $2 | xargs`
62+
63+
INSTNAME=`echo $INSTNAME | sed 's/\s-*/-/g'`
64+
echo i `basename -s .dat $2`
65+
## SEED=`shuf -i1-1000 -n1`
66+
java -server -Xms512m -Xmx8192m -cp $JAR $MAINCLASS $MAINARGS
67+
exit $?
5968
#+END_SRC
6069

6170
** Configure instances
@@ -81,12 +90,20 @@
8190
echo -v normal -d TRUE -lightM TRUE -lightP TRUE > algorithms/TT.dat
8291
#+END_SRC
8392

93+
94+
95+
8496
* Generate and Solve
85-
** Configure the solver
97+
** Create the solver
8698

87-
#+BEGIN_SRC sh
88-
rm solver.sh
89-
ln -s solver-generate-and-solve.sh solver.sh
99+
#+BEGIN_SRC sh :tangle solver.sh
100+
JAR=cryptator-0.5.1-with-dependencies.jar
101+
MAINCLASS=cryptator.Cryptagen
102+
103+
MAINARGS=`cat $1 $2 | xargs`
104+
105+
java -server -Xms512m -Xmx8192m -cp $JAR $MAINCLASS $MAINARGS | head -n -10
106+
exit $?
90107
#+END_SRC
91108

92109
** Configure instances
@@ -121,6 +138,17 @@ The word lists ~colors.txt~ and ~monsters.txt~ takes the most time by far (aroun
121138
generateLong 16 capitales.txt
122139
#+END_SRC
123140

141+
*** Generate languages
142+
143+
#+BEGIN_SRC R :results output file :file "words-10-2.txt"
144+
base <- 10
145+
x <- head(letters, base)
146+
xy <- expand.grid(x = x, y = x)
147+
cat(paste(x, '\n', collapse = ''))
148+
cat(paste(xy$x, xy$y, '\n', sep = "", collapse = ''))
149+
#+END_SRC
150+
151+
124152
** Configure the algorithm
125153

126154
#+BEGIN_SRC sh
@@ -129,11 +157,23 @@ The word lists ~colors.txt~ and ~monsters.txt~ takes the most time by far (aroun
129157

130158

131159
* Solve
132-
** Configure the solver
160+
** Create the solver
133161

134-
#+BEGIN_SRC sh
135-
rm solver.sh
136-
ln -s solver-solve.sh solver.sh
162+
#+BEGIN_SRC sh :tangle solver.sh
163+
JAR=cryptator-0.5.1-with-dependencies.jar
164+
MAINCLASS=cryptator.Cryptator
165+
166+
MAINARGS=`cat $1 | xargs`
167+
168+
## exclude cryptarithm with long words
169+
## grep -wvE '\w{10,}' $2 | sed 's/[[:space:]]//g' | xargs java -server -Xms512m -Xmx8192m -cp $JAR $MAINCLASS $MAINARGS
170+
171+
## exclude cryptarithm without long words
172+
## grep -wE '\w{10,}' $2 | sed 's/[[:space:]]//g' | xargs java -server -Xms512m -Xmx8192m -cp $JAR $MAINCLASS $MAINARGS
173+
174+
## Do not exclude anything
175+
sed 's/[[:space:]]//g' $2 | xargs java -server -Xms512m -Xmx8192m -cp $JAR $MAINCLASS $MAINARGS
176+
exit $?
137177
#+END_SRC
138178

139179
** Configure instances
@@ -193,8 +233,46 @@ Change the file extension accordingly.
193233
sed -n "$SED_EXPR" $INFILE >> $OUTFILE
194234
done
195235
## Sort cryptarithms
196-
find $OUTDIR -name '*.txt' -exec sort -u -o {} {} \;
236+
find $OUTDIR -name '*.db.txt' -exec sort -u -o {} {} \;
237+
238+
#+END_SRC
239+
240+
** Classify cryptarithms
241+
242+
243+
#+BEGIN_SRC awk :tangle classify-additions.awk
244+
{
245+
operands = int(NF/2)
246+
minlen = length($1)
247+
maxlen = length($1)
248+
for(i = 3 ; i < NF ; i+=2) {
249+
if(length($i) < minlen) minlen=length($i);
250+
else if(length($i) > maxlen) maxlen=length($i);
251+
}
252+
filename=sprintf("N%02d-%02d-%02d.db.txt", operands, minlen, maxlen)
253+
#print operands, minlen, maxlen, filename, $0
254+
print $0 >> filename;
255+
}
256+
257+
#+END_SRC
258+
259+
260+
#+BEGIN_SRC sh
261+
INDIR=results-cryptarithms
262+
OUTDIR=results-classified
263+
rm -fr $OUTDIR
264+
mkdir $OUTDIR
265+
## Classify
266+
(
267+
cd $OUTDIR
268+
find ../$INDIR -name "*.db.txt" -exec awk -f ../classify-additions.awk {} \;
269+
270+
)
271+
## Sort cryptarithms
272+
find $OUTDIR -name '*.db.txt' -exec sort -u -o {} {} \;
197273

198274
#+END_SRC
199275

276+
277+
200278
* Analysis

src/main/benchmarks/solver-generate-and-solve.sh

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/main/benchmarks/solver-generate.sh

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/benchmarks/solver-solve.sh

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/cryptator/CryptaOperator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public enum CryptaOperator {
2424
SUB("-", 2, false, (a, b) -> a.subtract(b), (a, b) -> a.sub(b)),
2525
MUL("*", 3, true, (a, b) -> a.multiply(b), (a, b) -> a.mul(b)),
2626
DIV("//", 3, false, (a, b) -> a.divide(b), (a, b) -> a.div(b)),
27-
FDIV("/", 3, false, (a, b) -> fdiv(a, b), (a, b) -> fdiv(a, b)),
27+
FDIV("/", 3, false, CryptaOperator::fdiv, CryptaOperator::fdiv),
2828
MOD("%", 4, false, (a, b) -> a.mod(b), (a, b) -> a.mod(b)),
2929
POW("^", 4, false, (a, b) -> a.pow(b.intValue()), (a, b) -> a.pow(b)),
3030
ID("", 5, true, (a, b) -> BigInteger.ZERO, (a, b) -> null),
@@ -47,8 +47,8 @@ public enum CryptaOperator {
4747
private final int priority;
4848
private final boolean isCommutative;
4949

50-
CryptaOperator(final String token, int priority, boolean isCommutative, final BinaryOperator<BigInteger> function,
51-
final BinaryOperator<ArExpression> expression) {
50+
CryptaOperator(final String token, final int priority, final boolean isCommutative,
51+
final BinaryOperator<BigInteger> function, final BinaryOperator<ArExpression> expression) {
5252
this.token = token;
5353
this.function = function;
5454
this.expression = expression;

src/main/java/cryptator/choco/ChocoLogger.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public final class ChocoLogger {
2323

2424
private final Logger logger;
2525

26-
public ChocoLogger(Logger logger) {
26+
public ChocoLogger(final Logger logger) {
2727
super();
2828
this.logger = logger;
2929
}
@@ -58,13 +58,13 @@ public void logOnSolver(final IChocoModel m) {
5858
logOnSolver(m.getModel());
5959
}
6060

61-
public void logOnSolver(Model model) {
61+
public void logOnSolver(final Model model) {
6262
if (logger.isLoggable(Level.INFO)) {
6363
logger.log(Level.INFO, "Solver diagnostics:\n{0}", toDimacs(model.getSolver()));
6464
}
6565
}
6666

67-
public static String toDimacs(Model model) {
67+
public static String toDimacs(final Model model) {
6868
final StringBuilder b = new StringBuilder();
6969
Formatter fmt = new Formatter(b, Locale.US);
7070
fmt.format("c MODEL_NAME %s", model.getName());

src/main/java/cryptator/cmd/AbstractOptionsParser.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ public final Logger getLogger() {
3838
return Logger.getLogger(mainClass.getName());
3939
}
4040

41-
private final String getCommandName() {
41+
private String getCommandName() {
4242
return mainClass.getName();
4343
}
4444

45-
private final String getArgumentName() {
45+
private String getArgumentName() {
4646
return argumentName;
4747
}
4848

@@ -96,21 +96,21 @@ public final boolean parseOptions(final String[] args) {
9696

9797
}
9898

99-
private String printUsage(CmdLineParser parser, OptionHandlerFilter filter) {
99+
private String printUsage(final CmdLineParser parser, final OptionHandlerFilter filter) {
100100
final ByteArrayOutputStream os = new ByteArrayOutputStream();
101101
parser.printUsage(new OutputStreamWriter(os), null, filter);
102102
return os.toString();
103103
}
104104

105-
private String printExample(String options) {
105+
private String printExample(final String options) {
106106
return "java " + getCommandName() + " " + options + " " + getArgumentName();
107107
}
108108

109-
private String printExample(CmdLineParser parser, OptionHandlerFilter filter) {
109+
private String printExample(final CmdLineParser parser, final OptionHandlerFilter filter) {
110110
return printExample(parser.printExample(filter));
111111
}
112112

113-
private String buildHelpMessage(CmdLineParser parser, OptionHandlerFilter filter) {
113+
private String buildHelpMessage(final CmdLineParser parser, final OptionHandlerFilter filter) {
114114
StringBuilder b = new StringBuilder();
115115
b.append(" Help message:\n");
116116
b.append(printExample("[options...]")).append("\n");

src/main/java/cryptator/cmd/OptionsParserWithLog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public class OptionsParserWithLog<E extends CryptaLogConfig> extends AbstractOpt
1515

1616
private final ICryptaLogManager logManager;
1717

18-
public OptionsParserWithLog(Class<?> mainClass, E config, String argumentName, ICryptaLogManager logManager) {
18+
public OptionsParserWithLog(final Class<?> mainClass, final E config, final String argumentName,
19+
final ICryptaLogManager logManager) {
1920
super(mainClass, config, argumentName);
2021
this.logManager = logManager;
2122
}

src/main/java/cryptator/cmd/Verbosity.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,40 @@
1010

1111
import cryptator.specs.ICryptaLogManager;
1212

13+
/**
14+
* The Enum Verbosity represents the verbosity levels of a program.
15+
*/
1316
public enum Verbosity {
14-
SILENT, QUIET, NORMAL, VERBOSE, VERY_VERBOSE, DEBUG;
1517

16-
public void applyTo(ICryptaLogManager manager) {
18+
/** The silent level. */
19+
SILENT,
20+
/** The quiet level. */
21+
QUIET,
22+
/** The normal level. */
23+
NORMAL,
24+
/** The verbose level. */
25+
VERBOSE,
26+
/** The very verbose level. */
27+
VERY_VERBOSE,
28+
/** The debug level. */
29+
DEBUG;
30+
31+
/**
32+
* Apply this verbosity level to a logging manager.
33+
*
34+
* @param manager the logging manager
35+
*/
36+
public void applyTo(final ICryptaLogManager manager) {
1737
setVerbosity(manager, this);
1838
}
1939

20-
public static void setVerbosity(ICryptaLogManager manager, Verbosity verbosity) {
40+
/**
41+
* Sets the verbosity of a logging manager.
42+
*
43+
* @param manager the manager
44+
* @param verbosity the verbosity level
45+
*/
46+
public static void setVerbosity(final ICryptaLogManager manager, final Verbosity verbosity) {
2147
if (verbosity != null && manager != null) {
2248
if (verbosity.equals(SILENT)) {
2349
manager.setSilent();

src/main/java/cryptator/config/CryptaConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public final int getSearchStrategy() {
9191
return searchStrategy;
9292
}
9393

94-
public final void setSearchStrategy(int searchStrategy) {
94+
public final void setSearchStrategy(final int searchStrategy) {
9595
this.searchStrategy = searchStrategy;
9696
}
9797

0 commit comments

Comments
 (0)