All notable changes to this project will be documented in this file.
The format based on Keep a Changelog and this project adheres to Semantic Versioning.
- correctly show the black-and-white solved puzzle in the terminal (thanks to @SmileB4Deathz).
- special
UnsolvableLine
error type; - new benchmarks info:
- how it behaves on hard puzzles with the default backtracking (without SAT);
- when the SAT finds the first solution and how much time it needs to find the second one;
- new hard line-solvable puzzles from http://www.nonograms.org;
- information on blotted (webpbn) puzzles:
- numbers;
- supported formats;
- show solution rate on various steps of solving.
- moved from Travis CI to Github Actions;
- updated compiler lints in lib.rs;
- refactoring:
- simplify string trimming while parsing;
- explicit anonymous lifetimes;
- signatures of members for
Copy
traits (Color
andBlock
):&self
->self
; - new names for
LineSolver
's methods:get_soltion
->into_solution
;get_sol
->solve_block
;
- get rid of isize argument in
LineSolver::set_color_block
;
- updated dependencies:
ordered_float
=2.8;smalvec
=1.6;- others with
cargo update
(check that they are still compilable under Rust 1.39).
- a lot of clippy warnings (up to 1.57.0-beta.3 and 1.58.0-nightly);
- suppress
clippy::cast_precision_loss
; - suppress some IDEA warnings (
std::fmt::Debug
); - benchmark script:
- variables scope;
RUSTFLAGS="-C target-cpu=native"
for maximum performance;
- freeze
varisat
version to "=0.2.1" (to support Rust 1.39).
- automatically deploy solution on https://spoj.com.
- represent a line as
Rc<B>
instead ofRc<Vec<B>>
; - trait bounds for
ShellRenderer
; - move rendering of
BinaryColor
intorender.rs
; update_solved
returnsOption::None
instead of emptyVec
;- refactoring:
- extract
LineDirection
andLinePosition
; - generalize
JobQueue
; uniq_indexes
closure in theBoard
constructor;- do not allocate unnecessary
String
-s in parsers; - simplify
MyFormat
: reduce nesting; == ""
=>.is_empty()
;
- extract
- remove suppression of some warnings (
#[derive(Debug)]
); - coverage run only once as the last step of CI;
BoardParser::parse_rc
to produce theArc<RefCell<Board>>
in one step;
- flatten the library's API;
- renamed some public
struct
-s; - use
Box<[B]>
instead ofVec<B>
for the solved lines; - regrouped the imports;
- updated the dependencies.
- clean the travis cache from previous build's artifacts.
- tests for various webpbn exported formats;
- tests with minimal supported Rust version (1.39);
- check for clippy::pedantic in travis (3 different sets of features).
- travis builds;
- grammar and typos (thanks to IDEA's hints);
- clippy warnings for the sat feature (with the updated cargo_every script).
- move solvers benchmarks into the script;
- optimize slice index operations with the
get/get_mut
; - optimize initial propagation (the lines closer to the edges will be solved first);
- refactor
Job
->LinePosition
; - simplified conditional compliation for ini, xml, threaded features;
Point
withpub
fields;- reduce turbofish usage by specifying variable's type.
- outdated comments;
- unnecessary
pub
-s.
- spoj example clippy warning
- SAT solver refactoring
- optimization for colored puzzles: exclusion of colors based on the extreme clues positions;
- Rust logo as solved nonogram image in README;
- coverage with codecov.io;
- add some badges in README;
- SAT variables and clauses number in the report ot the hardest puzzles;
- cargo-every.py script for doing a cargo command for every combination of features.
- simplify generation of SAT clauses for overlapping blocks;
- move some methods of
Description
closer to its definition and add some tests; - clarified features names and usage;
- updated
--help
message for batch.sh.
- non UTF-8 symbols into input files are ignoring.
- SAT-solver, adapted for binary and multicolor puzzles: huge speed improvement;
- Random puzzles comparison;
- Allow using callbacks in non-threaded environment;
- Validation on
Board::restore
(to prevent showing bad results on completion); Renderer::render_simple
to print solution in compact;ProbeImpact
now stores the color of every cell that was changed during the probe.
- some clippy warnings
(in
cargo clippy -- -W clippy::nursery
andcargo clippy -- -W clippy::pedantic
modes); - show diff with previous solution when multiple ones found.
- updated and cleaned up benchmarks
- spoj example with the algorithm adaptation for this problem
- crate metadata to
--help
with help ofclap
's macros.
- README examples
- get rid of some allocations by preventing premature
collect
-ing - do not store
Err("Bad line")
in cache anymore - use iterators instead of
Vec
's where possible - optimize
propagation::Solver::update_line
- clippy errors about
f64
comparison: usef64::EPSILON
- move solutions cache from
Board
topropagation::Solver
- make the
Priority
abstraction instead ofOrderedFloat<f64>
- make the
ProbeResult
abstraction instead ofOption
to represent NewInfo/Contradiction variants - benchmark results (run some very long-solving puzzles)
- use SmallVec for Point's neighbours
- lower the logs level for some of
probing
andbacktracking
events - do not create the propagation solver
with_point
anymore, just run with (or without) a Point - dependencies
- callback test as closure
- correctly parse the colors starting with '#', e.g. #FF00FF
- olsak is the new default format for webpbn puzzles
- support for more formats (faase, ish, keen, makhorin, ss, syro, nin)
- LOW_PRIORITY environment variable to prevent probing the cells with possibly low impact
- more checks
- implement
Debug
for all the structures - travis tests support
- 'stat' mode for batch.sh script
- performance comparison results as csv
- article on habr.com
- remove
Color::is_updated_with
andBoard::diff
to improve performance - disable
backtracking::Solver::explored_paths
to improve performance - improve
backtracking::SearchTree::debug
to prevent high memory usage - add 'repository' in crate metadata
- move all but the core dependencies into optional features (clap, env_logger, ini, xml, colored)
- iterators refactoring
- bench results
- merge 'benches/batch-nonograms.org.sh' and 'benches/batch-webpbn.sh' into single script
- remove unnecessary
pub
- add
ColorDesc::rgb_value
to use in web renderer
- restore backtracking timeouts with
Instant::now()
by enablingstd_time
default feature
- published on crates.io repository
- ability to use Board in threaded environment (--features=threaded)
- WASM runtime support: remove Instant::now() calls
- fix imports to use
crate::
instead ofsuper::
- switch to upstream priority-queue (after merging garro95/priority-queue#14)
- callbacks support
- optimization of probing queue: use different strategies depending of queue size
- optimize NonogramsOrg parsing and ShellRenderer with caching
- replace
Option::unwrap
withOption::expect("error message")
- many refactoring of references
- refactoring with clippy
- Support for multi-colored boards
- Parse boards from https://nonograms.org
- Solve the black-and-white board with the line solving then probing and then backtracking
- Parse boards from https://webpbn.com
- Initial release!
- Parse a board from custom TOML-based format
- Store the board
- Print out the board in the terminal
- Solve a single black-and-white line