Skip to content

Commit

Permalink
v.0.9.0
Browse files Browse the repository at this point in the history
* LatinSquares, MagicSquares algorithms and classes
  • Loading branch information
foo123 committed May 17, 2019
1 parent c03d39d commit 8ac94e9
Show file tree
Hide file tree
Showing 33 changed files with 1,501 additions and 992 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Abacus
A combinatorics library for Node/XPCOM/JS, PHP, Python, C/C++, Java
A combinatorics library for Node.js / Browser / XPCOM Javascript, PHP, Python, C/C++, Java


(php/python/java/c implementations in progress)


**version 0.8.8** (~ 66kB minified, ~ 22kB zipped)
**version 0.9.0** (~ 66kB minified, ~ 22kB zipped)

![abacus combinatorial numbers](/abacus.jpg)

Expand Down Expand Up @@ -72,6 +72,8 @@ A combinatorics library for Node/XPCOM/JS, PHP, Python, C/C++, Java
* `Composition` (`test/compositions.js`) **rank/unrank methods missing, partial support for COLEX**
* `RestrictedPartition` (`test/restricted_partitions.js`) **exactly M max. part**
* `RestrictedComposition` (`test/restricted_compositions.js`) **exactly K #parts**
* `LatinSquare` (`test/latin_squares.js`)
* `MagicSquare` (`test/magic_squares.js`)
* **multiple (combined) iterator orderings & traversals**: `lex`, `colex`, `random`, `reversed`, `reflected`, `minimal` (not implemented yet). For example: `"revlex"` (equivalent to `"lex,reversed"`), `"refcolex"` (equivalent to `"colex,reflected"`), and so on..
* **arbitrary range** of combinatorial objects in a number of supported orderings (ie `lex`, `colex`, `random`,..). **Note** `rank`/`unrank` have to be implemented for this feature to work
* **algebraic composition** of combinatorial objects (of **fixed** dimensions at present) to construct new combinatorial objects (eg `all combinations` = `all permutations` **OF** `all unique combinations`, see `test/permutations_of_combinations.js` and `test/permutations_of_permutations.js`)
Expand Down Expand Up @@ -569,10 +571,10 @@ o.dispose()
* make sure the `.random` methods **uniformly and unbiasedly sample the combinatorial object space** (methods use unbiased sampling algorithms, however results in certain cases might depend on [quality of PRNGs](http://www0.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf)) [DONE]
* support algebraic composition/cascading of combinatorial objects (of **fixed** dimensions at present) to construct new combinatorial objects (eg `all combinations` = `all permutations` **OF** `all unique combinations`) [DONE]
* support generation of supported combinatorial objects with additional **user-defined patterns/templates of constraints** to satisfy e.g *"only combinatorial objects matching `'(n)(m)(1){2}(){3}(0)((n+1))((n+m)){4}'`"* pattern.. [DONE]
* add `LatinSquare`, `MagicSquare` algorithms [DONE]
* add efficient `rank`/`unrank` methods for `DerangementPermutation`, `InvolutionPermutation`, `ConnectedPermutation`, `Composition` & `Partition` (TODO)
* full support for `colex` ordering `Composition` & `Partition` [DONE PARTIALY]
* support `minimal`/`gray` ordering (and successor) for all supported combinatorial objects (TODO)
* use numeric arrays (ie `Uint32`) to store combinatorial items and/or make faster `successor` methods and other numerical routines to `asm.js` (TODO?)
* add `LatinSquare`, `MagicSquare` algorithms (TODO)
* support generation (and counting) of combinatorial objects (including the basic supported ones) based on **generic user-defined symbolic constraints / symmetries / rules** to satisfy, for example `permutations` defined symbolicaly and directly by their *symmetries / constraints* instead of being hardcoded as elementary objects (TODO?)
* support *graph-based* combinatorial objects like `Graph`, `Grammar`,.. (TODO?) (for regular grammars and expressions see [RegexAnalyzer](https://github.com/foo123/RegexAnalyzer) for an example)
Loading

0 comments on commit 8ac94e9

Please sign in to comment.