From 937f786fab8d377e4be69ab5ee487f471fc7fdf0 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 5 Nov 2016 02:28:09 +0100 Subject: [PATCH 01/48] chore(package): update aureooms-js-itertools to version 3.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2fdf4b0..3512bb3 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "aureooms-js-array": "^3.1.0", "aureooms-js-compare": "^1.4.3", "aureooms-js-functools": "^2.0.3", - "aureooms-js-itertools": "^1.3.0", + "aureooms-js-itertools": "^3.0.0", "aureooms-js-operator": "^1.0.2", "aureooms-js-partition": "^7.0.0", "aureooms-js-random": "^1.0.1", From ac246d1b442fa2a34144a8203addc2469c67344b Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 5 Nov 2016 21:00:20 +0100 Subject: [PATCH 02/48] chore(package): update aureooms-js-selection to version 9.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3512bb3..0d4cd42 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "aureooms-js-operator": "^1.0.2", "aureooms-js-partition": "^7.0.0", "aureooms-js-random": "^1.0.1", - "aureooms-js-selection": "^8.0.1", + "aureooms-js-selection": "^9.0.0", "aureooms-js-sort": "^6.0.0", "aureooms-js-splitting": "^4.0.2", "aureooms-node-package": "^6.0.1" From e158828a7fbe9412484244abbe147d739bb3f4c5 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 5 Nov 2016 21:36:01 +0100 Subject: [PATCH 03/48] chore(package): update aureooms-js-partition to version 8.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0d4cd42..14fbb44 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "aureooms-js-functools": "^2.0.3", "aureooms-js-itertools": "^3.0.0", "aureooms-js-operator": "^1.0.2", - "aureooms-js-partition": "^7.0.0", + "aureooms-js-partition": "^8.0.0", "aureooms-js-random": "^1.0.1", "aureooms-js-selection": "^9.0.0", "aureooms-js-sort": "^6.0.0", From 17814345a937d24e2d26c5dca660230c463cd867 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sun, 6 Nov 2016 01:11:24 +0100 Subject: [PATCH 04/48] chore(package): update aureooms-js-sort to version 7.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 14fbb44..52c9ca6 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "aureooms-js-partition": "^8.0.0", "aureooms-js-random": "^1.0.1", "aureooms-js-selection": "^9.0.0", - "aureooms-js-sort": "^6.0.0", + "aureooms-js-sort": "^7.0.0", "aureooms-js-splitting": "^4.0.2", "aureooms-node-package": "^6.0.1" }, From db3fcffec4c0147465674799e34ea1a20ab96cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 25 Jan 2017 23:57:13 +0100 Subject: [PATCH 05/48] fix description add sketch --- README.md | 11 +++++++---- media/sketch.png | Bin 0 -> 63659 bytes package.json | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 media/sketch.png diff --git a/README.md b/README.md index fbb74db..d199d2e 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ -[js-algorithms](http://aureooms.github.io/js-algorithms) +[@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) == -Algorithms code bricks in JavaScript. This is a child project of -[js-library](https://github.com/aureooms/js-library) and the twin project -of [js-data-structures](https://github.com/aureooms/js-data-structures). + + +Playground for algorithms in JavaScript. +This is a child project of [@aureooms/js-library](https://github.com/aureooms/js-library) +and +the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). [![NPM license](http://img.shields.io/npm/l/aureooms-js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) [![NPM version](http://img.shields.io/npm/v/aureooms-js-algorithms.svg?style=flat)](https://www.npmjs.org/package/aureooms-js-algorithms) diff --git a/media/sketch.png b/media/sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..3df646947e93fa59d56d04485bedde7c0d3b7fc7 GIT binary patch literal 63659 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 Date: Thu, 2 Feb 2017 20:42:07 +0100 Subject: [PATCH 06/48] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d199d2e..3bab941 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ A list of links and projects focusing on algorithm implementation. - https://github.com/felipernb/algorithms.js - https://github.com/mgechev/javascript-algorithms - https://github.com/nzakas/computer-science-in-javascript + - https://github.com/benoitvallon/computer-science-in-javascript - http://www.nayuki.io ### Projects implementing algorithms in other languages From eb092df1dab05509903552dc7a16765ba6cee909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 16 Feb 2017 10:37:47 +0100 Subject: [PATCH 07/48] aureooms-js-* -> @aureooms/js-* --- package.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 4b00cc8..85c7214 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "aureooms-js-algorithms", + "name": "@aureooms/js-algorithms", "description": "Playground for algorithms in JavaScript", "homepage": "https://aureooms.github.io/js-algorithms", "main": "js/dist/algorithms.js", @@ -24,16 +24,16 @@ }, "author": "aureooms", "devDependencies": { - "aureooms-js-array": "^3.1.0", - "aureooms-js-compare": "^1.4.3", - "aureooms-js-functools": "^2.0.3", - "aureooms-js-itertools": "^3.0.0", - "aureooms-js-operator": "^1.0.2", - "aureooms-js-partition": "^8.0.0", - "aureooms-js-random": "^1.0.1", - "aureooms-js-selection": "^9.0.0", - "aureooms-js-sort": "^7.0.0", - "aureooms-js-splitting": "^4.0.2", + "@aureooms/js-array": "^3.1.0", + "@aureooms/js-compare": "^1.4.3", + "@aureooms/js-functools": "^2.0.3", + "@aureooms/js-itertools": "^3.0.0", + "@aureooms/js-operator": "^1.0.2", + "@aureooms/js-partition": "^8.0.0", + "@aureooms/js-random": "^1.0.1", + "@aureooms/js-selection": "^9.0.0", + "@aureooms/js-sort": "^7.0.0", + "@aureooms/js-splitting": "^4.0.2", "aureooms-node-package": "^6.0.1" }, "bugs": { From 81d2f2037c6189333a9791dde5964dfa88f1f78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 16 Feb 2017 11:35:38 +0100 Subject: [PATCH 08/48] aureooms- > @aureooms/ : update js code --- js/dist/algorithms.js | 4 ++-- js/dist/algorithms.min.js | 2 +- test/js/src/3sum.js | 2 +- test/js/src/bdp.js | 18 +++++++++--------- test/js/src/iter.js | 2 +- test/js/src/ksum/sortxy.js | 2 +- test/js/src/minima.js | 8 ++++---- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/js/dist/algorithms.js b/js/dist/algorithms.js index 742e059..5588699 100644 --- a/js/dist/algorithms.js +++ b/js/dist/algorithms.js @@ -1162,12 +1162,12 @@ function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } if (typeof exports === "object") { definition(exports); } else if (typeof define === "function" && define.amd) { - define("aureooms-js-algorithms", [], function () { + define("@aureooms/js-algorithms", [], function () { return definition({}); }); } else if (typeof window === "object" && typeof window.document === "object") { definition(window["algorithms"] = {}); - } else console.error("unable to detect type of module to define for aureooms-js-algorithms"); + } else console.error("unable to detect type of module to define for @aureooms/js-algorithms"); })(); // empty or one element array case diff --git a/js/dist/algorithms.min.js b/js/dist/algorithms.min.js index 5eb1d11..6e0eb80 100644 --- a/js/dist/algorithms.min.js +++ b/js/dist/algorithms.min.js @@ -1,2 +1,2 @@ -"use strict";function _toArray(r){return Array.isArray(r)?r:Array.from(r)}var _slicedToArray=function(){function r(r,e){var t=[],n=!0,a=!1,o=void 0;try{for(var i,u=r[Symbol.iterator]();!(n=(i=u.next()).done)&&(t.push(i.value),!e||t.length!==e);n=!0);}catch(f){a=!0,o=f}finally{try{!n&&u["return"]&&u["return"]()}finally{if(a)throw o}}return t}return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return r(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){var r=function(r,e){var t=function(r,e,t,n,a,o,i,u,f,c){for(var s,l,v,d,y,b;f>u;++u){l=e,s=o-1;do v=r[l],d=n[s],y=i[u],b=v+d,-y===b&&c(v,d,y),b>-y?--s:++l;while(t>l&&s>=a)}};r._3sum_n2=t;var n=function _(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x;n>a||o>i||u>f||c>s||(v=e[n],d=t[i],y=e[f],b=t[c],x=r(v,d,y,b),0===x?(l(n,i,f,c),_(r,e,t,n+1,a,o,i,u,f,c,s,l),_(r,e,t,n,n,o,i-1,u,f,c,s,l),_(r,e,t,n,n,i,i,u,f-1,c,s,l)):0>x?(_(r,e,t,n+1,a,o,i,u,f,c,s,l),_(r,e,t,n,n,o,i,u,f-1,c,s,l)):(_(r,e,t,n,a,o,i-1,u,f,c,s,l),_(r,e,t,n,a,i,i,u,f,c+1,s,l)))};r.sortxy_n3=n;var a=function m(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x;n>a||o>i||u>f||c>s||(v=e[n],d=t[o],y=e[u],b=t[c],x=r(v,d,y,b),0===x&&l(n,o,u,c),m(r,e,t,n+1,a,o,i,u,f,c,s,l),m(r,e,t,n,n,o+1,i,u,f,c,s,l),m(r,e,t,n,n,o,o,u+1,f,c,s,l),m(r,e,t,n,n,o,o,u,u,c+1,s,l))};r.sortxy_n4=a;var o=function(r,e,t){for(;e>r;++r)t(r)},i=function(r,e,t){for(;--e>=r;)t(e)};r.fiter=o,r.biter=i;var u=function(r,t,n,a,o,i){var u=regeneratorRuntime.mark(function f(u,c,s,l,v,d){var y,b,x,_,k,m,p,h,w,g;return regeneratorRuntime.wrap(function(A){for(;;)switch(A.prev=A.next){case 0:if(y=e,b=e,x=e,_=e,k=e,m=e,p=e,h=e,w=e,g=e,!(s>=l-1)){A.next=3;break}return A.abrupt("return");case 3:if(v!==d){A.next=19;break}k=o(a,c,s,l),x=k;case 6:if(!(l>x)){A.next=17;break}_=s;case 8:if(!(k>_)){A.next=14;break}return A.next=11,[c[x],c[_]];case 11:++_,A.next=8;break;case 14:++x,A.next=6;break;case 17:A.next=32;break;case 19:return y=(s+l)/2|0,r(u(v),c,s,l,y),b=c[y][v],x=o(t(v,b),c,s,y),A.delegateYield(f(u,c,s,x,v,d),"t0",24);case 24:return _=o(n(v,b),c,y+1,l),A.delegateYield(f(u,c,_,l,v,d),"t1",26);case 26:return k=o(a,c,s,x),m=o(a,c,_,l),p=x-k,h=l-m,p===h?(i(c,m,l,c,k),l=_):h>p?(i(c,k,x,c,m),w=m+p-_,g=l-(m+p),w>=g?i(c,m+p,l,c,_):i(c,l-w,l,c,_),l=_+g):(i(c,m,l,c,k),w=x-(k+h),g=_-x,w>=g?i(c,x,_,c,k+h):i(c,_-w,_,c,k+h),l=_-w),A.delegateYield(f(u,c,s,l,v+1,d),"t2",32);case 32:case"end":return A.stop()}},f,this)});return u};r.__bdpdc__=u;var f=function(r,t){var n=regeneratorRuntime.mark(function a(n,o,i,u,f,c){var s,l,v,d,y;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(s=e,l=e,v=e,d=e,y=e,!(i>=u-1)){a.next=3;break}return a.abrupt("return");case 3:v=t(r,o,i,u),s=v;case 5:if(!(u>s)){a.next=24;break}l=i;case 7:if(!(v>l)){a.next=21;break}d=f;case 9:if(!(c>d)){a.next=16;break}if(y=n(d),!(y(o[s],o[l])<0)){a.next=13;break}return a.abrupt("continue",18);case 13:++d,a.next=9;break;case 16:return a.next=18,[o[s],o[l]];case 18:++l,a.next=7;break;case 21:++s,a.next=5;break;case 24:case"end":return a.stop()}},a,this)});return n};r.__bdpdn2__=f;var c=function(r,e,t){var n,a;for(a=1,n=1;r>n;++n)a=a*(t-n)/t;for(;e>n;++n)a=a*(t-r)/t;return 1-a};r.samebirthday=c;var s=function(r){return function(e,t){var n;return n=e-t,-r>n?-1:n>r?1:0}};r.__absepsilon__=s;var l=function(r){return function(e,t){var n;return 0===t?e:0===e?-t:(n=e/t-1,-r>n?-1:n>r?1:0)}};r.__relepsilon__=l;var v=function(r,t){var n=[],a=!0,o=!1,i=e;try{r:for(var u,f=t[Symbol.iterator]();!(a=(u=f.next()).done);a=!0){var c=u.value,s=!0,l=!1,v=e;try{for(var d,y=n[Symbol.iterator]();!(s=(d=y.next()).done);s=!0){var b=d.value;if(!r(c,b))continue r}}catch(x){l=!0,v=x}finally{try{!s&&y["return"]&&y["return"]()}finally{if(l)throw v}}n.push(c)}}catch(x){o=!0,i=x}finally{try{!a&&f["return"]&&f["return"]()}finally{if(o)throw i}}return n};r.max_independent_set=v;var d=function(r,e,t,n){var a,o,i,u,f;for(a=t,o=n-1;o>=a;){for(i=t;a>i&&!r(e[i],e[o]);++i);if(a>i)--o;else{for(f=e[o],e[o]=e[a],e[a]=f,u=a+1;o>=u;)r(e[a],e[o])?--o:r(e[o],e[a])?(f=e[o],e[o]=e[a],e[a]=f,--o):(f=e[o],e[o]=e[u],e[u]=f,++u);++a}}return a};r.clarkson=d;var y=function(r,t,n,a,o){var i=function u(i){if(o(i))return a(i);var f=t(r(i)),c=_toArray(f),s=c[0],l=c.slice(1),v=u(s),d=_slicedToArray(v,2),y=d[0],b=d[1],x=!0,_=!1,k=e;try{for(var m,p=l[Symbol.iterator]();!(x=(m=p.next()).done);x=!0){var h=m.value;if(n(h,b)){var w=u(h),g=_slicedToArray(w,2);y=g[0],b=g[1]}}}catch(A){_=!0,k=A}finally{try{!x&&p["return"]&&p["return"]()}finally{if(_)throw k}}return[y,b]};return i};r.chan=y;var b=function(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x,_;for(x=t-e,k=o-a-1,_=1+k/2,y=u;f>y;++y)i[y]=n[a];for(d=1,v=1;_>d;++d,v*=x)for(y=u,b=0;f>y;++y,b=((b+1)/v|0)%x)i[y]+=n[a+d]*r[e+b];for(v=1;d<=k;++d,v*=x)for(y=s,b=0;l>y;++y,b=((b+1)/v|0)%x)c[y]+=n[a+d]*r[e+b]};r.evenkldtto2sum=b;var x=function(r,e,t,n,a,o,i,u,f,c,s,l,v,d,y){var b,x,_,m,p,h;for(p=t-e,k=o-a-1,h=2+(k-1)/2,x=2,b=1;h>x;++x,b*=p)for(_=u,m=0;f>_;++_,m=((m+1)/b|0)%p)i[_]+=n[a+x]*r[e+m];for(b=1;x<=k;++x,b*=p)for(_=s,m=0;l>_;++_,m=((m+1)/b|0)%p)c[_]+=n[a+x]*r[e+m];for(m=0;p>m;++m)v[d+m]=n[a+1]*r[e+m]+n[a]};return r.oddkldtto3sum=x,r};"object"==typeof exports?r(exports):"function"==typeof define&&define.amd?define("aureooms-js-algorithms",[],function(){return r({})}):"object"==typeof window&&"object"==typeof window.document?r(window.algorithms={}):console.error("unable to detect type of module to define for aureooms-js-algorithms")}(); +"use strict";function _toArray(r){return Array.isArray(r)?r:Array.from(r)}var _slicedToArray=function(){function r(r,e){var t=[],n=!0,a=!1,o=void 0;try{for(var i,u=r[Symbol.iterator]();!(n=(i=u.next()).done)&&(t.push(i.value),!e||t.length!==e);n=!0);}catch(f){a=!0,o=f}finally{try{!n&&u["return"]&&u["return"]()}finally{if(a)throw o}}return t}return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return r(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){var r=function(r,e){var t=function(r,e,t,n,a,o,i,u,f,c){for(var s,l,v,d,y,b;f>u;++u){l=e,s=o-1;do v=r[l],d=n[s],y=i[u],b=v+d,-y===b&&c(v,d,y),b>-y?--s:++l;while(t>l&&s>=a)}};r._3sum_n2=t;var n=function _(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x;n>a||o>i||u>f||c>s||(v=e[n],d=t[i],y=e[f],b=t[c],x=r(v,d,y,b),0===x?(l(n,i,f,c),_(r,e,t,n+1,a,o,i,u,f,c,s,l),_(r,e,t,n,n,o,i-1,u,f,c,s,l),_(r,e,t,n,n,i,i,u,f-1,c,s,l)):0>x?(_(r,e,t,n+1,a,o,i,u,f,c,s,l),_(r,e,t,n,n,o,i,u,f-1,c,s,l)):(_(r,e,t,n,a,o,i-1,u,f,c,s,l),_(r,e,t,n,a,i,i,u,f,c+1,s,l)))};r.sortxy_n3=n;var a=function m(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x;n>a||o>i||u>f||c>s||(v=e[n],d=t[o],y=e[u],b=t[c],x=r(v,d,y,b),0===x&&l(n,o,u,c),m(r,e,t,n+1,a,o,i,u,f,c,s,l),m(r,e,t,n,n,o+1,i,u,f,c,s,l),m(r,e,t,n,n,o,o,u+1,f,c,s,l),m(r,e,t,n,n,o,o,u,u,c+1,s,l))};r.sortxy_n4=a;var o=function(r,e,t){for(;e>r;++r)t(r)},i=function(r,e,t){for(;--e>=r;)t(e)};r.fiter=o,r.biter=i;var u=function(r,t,n,a,o,i){var u=regeneratorRuntime.mark(function f(u,c,s,l,v,d){var y,b,x,_,k,m,p,h,w,g;return regeneratorRuntime.wrap(function(A){for(;;)switch(A.prev=A.next){case 0:if(y=e,b=e,x=e,_=e,k=e,m=e,p=e,h=e,w=e,g=e,!(s>=l-1)){A.next=3;break}return A.abrupt("return");case 3:if(v!==d){A.next=19;break}k=o(a,c,s,l),x=k;case 6:if(!(l>x)){A.next=17;break}_=s;case 8:if(!(k>_)){A.next=14;break}return A.next=11,[c[x],c[_]];case 11:++_,A.next=8;break;case 14:++x,A.next=6;break;case 17:A.next=32;break;case 19:return y=(s+l)/2|0,r(u(v),c,s,l,y),b=c[y][v],x=o(t(v,b),c,s,y),A.delegateYield(f(u,c,s,x,v,d),"t0",24);case 24:return _=o(n(v,b),c,y+1,l),A.delegateYield(f(u,c,_,l,v,d),"t1",26);case 26:return k=o(a,c,s,x),m=o(a,c,_,l),p=x-k,h=l-m,p===h?(i(c,m,l,c,k),l=_):h>p?(i(c,k,x,c,m),w=m+p-_,g=l-(m+p),w>=g?i(c,m+p,l,c,_):i(c,l-w,l,c,_),l=_+g):(i(c,m,l,c,k),w=x-(k+h),g=_-x,w>=g?i(c,x,_,c,k+h):i(c,_-w,_,c,k+h),l=_-w),A.delegateYield(f(u,c,s,l,v+1,d),"t2",32);case 32:case"end":return A.stop()}},f,this)});return u};r.__bdpdc__=u;var f=function(r,t){var n=regeneratorRuntime.mark(function a(n,o,i,u,f,c){var s,l,v,d,y;return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(s=e,l=e,v=e,d=e,y=e,!(i>=u-1)){a.next=3;break}return a.abrupt("return");case 3:v=t(r,o,i,u),s=v;case 5:if(!(u>s)){a.next=24;break}l=i;case 7:if(!(v>l)){a.next=21;break}d=f;case 9:if(!(c>d)){a.next=16;break}if(y=n(d),!(y(o[s],o[l])<0)){a.next=13;break}return a.abrupt("continue",18);case 13:++d,a.next=9;break;case 16:return a.next=18,[o[s],o[l]];case 18:++l,a.next=7;break;case 21:++s,a.next=5;break;case 24:case"end":return a.stop()}},a,this)});return n};r.__bdpdn2__=f;var c=function(r,e,t){var n,a;for(a=1,n=1;r>n;++n)a=a*(t-n)/t;for(;e>n;++n)a=a*(t-r)/t;return 1-a};r.samebirthday=c;var s=function(r){return function(e,t){var n;return n=e-t,-r>n?-1:n>r?1:0}};r.__absepsilon__=s;var l=function(r){return function(e,t){var n;return 0===t?e:0===e?-t:(n=e/t-1,-r>n?-1:n>r?1:0)}};r.__relepsilon__=l;var v=function(r,t){var n=[],a=!0,o=!1,i=e;try{r:for(var u,f=t[Symbol.iterator]();!(a=(u=f.next()).done);a=!0){var c=u.value,s=!0,l=!1,v=e;try{for(var d,y=n[Symbol.iterator]();!(s=(d=y.next()).done);s=!0){var b=d.value;if(!r(c,b))continue r}}catch(x){l=!0,v=x}finally{try{!s&&y["return"]&&y["return"]()}finally{if(l)throw v}}n.push(c)}}catch(x){o=!0,i=x}finally{try{!a&&f["return"]&&f["return"]()}finally{if(o)throw i}}return n};r.max_independent_set=v;var d=function(r,e,t,n){var a,o,i,u,f;for(a=t,o=n-1;o>=a;){for(i=t;a>i&&!r(e[i],e[o]);++i);if(a>i)--o;else{for(f=e[o],e[o]=e[a],e[a]=f,u=a+1;o>=u;)r(e[a],e[o])?--o:r(e[o],e[a])?(f=e[o],e[o]=e[a],e[a]=f,--o):(f=e[o],e[o]=e[u],e[u]=f,++u);++a}}return a};r.clarkson=d;var y=function(r,t,n,a,o){var i=function u(i){if(o(i))return a(i);var f=t(r(i)),c=_toArray(f),s=c[0],l=c.slice(1),v=u(s),d=_slicedToArray(v,2),y=d[0],b=d[1],x=!0,_=!1,k=e;try{for(var m,p=l[Symbol.iterator]();!(x=(m=p.next()).done);x=!0){var h=m.value;if(n(h,b)){var w=u(h),g=_slicedToArray(w,2);y=g[0],b=g[1]}}}catch(A){_=!0,k=A}finally{try{!x&&p["return"]&&p["return"]()}finally{if(_)throw k}}return[y,b]};return i};r.chan=y;var b=function(r,e,t,n,a,o,i,u,f,c,s,l){var v,d,y,b,x,_;for(x=t-e,k=o-a-1,_=1+k/2,y=u;f>y;++y)i[y]=n[a];for(d=1,v=1;_>d;++d,v*=x)for(y=u,b=0;f>y;++y,b=((b+1)/v|0)%x)i[y]+=n[a+d]*r[e+b];for(v=1;d<=k;++d,v*=x)for(y=s,b=0;l>y;++y,b=((b+1)/v|0)%x)c[y]+=n[a+d]*r[e+b]};r.evenkldtto2sum=b;var x=function(r,e,t,n,a,o,i,u,f,c,s,l,v,d,y){var b,x,_,m,p,h;for(p=t-e,k=o-a-1,h=2+(k-1)/2,x=2,b=1;h>x;++x,b*=p)for(_=u,m=0;f>_;++_,m=((m+1)/b|0)%p)i[_]+=n[a+x]*r[e+m];for(b=1;x<=k;++x,b*=p)for(_=s,m=0;l>_;++_,m=((m+1)/b|0)%p)c[_]+=n[a+x]*r[e+m];for(m=0;p>m;++m)v[d+m]=n[a+1]*r[e+m]+n[a]};return r.oddkldtto3sum=x,r};"object"==typeof exports?r(exports):"function"==typeof define&&define.amd?define("@aureooms/js-algorithms",[],function(){return r({})}):"object"==typeof window&&"object"==typeof window.document?r(window.algorithms={}):console.error("unable to detect type of module to define for @aureooms/js-algorithms")}(); //# sourceMappingURL=js/dist/algorithms.js.map \ No newline at end of file diff --git a/test/js/src/3sum.js b/test/js/src/3sum.js index fa41eec..a36f2db 100644 --- a/test/js/src/3sum.js +++ b/test/js/src/3sum.js @@ -1,6 +1,6 @@ var util = require( "util" ); -var array = require( "aureooms-js-array" ); +var array = require( "@aureooms/js-array" ); test("3sum", function(){ diff --git a/test/js/src/bdp.js b/test/js/src/bdp.js index 95b4e41..85092bf 100644 --- a/test/js/src/bdp.js +++ b/test/js/src/bdp.js @@ -2,15 +2,15 @@ var n; -var itertools = require( "aureooms-js-itertools" ); -var functools = require( "aureooms-js-functools" ); -var splitting = require( "aureooms-js-splitting" ); -var partition = require( "aureooms-js-partition" ) ; -var selection = require( "aureooms-js-selection" ) ; -var operator = require( "aureooms-js-operator" ); -var compare = require( "aureooms-js-compare" ); -var random = require( "aureooms-js-random" ); -var array = require( "aureooms-js-array" ); +var itertools = require( "@aureooms/js-itertools" ); +var functools = require( "@aureooms/js-functools" ); +var splitting = require( "@aureooms/js-splitting" ); +var partition = require( "@aureooms/js-partition" ) ; +var selection = require( "@aureooms/js-selection" ) ; +var operator = require( "@aureooms/js-operator" ); +var compare = require( "@aureooms/js-compare" ); +var random = require( "@aureooms/js-random" ); +var array = require( "@aureooms/js-array" ); var one = function ( bdp, __f__, a, i, j, di, dj, expected ) { diff --git a/test/js/src/iter.js b/test/js/src/iter.js index 22fd9c0..86113bd 100644 --- a/test/js/src/iter.js +++ b/test/js/src/iter.js @@ -1,5 +1,5 @@ -var array = require( "aureooms-js-array" ); +var array = require( "@aureooms/js-array" ); test( "iter", function () { diff --git a/test/js/src/ksum/sortxy.js b/test/js/src/ksum/sortxy.js index 5a4e91b..a099062 100644 --- a/test/js/src/ksum/sortxy.js +++ b/test/js/src/ksum/sortxy.js @@ -1,6 +1,6 @@ var util = require( "util" ) ; -var array = require( "aureooms-js-array" ) ; +var array = require( "@aureooms/js-array" ) ; test( "sortxy" , function ( ) { diff --git a/test/js/src/minima.js b/test/js/src/minima.js index 671f8f1..a62ee37 100644 --- a/test/js/src/minima.js +++ b/test/js/src/minima.js @@ -1,8 +1,8 @@ -var sort = require( "aureooms-js-sort" ) ; -var array = require( "aureooms-js-array" ) ; -var random = require( "aureooms-js-random" ) ; -var compare = require( "aureooms-js-compare" ) ; +var sort = require( "@aureooms/js-sort" ) ; +var array = require( "@aureooms/js-array" ) ; +var random = require( "@aureooms/js-random" ) ; +var compare = require( "@aureooms/js-compare" ) ; test( "minima 1" , function ( ) { From d7bf07860f4a71e2046ef383dacd925f098d4bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 16 Feb 2017 12:46:33 +0100 Subject: [PATCH 09/48] aureooms- > @aureooms/ : update markdwon, json and yml files --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3bab941..bb6250e 100644 --- a/README.md +++ b/README.md @@ -8,15 +8,15 @@ This is a child project of [@aureooms/js-library](https://github.com/aureooms/js and the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). -[![NPM license](http://img.shields.io/npm/l/aureooms-js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) -[![NPM version](http://img.shields.io/npm/v/aureooms-js-algorithms.svg?style=flat)](https://www.npmjs.org/package/aureooms-js-algorithms) -[![Bower version](http://img.shields.io/bower/v/aureooms-js-algorithms.svg?style=flat)](http://bower.io/search/?q=aureooms-js-algorithms) +[![NPM license](http://img.shields.io/npm/l/@aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +[![NPM version](http://img.shields.io/npm/v/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) +[![Bower version](http://img.shields.io/bower/v/@aureooms/js-algorithms.svg?style=flat)](http://bower.io/search/?q=@aureooms/js-algorithms) [![Build Status](http://img.shields.io/travis/aureooms/js-algorithms.svg?style=flat)](https://travis-ci.org/aureooms/js-algorithms) [![Coverage Status](http://img.shields.io/coveralls/aureooms/js-algorithms.svg?style=flat)](https://coveralls.io/r/aureooms/js-algorithms) [![Dependencies Status](http://img.shields.io/david/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=dependencies) [![devDependencies Status](http://img.shields.io/david/dev/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=devDependencies) [![Code Climate](http://img.shields.io/codeclimate/github/aureooms/js-algorithms.svg?style=flat)](https://codeclimate.com/github/aureooms/js-algorithms) -[![NPM downloads per month](http://img.shields.io/npm/dm/aureooms-js-algorithms.svg?style=flat)](https://www.npmjs.org/package/aureooms-js-algorithms) +[![NPM downloads per month](http://img.shields.io/npm/dm/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) [![GitHub issues](http://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) [![Inline docs](http://inch-ci.org/github/aureooms/js-algorithms.svg?branch=master&style=shields)](http://inch-ci.org/github/aureooms/js-algorithms) From 2648d52985a4d4eecc9a888891db6176e6b40dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 16 Feb 2017 13:44:51 +0100 Subject: [PATCH 10/48] use https for shields.io --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bb6250e..e5c350b 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,16 @@ This is a child project of [@aureooms/js-library](https://github.com/aureooms/js and the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). -[![NPM license](http://img.shields.io/npm/l/@aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) -[![NPM version](http://img.shields.io/npm/v/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) -[![Bower version](http://img.shields.io/bower/v/@aureooms/js-algorithms.svg?style=flat)](http://bower.io/search/?q=@aureooms/js-algorithms) -[![Build Status](http://img.shields.io/travis/aureooms/js-algorithms.svg?style=flat)](https://travis-ci.org/aureooms/js-algorithms) -[![Coverage Status](http://img.shields.io/coveralls/aureooms/js-algorithms.svg?style=flat)](https://coveralls.io/r/aureooms/js-algorithms) -[![Dependencies Status](http://img.shields.io/david/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=dependencies) -[![devDependencies Status](http://img.shields.io/david/dev/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=devDependencies) -[![Code Climate](http://img.shields.io/codeclimate/github/aureooms/js-algorithms.svg?style=flat)](https://codeclimate.com/github/aureooms/js-algorithms) -[![NPM downloads per month](http://img.shields.io/npm/dm/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) -[![GitHub issues](http://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) +[![NPM license](https://img.shields.io/npm/l/@aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +[![NPM version](https://img.shields.io/npm/v/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) +[![Bower version](https://img.shields.io/bower/v/@aureooms/js-algorithms.svg?style=flat)](http://bower.io/search/?q=@aureooms/js-algorithms) +[![Build Status](https://img.shields.io/travis/aureooms/js-algorithms.svg?style=flat)](https://travis-ci.org/aureooms/js-algorithms) +[![Coverage Status](https://img.shields.io/coveralls/aureooms/js-algorithms.svg?style=flat)](https://coveralls.io/r/aureooms/js-algorithms) +[![Dependencies Status](https://img.shields.io/david/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=dependencies) +[![devDependencies Status](https://img.shields.io/david/dev/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=devDependencies) +[![Code Climate](https://img.shields.io/codeclimate/github/aureooms/js-algorithms.svg?style=flat)](https://codeclimate.com/github/aureooms/js-algorithms) +[![NPM downloads per month](https://img.shields.io/npm/dm/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) +[![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) [![Inline docs](http://inch-ci.org/github/aureooms/js-algorithms.svg?branch=master&style=shields)](http://inch-ci.org/github/aureooms/js-algorithms) ## Description From cd43474c80327b34d336cba1c5e179123747e3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 16 Feb 2017 13:49:51 +0100 Subject: [PATCH 11/48] fix license badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5c350b..f7d080c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This is a child project of [@aureooms/js-library](https://github.com/aureooms/js and the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). -[![NPM license](https://img.shields.io/npm/l/@aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) [![NPM version](https://img.shields.io/npm/v/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) [![Bower version](https://img.shields.io/bower/v/@aureooms/js-algorithms.svg?style=flat)](http://bower.io/search/?q=@aureooms/js-algorithms) [![Build Status](https://img.shields.io/travis/aureooms/js-algorithms.svg?style=flat)](https://travis-ci.org/aureooms/js-algorithms) From 8b5c7705dc95de2f0c2a443ed7c7df30a6961c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 22 Feb 2017 08:58:57 +0100 Subject: [PATCH 12/48] Update README.md --- README.md | 92 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index f7d080c..c6feed8 100644 --- a/README.md +++ b/README.md @@ -23,38 +23,66 @@ the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/j ## Description This project is just a playground for any algorithm that doesn't fit in any -of those project, - - - [aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript - - [aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript - - [aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript - - [aureooms/js-fft](https://github.com/aureooms/js-fft) : fast Fourier transform code bricks for JavaScript - - [aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers code bricks for JavaScript - - [aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript - - [aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript - - [aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript - - [aureooms/js-hypermatrix](https://github.com/aureooms/js-hypermatrix) : hypermatrices code bricks for JavaScript - - [aureooms/js-integer](https://github.com/aureooms/js-integer) : multi-precision arithmetic code bricks for JavaScript - - [aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript - - [aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript - - [aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - - [aureooms/js-permutation](https://github.com/aureooms/js-permutation) : permutations code bricks for JavaScript - - [aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript - - [aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript - - [aureooms/js-prime](https://github.com/aureooms/js-prime) : prime numbers code bricks for JavaScript - - [aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript - - [aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript - - [aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript - - [aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript - - [aureooms/js-sort](https://github.com/aureooms/js-sort) : sorting code bricks for JavaScript - - [aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting code bricks for JavaScript - - [aureooms/js-heapsort](https://github.com/aureooms/js-heapsort): heapsort code bricks for JavaScript - - [aureooms/js-quicksort](https://github.com/aureooms/js-quicksort): quicksort code bricks for JavaScript - - [aureooms/js-mergesort](https://github.com/aureooms/js-mergesort): mergesort code bricks for JavaScript - - [aureooms/js-merging](https://github.com/aureooms/js-merging): merging code bricks for JavaScript - - [aureooms/js-partition](https://github.com/aureooms/js-partition): partition code bricks for JavaScript - - [aureooms/js-selection](https://github.com/aureooms/js-selection): selection code bricks for JavaScript - - [aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript +of those projects, + +### Sorting + + - [@aureooms/js-sort](https://github.com/aureooms/js-sort) : sorting code bricks for JavaScript + - [@aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting code bricks for JavaScript + - [@aureooms/js-heapsort](https://github.com/aureooms/js-heapsort): heapsort code bricks for JavaScript + - [@aureooms/js-quicksort](https://github.com/aureooms/js-quicksort): quicksort code bricks for JavaScript + - [@aureooms/js-mergesort](https://github.com/aureooms/js-mergesort): mergesort code bricks for JavaScript + - [@aureooms/js-merging](https://github.com/aureooms/js-merging): merging code bricks for JavaScript + - [@aureooms/js-partition](https://github.com/aureooms/js-partition): partition code bricks for JavaScript + - [@aureooms/js-selection](https://github.com/aureooms/js-selection): selection code bricks for JavaScript + +### Searching + - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript + - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript + +### Strings + - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript + - [@aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript + +### Computational geometry + - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript + +### Graph theory + - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript + +### Numbers + + - [@aureooms/js-integer](https://github.com/aureooms/js-integer) : multi-precision arithmetic code bricks for JavaScript + - [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript + - [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript + - [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript + +#### Number theory + - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : fast Fourier transform code bricks for JavaScript + - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : prime numbers code bricks for JavaScript + +#### Number sequences + - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers code bricks for JavaScript + +#### Matrices + - [@aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript + - [@aureooms/js-hypermatrix](https://github.com/aureooms/js-hypermatrix) : hypermatrices code bricks for JavaScript + +### Hashing + - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript + +### Pseudo-random generators + - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript + +### Hard optimization + - [@aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript + - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript + - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript + +### Miscellaneous + - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript + - [@aureooms/js-permutation](https://github.com/aureooms/js-permutation) : permutations code bricks for JavaScript + Those packages aim to provide *code bricks* that are as generic as possible. Some examples are a Gauss-Jordan method that can work with any number model, a From 84dc05267227629ad3fe41fc2239b16de975307b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 1 Mar 2017 05:58:38 -0500 Subject: [PATCH 13/48] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c6feed8..1b38e8c 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,8 @@ of those projects, ### Pseudo-random generators - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript -### Hard optimization +### Hard problems + - [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - [@aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript From a8e356676e3eb84e6b34a249268f0ce29cdcd1f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 1 Mar 2017 09:58:51 -0500 Subject: [PATCH 14/48] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1b38e8c..5807e8c 100644 --- a/README.md +++ b/README.md @@ -58,11 +58,11 @@ of those projects, - [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript #### Number theory - - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : fast Fourier transform code bricks for JavaScript - - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : prime numbers code bricks for JavaScript + - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript + - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript -#### Number sequences - - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers code bricks for JavaScript +#### Integer sequences + - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript #### Matrices - [@aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript From f9963ab145c0f65f67b1c80d587650cb1f30e68d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Fri, 28 Apr 2017 01:53:01 +0200 Subject: [PATCH 15/48] add codacy config file --- .codacy.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .codacy.yml diff --git a/.codacy.yml b/.codacy.yml new file mode 100644 index 0000000..0672c33 --- /dev/null +++ b/.codacy.yml @@ -0,0 +1,7 @@ +languages: + JavaScript: true +exclude_paths: +- "js/dist/*.js" +- "js/dist/**/*.js" +- "test/*.js" +- "test/**/*.js" From 9c37182e3cc32e36aabc7b01833521c5cea4baed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Fri, 26 May 2017 22:57:43 +0200 Subject: [PATCH 16/48] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5807e8c..e70cbb0 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ of those projects, - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript #### Integer sequences + - [@aureooms/js-integer-sequences](https://github.com/aureooms/js-integer-sequences) : Integer sequences for JavaScript - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript #### Matrices From aafc72a3a93107cf3ee2c347843dc8c52508e359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 14:32:48 +0200 Subject: [PATCH 17/48] :unamused: chore(dev-deps): Configure existing versions. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 85c7214..2956a70 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,13 @@ }, "author": "aureooms", "devDependencies": { - "@aureooms/js-array": "^3.1.0", + "@aureooms/js-array": "^4.0.0", "@aureooms/js-compare": "^1.4.3", "@aureooms/js-functools": "^2.0.3", "@aureooms/js-itertools": "^3.0.0", "@aureooms/js-operator": "^1.0.2", "@aureooms/js-partition": "^8.0.0", - "@aureooms/js-random": "^1.0.1", + "@aureooms/js-random": "^2.0.0", "@aureooms/js-selection": "^9.0.0", "@aureooms/js-sort": "^7.0.0", "@aureooms/js-splitting": "^4.0.2", From 4a6c1383644b16c30af21d583792e05243527c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 14:34:44 +0200 Subject: [PATCH 18/48] :boom: BREAKING CHANGE(minima): Remove code. See #60. --- js/src/minima/clarkson.js | 119 -------------------------------------- test/js/src/minima.js | 63 -------------------- 2 files changed, 182 deletions(-) delete mode 100644 js/src/minima/clarkson.js delete mode 100644 test/js/src/minima.js diff --git a/js/src/minima/clarkson.js b/js/src/minima/clarkson.js deleted file mode 100644 index 82b93a9..0000000 --- a/js/src/minima/clarkson.js +++ /dev/null @@ -1,119 +0,0 @@ - -/** - * Output sensitive inplace algorithm to find the minima set of a set S of - * elements according to some partial order. - * - * Uses at most 3nA comparisons where A is the cardinality of the minima set. - * - * For (1), at most nA comparisons are used since we compare each element of S - * with each elements of the minima set which is of cardinality at most A - * during the execution of the algorithm. - * - * For (2), for each executed loop we - * obtain a new minimum and increase the size of the constructed minima set by - * 1, hence there are at most A loops execution, each of which loops over at - * most n elements. (2) uses thus at most nA comparisons. - * - * The running time is dominated by the comparison time and thus the complexity - * of this algorihtm is O(nA). - * - * Description and context in - * ------------------------------------------ - * More Output-Sensitive Geometric Algorithms. - * -------------------- Kenneth L. Clarkson - - */ - -var clarkson = function ( prec , a , i , j ) { - - // - // This algorithms reorganizes the input array `a` as follows - // - elements that are minima are put at the front of `a` - // - other elements are put at the back of `a` - // - // During the algorithm, `a` looks like this - // - // ------------------------------------------------------ - // | minima set | candidate elements | discarded elements | - // ------------------------------------------------------ - // i min dis j - - var min , dis , k , inc , tmp ; - - min = i ; - dis = j - 1 ; - - // While there are candidate elements left. - - while ( min <= dis ) { - - // (1) Determine if the right-most candidate should be discarded because it - // is dominated by one of the minima elements of the minima set in - // construction. - - for ( k = i ; k < min && !prec( a[k] , a[dis] ) ; ++k ) ; - - // If so, discard it. - - if ( k < min ) --dis ; - - // (2) Otherwise, scan the candidates for a minimum. If at this point the - // candidate set is not empty, at least one of its elements must be a - // minimum. We scan the candidate list to find such a minimum. - - else { - - // Store the current minimum as the left-most candidate. - - tmp = a[dis] ; - a[dis] = a[min] ; - a[min] = tmp ; - - // For each other candidate, right-to-left. - - for ( inc = min + 1 ; inc <= dis ; ) { - - // If the current minimum precedes the right-most candidate, - // discard the right-most candidate. - - if ( prec( a[min] , a[dis] ) ) --dis ; - - // Else, if the right-most candidate precedes the current - // minimum, we can discard the current minimum and the - // right-most candidate becomes the current minimum. - - else if ( prec( a[dis] , a[min] ) ) { - tmp = a[dis] ; - a[dis] = a[min] ; - a[min] = tmp ; - --dis ; - } - - // Otherwise, we save the candidate for the next round. - - else { - tmp = a[dis] ; - a[dis] = a[inc] ; - a[inc] = tmp ; - ++inc ; - } - - } - - // The above loop selects a new minimum from the set of candidates - // and places it at position `min`. We now increase the `min` - // counter to move this minimum from the candidate list to the - // minima set. - - ++min ; - - } - - } - - // The algorithm returns the outer right bound of the minima set a[i:min]. - - return min ; - -} ; - -exports.clarkson = clarkson ; diff --git a/test/js/src/minima.js b/test/js/src/minima.js deleted file mode 100644 index a62ee37..0000000 --- a/test/js/src/minima.js +++ /dev/null @@ -1,63 +0,0 @@ - -var sort = require( "@aureooms/js-sort" ) ; -var array = require( "@aureooms/js-array" ) ; -var random = require( "@aureooms/js-random" ) ; -var compare = require( "@aureooms/js-compare" ) ; - -test( "minima 1" , function ( ) { - - var a = [ 1 , 2 , 3 , 4 , 6 , 12 ] ; - - var divides = function ( a , b ) { return b % a === 0 ; } ; - - random.shuffle( a , 0 , a.length ) ; - - var min = algorithms.clarkson( divides , a , 0 , a.length ) ; - - deepEqual( min , 1 , "minima set has cardinality 1" ) ; - - deepEqual( a[0] , 1 , "minimum is 1" ) ; - -} ) ; - -test( "minima 2,3" , function ( ) { - - var a = [ 1 , 2 , 3 , 4 , 6 , 12 ] ; - - var i = 1 ; - - var j = a.length ; - - var divides = function ( a , b ) { return b % a === 0 ; } ; - - random.shuffle( a , i , j ) ; - - var min = algorithms.clarkson( divides , a , i , j ) ; - - deepEqual( min - i , 2 , "minima set has cardinality 2" ) ; - - sort.insertionsort( compare.increasing , a , i , min ) ; - - deepEqual( a[i+0] , 2 , "1st minimum is 2" ) ; - deepEqual( a[i+1] , 3 , "2nd minimum is 3" ) ; - -} ) ; - - -test( "minima totally unordered set" , function ( ) { - - n = 1000 ; - - var a = array.alloc( n ) ; - - array.iota( a , 0 , n , 0 ) ; - - var prec = function ( a , b ) { return false ; } ; - - random.shuffle( a , 0 , n ) ; - - var min = algorithms.clarkson( prec , a , 0 , n ) ; - - deepEqual( min , n , "minima set has cardinality n" ) ; - -} ) ; From f22455e7d70ca7d72647c79096b15ac7504ce62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:27:33 +0200 Subject: [PATCH 19/48] :books: docs(README): Add emoji logo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e70cbb0..83e7c31 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) +:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) == From 2cd3792c030e079e9536b353859dbd58f2cc7c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:28:19 +0200 Subject: [PATCH 20/48] :books: docs(README): Add license badge to headline. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83e7c31..f42c990 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) +:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) [![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) == From 3b8f21357b5c2c0cc254593b876eb48668b8e550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:28:49 +0200 Subject: [PATCH 21/48] :books: docs(README): Remove unnecessary badges. --- README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/README.md b/README.md index f42c990..5f8ffe1 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,6 @@ This is a child project of [@aureooms/js-library](https://github.com/aureooms/js and the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). -[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) -[![NPM version](https://img.shields.io/npm/v/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) -[![Bower version](https://img.shields.io/bower/v/@aureooms/js-algorithms.svg?style=flat)](http://bower.io/search/?q=@aureooms/js-algorithms) -[![Build Status](https://img.shields.io/travis/aureooms/js-algorithms.svg?style=flat)](https://travis-ci.org/aureooms/js-algorithms) -[![Coverage Status](https://img.shields.io/coveralls/aureooms/js-algorithms.svg?style=flat)](https://coveralls.io/r/aureooms/js-algorithms) -[![Dependencies Status](https://img.shields.io/david/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=dependencies) -[![devDependencies Status](https://img.shields.io/david/dev/aureooms/js-algorithms.svg?style=flat)](https://david-dm.org/aureooms/js-algorithms#info=devDependencies) -[![Code Climate](https://img.shields.io/codeclimate/github/aureooms/js-algorithms.svg?style=flat)](https://codeclimate.com/github/aureooms/js-algorithms) -[![NPM downloads per month](https://img.shields.io/npm/dm/@aureooms/js-algorithms.svg?style=flat)](https://www.npmjs.org/package/@aureooms/js-algorithms) -[![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) -[![Inline docs](http://inch-ci.org/github/aureooms/js-algorithms.svg?branch=master&style=shields)](http://inch-ci.org/github/aureooms/js-algorithms) ## Description From 869c79156d1f551a6f6a39fcf25dab9b33cc596a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:53:39 +0200 Subject: [PATCH 22/48] :books: docs(README): Add emoji to subsection titles. --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 5f8ffe1..daf873c 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/j This project is just a playground for any algorithm that doesn't fit in any of those projects, -### Sorting +### :signal_strength: Sorting - [@aureooms/js-sort](https://github.com/aureooms/js-sort) : sorting code bricks for JavaScript - [@aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting code bricks for JavaScript @@ -25,52 +25,52 @@ of those projects, - [@aureooms/js-partition](https://github.com/aureooms/js-partition): partition code bricks for JavaScript - [@aureooms/js-selection](https://github.com/aureooms/js-selection): selection code bricks for JavaScript -### Searching +### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript -### Strings +### :symbols: Strings - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript - [@aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript -### Computational geometry +### :triangular_ruler: Computational geometry - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript -### Graph theory +### :globe_with_meridians: Graph theory - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript -### Numbers +### :1234: Numbers - [@aureooms/js-integer](https://github.com/aureooms/js-integer) : multi-precision arithmetic code bricks for JavaScript - [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript - [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript - [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript -#### Number theory +#### :two: :three: :five: :seven: Number theory - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript -#### Integer sequences +#### :shell: Integer sequences - [@aureooms/js-integer-sequences](https://github.com/aureooms/js-integer-sequences) : Integer sequences for JavaScript - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript -#### Matrices +#### :capital_abcd: Matrices - [@aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript - [@aureooms/js-hypermatrix](https://github.com/aureooms/js-hypermatrix) : hypermatrices code bricks for JavaScript -### Hashing +### :hocho: Hashing - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript -### Pseudo-random generators +### :dice: Pseudo-random generators - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript -### Hard problems +### :brain: Hard problems - [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - [@aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript -### Miscellaneous +### :poodle: Miscellaneous - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript - [@aureooms/js-permutation](https://github.com/aureooms/js-permutation) : permutations code bricks for JavaScript @@ -81,11 +81,11 @@ Karatsuba algorithm that can handle any block size, a Graham Scan algorithm that works with clockwise or counter clockwise ordering, and a Monotone Chain algorithm that can be used as a triangulation algorithm without any change. -## Reference +## :scroll: Reference A list of links and projects focusing on algorithm implementation. -### Projects implementing algorithms in JavaScript +### :coffee: Projects implementing algorithms in JavaScript - https://github.com/felipernb/algorithms.js - https://github.com/mgechev/javascript-algorithms @@ -93,7 +93,7 @@ A list of links and projects focusing on algorithm implementation. - https://github.com/benoitvallon/computer-science-in-javascript - http://www.nayuki.io -### Projects implementing algorithms in other languages +### :peacock: Projects implementing algorithms in other languages - https://github.com/xtaci/algorithms (C++) - https://github.com/fragglet/c-algorithms (C) @@ -104,7 +104,7 @@ A list of links and projects focusing on algorithm implementation. - http://www.nayuki.io (C, C++, Java, C#, Python, Haskell, MATLAB and others) - http://rosettacode.org (All kinds of languages) -### Others +### :link: Others - http://stackoverflow.com/questions/26301/your-favourite-algorithm-and-the-lesson-it-taught-you - http://cglab.ca/publications.html From a6ce6df33d5c0c8076bdc7226b12877107ef0b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:54:51 +0200 Subject: [PATCH 23/48] :books: docs(README): Add new repos. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index daf873c..748f67c 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ of those projects, ### :globe_with_meridians: Graph theory - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript + - [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): + Minimum cut algorithms for JavaScript + - [@aureooms/js-maximum-matching](https://github.com/aureooms/js-maximum-matching): + Maximum matching algorithms for JavaScript ### :1234: Numbers @@ -69,6 +73,8 @@ of those projects, - [@aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript + - [@aureooms/js-knapsack](https://github.com/aureooms/js-knapsack) : + Knapsack problem algorithms for JavaScript ### :poodle: Miscellaneous - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript From 36c6f19540a89df39ad9b51b1239b179f398ef2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:55:04 +0200 Subject: [PATCH 24/48] :books: docs(README): Rename js-ho to js-metaheuristics. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 748f67c..3123a69 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,8 @@ of those projects, ### :brain: Hard problems - [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - - [@aureooms/js-ho](https://github.com/aureooms/js-ho) : heuristic optimization code bricks for JavaScript + - [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : + Metaheuristic algorithms for JavaScript - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript - [@aureooms/js-knapsack](https://github.com/aureooms/js-knapsack) : From 926275163e88f74e86e6a071babfe55ca07d6ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:55:38 +0200 Subject: [PATCH 25/48] :books: docs(README): Wording. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3123a69..d663750 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ of those projects, Those packages aim to provide *code bricks* that are as generic as possible. Some examples are a Gauss-Jordan method that can work with any number model, a -Karatsuba algorithm that can handle any block size, a Graham Scan algorithm +Karatsuba algorithm that can handle any input size, a Graham Scan algorithm that works with clockwise or counter clockwise ordering, and a Monotone Chain algorithm that can be used as a triangulation algorithm without any change. From fa9338f8832be12d13197dabf2869e3e4b4b6189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:56:11 +0200 Subject: [PATCH 26/48] :art: style(README): Remove trailing whitespace. --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d663750..0fc8a8f 100644 --- a/README.md +++ b/README.md @@ -24,18 +24,18 @@ of those projects, - [@aureooms/js-merging](https://github.com/aureooms/js-merging): merging code bricks for JavaScript - [@aureooms/js-partition](https://github.com/aureooms/js-partition): partition code bricks for JavaScript - [@aureooms/js-selection](https://github.com/aureooms/js-selection): selection code bricks for JavaScript - + ### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript - + ### :symbols: Strings - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript - [@aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript - + ### :triangular_ruler: Computational geometry - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript - + ### :globe_with_meridians: Graph theory - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript - [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): @@ -44,7 +44,7 @@ of those projects, Maximum matching algorithms for JavaScript ### :1234: Numbers - + - [@aureooms/js-integer](https://github.com/aureooms/js-integer) : multi-precision arithmetic code bricks for JavaScript - [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript - [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript @@ -53,21 +53,21 @@ of those projects, #### :two: :three: :five: :seven: Number theory - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript - + #### :shell: Integer sequences - [@aureooms/js-integer-sequences](https://github.com/aureooms/js-integer-sequences) : Integer sequences for JavaScript - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript - + #### :capital_abcd: Matrices - [@aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript - [@aureooms/js-hypermatrix](https://github.com/aureooms/js-hypermatrix) : hypermatrices code bricks for JavaScript - + ### :hocho: Hashing - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript - + ### :dice: Pseudo-random generators - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript - + ### :brain: Hard problems - [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : From 25d00892632dacf9dceab11d817d54806096a44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 22:57:35 +0200 Subject: [PATCH 27/48] :bug: fix(README): Fix random logo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0fc8a8f..0ff7b7a 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ of those projects, ### :hocho: Hashing - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript -### :dice: Pseudo-random generators +### :game_die: Pseudo-random generators - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript ### :brain: Hard problems From d5a84eaa0ac1da6bfab6e841366f002738734392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 23:01:06 +0200 Subject: [PATCH 28/48] :books: docs(README): Remove children of js-sort. --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 0ff7b7a..ee6afd0 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,7 @@ This project is just a playground for any algorithm that doesn't fit in any of those projects, ### :signal_strength: Sorting - - [@aureooms/js-sort](https://github.com/aureooms/js-sort) : sorting code bricks for JavaScript - - [@aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting code bricks for JavaScript - - [@aureooms/js-heapsort](https://github.com/aureooms/js-heapsort): heapsort code bricks for JavaScript - - [@aureooms/js-quicksort](https://github.com/aureooms/js-quicksort): quicksort code bricks for JavaScript - - [@aureooms/js-mergesort](https://github.com/aureooms/js-mergesort): mergesort code bricks for JavaScript - - [@aureooms/js-merging](https://github.com/aureooms/js-merging): merging code bricks for JavaScript - - [@aureooms/js-partition](https://github.com/aureooms/js-partition): partition code bricks for JavaScript - - [@aureooms/js-selection](https://github.com/aureooms/js-selection): selection code bricks for JavaScript ### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript From b7c597886585a8d5f5937df3387282526860cf48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 23:03:43 +0200 Subject: [PATCH 29/48] :books: docs(README): Add js-partition. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ee6afd0..ee9e8df 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ of those projects, ### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript + - [@aureooms/js-partition](https://github.com/aureooms/js-partition): + Partitioning algorithms for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript ### :symbols: Strings From 456dfabaff338b8816649fb4178ddecfc1b0e975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 23:04:06 +0200 Subject: [PATCH 30/48] :books: docs(README): Fix tagline of js-sort. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ee9e8df..599f82e 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ This project is just a playground for any algorithm that doesn't fit in any of those projects, ### :signal_strength: Sorting - - [@aureooms/js-sort](https://github.com/aureooms/js-sort) : sorting code bricks for JavaScript + - [@aureooms/js-sort](https://github.com/aureooms/js-sort): + Sorting algorithms for JavaScript ### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript From 3b6e70a3a8080fcf1cd0a32130e71ecb812ebf8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 23:05:32 +0200 Subject: [PATCH 31/48] :books: docs(README): Fix tagline of js-search. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 599f82e..cd0b2a9 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,8 @@ of those projects, Sorting algorithms for JavaScript ### :flashlight: Searching - - [@aureooms/js-search](https://github.com/aureooms/js-search) : item retrieval code bricks for JavaScript + - [@aureooms/js-search](https://github.com/aureooms/js-search): + Searching algorithms for JavaScript - [@aureooms/js-partition](https://github.com/aureooms/js-partition): Partitioning algorithms for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript From 6d68eec522920dba4be4a9fa940c9b9b42719bf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 21 Oct 2020 23:05:42 +0200 Subject: [PATCH 32/48] :books: docs(README): Fix tagline of js-splitting. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cd0b2a9..d67c6d0 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ of those projects, Searching algorithms for JavaScript - [@aureooms/js-partition](https://github.com/aureooms/js-partition): Partitioning algorithms for JavaScript - - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): splitting code bricks for JavaScript + - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): + Array splitting algorithms for JavaScript ### :symbols: Strings - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript From 4bce9084fceba9ca984e52fc2cea26290e3ac9fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 28 Oct 2020 17:20:40 +0100 Subject: [PATCH 33/48] :books: docs(README): Add GitHub issues badge. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d67c6d0..5921e1b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) [![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) +[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +[![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) == From f784cc380043802c09dbd6197ca57959a0b8131c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Wed, 28 Oct 2020 17:21:15 +0100 Subject: [PATCH 34/48] :books: docs(README): Properly link and attribute header image. --- README.md | 7 ++++++- media/sketch.png | Bin 63659 -> 0 bytes 2 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 media/sketch.png diff --git a/README.md b/README.md index 5921e1b..89ea2ee 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,12 @@ [![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) == - +

+ + +
xkcd.com +

Playground for algorithms in JavaScript. This is a child project of [@aureooms/js-library](https://github.com/aureooms/js-library) diff --git a/media/sketch.png b/media/sketch.png deleted file mode 100644 index 3df646947e93fa59d56d04485bedde7c0d3b7fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63659 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 Date: Sat, 31 Oct 2020 12:34:40 +0100 Subject: [PATCH 35/48] :unamused: chore(README): Link to main branch. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89ea2ee..f1c7c97 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ :rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) -[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/master/LICENSE) +[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/main/LICENSE) [![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) == From c69637de232754c9cacf6488b28f1d562abb2297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Sat, 31 Oct 2020 12:39:11 +0100 Subject: [PATCH 36/48] :books: docs(README): Update header link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1c7c97..e54d564 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -:rocket: [@aureooms/js-algorithms](https://aureooms.github.io/js-algorithms) +:rocket: [@aureooms/js-algorithms](https://github.com/aureooms/js-algorithms#readme) [![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/main/LICENSE) [![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) == From fea43cac5f9c5b87ea727c4406c1122d62983728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Fri, 12 Mar 2021 22:36:44 +0100 Subject: [PATCH 37/48] :sparkles: feat: Add @aureooms/js-topological-sorting. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e54d564..5edd708 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ of those projects, ### :globe_with_meridians: Graph theory - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript + - [@aureooms/js-topological-sorting](https://github.com/aureooms/js-topological-sorting): + Topological sorting algorithms for Javascript - [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): Minimum cut algorithms for JavaScript - [@aureooms/js-maximum-matching](https://github.com/aureooms/js-maximum-matching): From f20c0bd6294824e9438421258dd8c98370c443b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 25 Mar 2021 23:00:06 +0100 Subject: [PATCH 38/48] :books: docs(README): Add some stuff, sprinkle some emojis, shake well. --- README.md | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 5edd708..b2b69f0 100644 --- a/README.md +++ b/README.md @@ -37,24 +37,30 @@ of those projects, - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript - [@aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript -### :triangular_ruler: Computational geometry +### :triangular_ruler: Geometry - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript -### :globe_with_meridians: Graph theory +### :globe_with_meridians: Graphs - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript - - [@aureooms/js-topological-sorting](https://github.com/aureooms/js-topological-sorting): + - :oden: [@aureooms/js-topological-sorting](https://github.com/aureooms/js-topological-sorting): Topological sorting algorithms for Javascript - - [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): + - :haircut_woman: [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): Minimum cut algorithms for JavaScript - - [@aureooms/js-maximum-matching](https://github.com/aureooms/js-maximum-matching): + - :blossom: [@aureooms/js-maximum-matching](https://github.com/aureooms/js-maximum-matching): Maximum matching algorithms for JavaScript ### :1234: Numbers - - [@aureooms/js-integer](https://github.com/aureooms/js-integer) : multi-precision arithmetic code bricks for JavaScript - - [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript - - [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript - - [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript + - :zzz: [@aureooms/js-integer](https://github.com/aureooms/js-integer) : + Integers for JavaScript (ℤ) + - :woman_farmer: [@aureooms/js-rational-field](https://github.com/aureooms/js-rational-field) : Rational field for JavaScript (ℚ) + +#### :symbols: Arithmetic + - :elephant: [@aureooms/js-integer-big-endian](https://github.com/aureooms/js-integer-big-endian): Arbitrary precision arithmetic for integers in big-endian order for JavaScript + - :pizza: [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript + - :mermaid: [@aureooms/js-modular-arithmetic](https://github.com/aureooms/js-modular-arithmetic): Modular arithmetic for JavaScript. + - :globe_with_meridians: [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript + - :wavy_dash: [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript #### :two: :three: :five: :seven: Number theory - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript @@ -75,13 +81,11 @@ of those projects, - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript ### :brain: Hard problems - - [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - - [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : - Metaheuristic algorithms for JavaScript - - [@aureooms/js-oro](https://github.com/aureooms/js-oro) : operations research and optimization algorithm templates for JavaScript - - [@aureooms/js-pfsp-wt](https://github.com/aureooms/js-pfsp-wt) : permutation flow-shop problem (PFSP) with weighted tardiness objective (PFSP-WT) code bricks for JavaScript - - [@aureooms/js-knapsack](https://github.com/aureooms/js-knapsack) : + - :satisfied: [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript + - :school_satchel: [@aureooms/js-knapsack](https://github.com/aureooms/js-knapsack) : Knapsack problem algorithms for JavaScript + - :test_tube: [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : + Metaheuristic algorithms for JavaScript ### :poodle: Miscellaneous - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript From ec46950a1a641719851e4a9c1fba41ef664b3889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 25 Mar 2021 23:08:24 +0100 Subject: [PATCH 39/48] :books: docs(README): Replace js-random by js-pseudo-random. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b2b69f0..c0fa40f 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ of those projects, ### :hocho: Hashing - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript -### :game_die: Pseudo-random generators - - [@aureooms/js-random](https://github.com/aureooms/js-random) : randomness code bricks for JavaScript +### :game_die: Randomness + - [@aureooms/js-pseudo-random](https://github.com/aureooms/js-pseudo-random) : Pseudorandom number generators for JavaScript ### :brain: Hard problems - :satisfied: [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript From f64925ad84274852ded312d9df9716673a950f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Sat, 3 Apr 2021 18:29:05 +0200 Subject: [PATCH 40/48] :books: docs(README): Clean up and restructure. --- README.md | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index c0fa40f..c891c1f 100644 --- a/README.md +++ b/README.md @@ -16,26 +16,30 @@ and the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). -## Description +## :newspaper: Description This project is just a playground for any algorithm that doesn't fit in any of those projects, -### :signal_strength: Sorting - - [@aureooms/js-sort](https://github.com/aureooms/js-sort): - Sorting algorithms for JavaScript - ### :flashlight: Searching - [@aureooms/js-search](https://github.com/aureooms/js-search): Searching algorithms for JavaScript + +### :cake: Partitioning - [@aureooms/js-partition](https://github.com/aureooms/js-partition): Partitioning algorithms for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): Array splitting algorithms for JavaScript +### :signal_strength: Sorting + - [@aureooms/js-sort](https://github.com/aureooms/js-sort): + Sorting algorithms for JavaScript + ### :symbols: Strings - - [@aureooms/js-string](https://github.com/aureooms/js-string) : character sequence code bricks for JavaScript - - [@aureooms/js-nlp](https://github.com/aureooms/js-nlp) : natural language processing code bricks for JavaScript + Nothing yet. + +### :hocho: Hashing + Nothing yet. ### :triangular_ruler: Geometry - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript @@ -63,21 +67,15 @@ of those projects, - :wavy_dash: [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript #### :two: :three: :five: :seven: Number theory - - [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript + - :butterfly: [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript #### :shell: Integer sequences - [@aureooms/js-integer-sequences](https://github.com/aureooms/js-integer-sequences) : Integer sequences for JavaScript - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript -#### :capital_abcd: Matrices - - [@aureooms/js-matrix](https://github.com/aureooms/js-matrix) : matrices code bricks for JavaScript - - [@aureooms/js-hypermatrix](https://github.com/aureooms/js-hypermatrix) : hypermatrices code bricks for JavaScript - -### :hocho: Hashing - - [@aureooms/js-hash](https://github.com/aureooms/js-hash) : hashing algorithms code bricks for JavaScript - ### :game_die: Randomness + - [@aureooms/js-random](https://github.com/aureooms/js-random): Randomness algorithms for JavaScript - [@aureooms/js-pseudo-random](https://github.com/aureooms/js-pseudo-random) : Pseudorandom number generators for JavaScript ### :brain: Hard problems @@ -87,9 +85,12 @@ of those projects, - :test_tube: [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : Metaheuristic algorithms for JavaScript -### :poodle: Miscellaneous +### :left_right_arrow: Sytems of equalities and inequalities - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript - - [@aureooms/js-permutation](https://github.com/aureooms/js-permutation) : permutations code bricks for JavaScript + +### :broom: Combinatorics + - :seat: [@aureooms/js-permutation](https://github.com/aureooms/js-permutation): Permutations library for JavaScript + - :bento: [@aureooms/js-set-partition](https://github.com/aureooms/js-set-partition): Set partition algorithms for Javascript Those packages aim to provide *code bricks* that are as generic as possible. From a05756a238a369b0ea41ffa17fafa09a52077c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Sat, 3 Apr 2021 20:38:34 +0200 Subject: [PATCH 41/48] :books: docs(README): Add merging, selection, and details for sorting. --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index c891c1f..dbfd452 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,39 @@ of those projects, - [@aureooms/js-search](https://github.com/aureooms/js-search): Searching algorithms for JavaScript +### :waning_gibbous_moon: Merging + + - [aureooms/js-merging](https://github.com/aureooms/js-merging): merging for JavaScript + ### :cake: Partitioning - [@aureooms/js-partition](https://github.com/aureooms/js-partition): Partitioning algorithms for JavaScript - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): Array splitting algorithms for JavaScript +### :point_down: Selection + - [aureooms/js-selection](https://github.com/aureooms/js-selection): selection for JavaScript + ### :signal_strength: Sorting - [@aureooms/js-sort](https://github.com/aureooms/js-sort): Sorting algorithms for JavaScript +#### :balance_scale: Comparison sorting + + - :notebook_with_decorative_cover: [aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting for JavaScript + - :leaves: [aureooms/js-heapsort](https://github.com/aureooms/js-heapsort): heapsort for JavaScript + - :rabbit2: [aureooms/js-quicksort](https://github.com/aureooms/js-quicksort): quicksort for JavaScript + - :rewind: [aureooms/js-insertion-sort](https://github.com/aureooms/js-insertion-sort): Insertion sorting algorithms for JavaScript + - :person_fencing: [aureooms/js-merge-insertion-sort](https://github.com/aureooms/js-merge-insertion-sort): Ford-Johnson algorithm for JavaScript + - :dragon: [aureooms/js-mergesort](https://github.com/aureooms/js-mergesort): mergesort for JavaScript + - :musical_score: [aureooms/js-odd-even-mergesort](https://github.com/aureooms/js-odd-even-mergesort): Batcher's odd-even mergesort for JavaScript + +#### :zzz: Integer sorting + + - :oden: [aureooms/js-radix-sort](https://github.com/aureooms/js-radix-sort): Radix sorting algorithms for JavaScript + - [aureooms/js-countingsort](https://github.com/aureooms/js-countingsort): countingsort for JavaScript + - [aureooms/js-bucketsort](https://github.com/aureooms/js-bucketsort): bucketsort for JavaScript + ### :symbols: Strings Nothing yet. From aae20768fbeb04f55bb9aa17a1c6064b6d6e8a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Mon, 26 Apr 2021 13:43:29 +0200 Subject: [PATCH 42/48] :books: docs: Update GitHub pages links --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index c9d63b9..efc624a 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { - "homepage": "https://aureooms.github.io/js-algorithms", + "homepage": "https://make-github-pseudonymous-again.github.io/js-algorithms", "name": "aureooms-js-algorithms", "license": "AGPL-3.0", "description": "playground for algorithmic code bricks in JavaScript", diff --git a/package.json b/package.json index 2956a70..c4e1724 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@aureooms/js-algorithms", "description": "Playground for algorithms in JavaScript", - "homepage": "https://aureooms.github.io/js-algorithms", + "homepage": "https://make-github-pseudonymous-again.github.io/js-algorithms", "main": "js/dist/algorithms.js", "version": "3.0.7", "repository": { From c81bc98463bb074dd1169d46270a0eaed1abd887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Mon, 26 Apr 2021 16:07:36 +0200 Subject: [PATCH 43/48] :unamused: chore: Fix broken links, badges, and dependencies. --- README.md | 90 ++++++++++++++++++++++++++-------------------------- package.json | 4 +-- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index dbfd452..b826f92 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -:rocket: [@aureooms/js-algorithms](https://github.com/aureooms/js-algorithms#readme) -[![License](https://img.shields.io/github/license/aureooms/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/aureooms/js-algorithms/main/LICENSE) -[![GitHub issues](https://img.shields.io/github/issues/aureooms/js-algorithms.svg?style=flat)](https://github.com/aureooms/js-algorithms/issues) +:rocket: [@aureooms/js-algorithms](https://github.com/make-github-pseudonymous-again/js-algorithms#readme) +[![License](https://img.shields.io/github/license/make-github-pseudonymous-again/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/make-github-pseudonymous-again/js-algorithms/main/LICENSE) +[![GitHub issues](https://img.shields.io/github/issues/make-github-pseudonymous-again/js-algorithms.svg?style=flat)](https://github.com/make-github-pseudonymous-again/js-algorithms/issues) ==

@@ -11,9 +11,9 @@

Playground for algorithms in JavaScript. -This is a child project of [@aureooms/js-library](https://github.com/aureooms/js-library) +This is a child project of [@aureooms/js-library](https://github.com/make-github-pseudonymous-again/js-library) and -the twin project of [@aureooms/js-data-structures](https://github.com/aureooms/js-data-structures). +the twin project of [@aureooms/js-data-structures](https://github.com/make-github-pseudonymous-again/js-data-structures). ## :newspaper: Description @@ -22,41 +22,41 @@ This project is just a playground for any algorithm that doesn't fit in any of those projects, ### :flashlight: Searching - - [@aureooms/js-search](https://github.com/aureooms/js-search): + - [@aureooms/js-search](https://github.com/make-github-pseudonymous-again/js-search): Searching algorithms for JavaScript ### :waning_gibbous_moon: Merging - - [aureooms/js-merging](https://github.com/aureooms/js-merging): merging for JavaScript + - [aureooms/js-merging](https://github.com/make-github-pseudonymous-again/js-merging): merging for JavaScript ### :cake: Partitioning - - [@aureooms/js-partition](https://github.com/aureooms/js-partition): + - [@aureooms/js-partition](https://github.com/make-github-pseudonymous-again/js-partition): Partitioning algorithms for JavaScript - - [@aureooms/js-splitting](https://github.com/aureooms/js-splitting): + - [@aureooms/js-splitting](https://github.com/make-github-pseudonymous-again/js-splitting): Array splitting algorithms for JavaScript ### :point_down: Selection - - [aureooms/js-selection](https://github.com/aureooms/js-selection): selection for JavaScript + - [aureooms/js-selection](https://github.com/make-github-pseudonymous-again/js-selection): selection for JavaScript ### :signal_strength: Sorting - - [@aureooms/js-sort](https://github.com/aureooms/js-sort): + - [@aureooms/js-sort](https://github.com/make-github-pseudonymous-again/js-sort): Sorting algorithms for JavaScript #### :balance_scale: Comparison sorting - - :notebook_with_decorative_cover: [aureooms/js-in-situ-sort-spec](https://github.com/aureooms/js-in-situ-sort-spec): in place sorting for JavaScript - - :leaves: [aureooms/js-heapsort](https://github.com/aureooms/js-heapsort): heapsort for JavaScript - - :rabbit2: [aureooms/js-quicksort](https://github.com/aureooms/js-quicksort): quicksort for JavaScript - - :rewind: [aureooms/js-insertion-sort](https://github.com/aureooms/js-insertion-sort): Insertion sorting algorithms for JavaScript - - :person_fencing: [aureooms/js-merge-insertion-sort](https://github.com/aureooms/js-merge-insertion-sort): Ford-Johnson algorithm for JavaScript - - :dragon: [aureooms/js-mergesort](https://github.com/aureooms/js-mergesort): mergesort for JavaScript - - :musical_score: [aureooms/js-odd-even-mergesort](https://github.com/aureooms/js-odd-even-mergesort): Batcher's odd-even mergesort for JavaScript + - :notebook_with_decorative_cover: [aureooms/js-in-situ-sort-spec](https://github.com/make-github-pseudonymous-again/js-in-situ-sort-spec): in place sorting for JavaScript + - :leaves: [aureooms/js-heapsort](https://github.com/make-github-pseudonymous-again/js-heapsort): heapsort for JavaScript + - :rabbit2: [aureooms/js-quicksort](https://github.com/make-github-pseudonymous-again/js-quicksort): quicksort for JavaScript + - :rewind: [aureooms/js-insertion-sort](https://github.com/make-github-pseudonymous-again/js-insertion-sort): Insertion sorting algorithms for JavaScript + - :person_fencing: [aureooms/js-merge-insertion-sort](https://github.com/make-github-pseudonymous-again/js-merge-insertion-sort): Ford-Johnson algorithm for JavaScript + - :dragon: [aureooms/js-mergesort](https://github.com/make-github-pseudonymous-again/js-mergesort): mergesort for JavaScript + - :musical_score: [aureooms/js-odd-even-mergesort](https://github.com/make-github-pseudonymous-again/js-odd-even-mergesort): Batcher's odd-even mergesort for JavaScript #### :zzz: Integer sorting - - :oden: [aureooms/js-radix-sort](https://github.com/aureooms/js-radix-sort): Radix sorting algorithms for JavaScript - - [aureooms/js-countingsort](https://github.com/aureooms/js-countingsort): countingsort for JavaScript - - [aureooms/js-bucketsort](https://github.com/aureooms/js-bucketsort): bucketsort for JavaScript + - :oden: [aureooms/js-radix-sort](https://github.com/make-github-pseudonymous-again/js-radix-sort): Radix sorting algorithms for JavaScript + - [aureooms/js-countingsort](https://github.com/make-github-pseudonymous-again/js-countingsort): countingsort for JavaScript + - [aureooms/js-bucketsort](https://github.com/make-github-pseudonymous-again/js-bucketsort): bucketsort for JavaScript ### :symbols: Strings Nothing yet. @@ -65,55 +65,55 @@ of those projects, Nothing yet. ### :triangular_ruler: Geometry - - [@aureooms/js-cg](https://github.com/aureooms/js-cg) : computational geometry code bricks for JavaScript + - [@aureooms/js-cg](https://github.com/make-github-pseudonymous-again/js-cg) : computational geometry code bricks for JavaScript ### :globe_with_meridians: Graphs - - [@aureooms/js-gn](https://github.com/aureooms/js-gn) : graphs and networks code bricks for JavaScript - - :oden: [@aureooms/js-topological-sorting](https://github.com/aureooms/js-topological-sorting): + - [@aureooms/js-gn](https://github.com/make-github-pseudonymous-again/js-gn) : graphs and networks code bricks for JavaScript + - :oden: [@aureooms/js-topological-sorting](https://github.com/make-github-pseudonymous-again/js-topological-sorting): Topological sorting algorithms for Javascript - - :haircut_woman: [@aureooms/js-mincut](https://github.com/aureooms/js-mincut): + - :haircut_woman: [@aureooms/js-mincut](https://github.com/make-github-pseudonymous-again/js-mincut): Minimum cut algorithms for JavaScript - - :blossom: [@aureooms/js-maximum-matching](https://github.com/aureooms/js-maximum-matching): + - :blossom: [@aureooms/js-maximum-matching](https://github.com/make-github-pseudonymous-again/js-maximum-matching): Maximum matching algorithms for JavaScript ### :1234: Numbers - - :zzz: [@aureooms/js-integer](https://github.com/aureooms/js-integer) : + - :zzz: [@aureooms/js-integer](https://github.com/make-github-pseudonymous-again/js-integer) : Integers for JavaScript (ℤ) - - :woman_farmer: [@aureooms/js-rational-field](https://github.com/aureooms/js-rational-field) : Rational field for JavaScript (ℚ) + - :woman_farmer: [@aureooms/js-rational-field](https://github.com/make-github-pseudonymous-again/js-rational-field) : Rational field for JavaScript (ℚ) #### :symbols: Arithmetic - - :elephant: [@aureooms/js-integer-big-endian](https://github.com/aureooms/js-integer-big-endian): Arbitrary precision arithmetic for integers in big-endian order for JavaScript - - :pizza: [@aureooms/js-rational](https://github.com/aureooms/js-rational) : rational numbers code bricks for JavaScript - - :mermaid: [@aureooms/js-modular-arithmetic](https://github.com/aureooms/js-modular-arithmetic): Modular arithmetic for JavaScript. - - :globe_with_meridians: [@aureooms/js-complex](https://github.com/aureooms/js-complex) : complex numbers code bricks for JavaScript - - :wavy_dash: [@aureooms/js-polynomial](https://github.com/aureooms/js-polynomial) : sparse and dense polynomials code bricks for JavaScript + - :elephant: [@aureooms/js-integer-big-endian](https://github.com/make-github-pseudonymous-again/js-integer-big-endian): Arbitrary precision arithmetic for integers in big-endian order for JavaScript + - :pizza: [@aureooms/js-rational](https://github.com/make-github-pseudonymous-again/js-rational) : rational numbers code bricks for JavaScript + - :mermaid: [@aureooms/js-modular-arithmetic](https://github.com/make-github-pseudonymous-again/js-modular-arithmetic): Modular arithmetic for JavaScript. + - :globe_with_meridians: [@aureooms/js-complex](https://github.com/make-github-pseudonymous-again/js-complex) : complex numbers code bricks for JavaScript + - :wavy_dash: [@aureooms/js-polynomial](https://github.com/make-github-pseudonymous-again/js-polynomial) : sparse and dense polynomials code bricks for JavaScript #### :two: :three: :five: :seven: Number theory - - :butterfly: [@aureooms/js-fft](https://github.com/aureooms/js-fft) : Fast Fourier transform algorithms for JavaScript - - [@aureooms/js-prime](https://github.com/aureooms/js-prime) : Prime numbers for JavaScript + - :butterfly: [@aureooms/js-fft](https://github.com/make-github-pseudonymous-again/js-fft) : Fast Fourier transform algorithms for JavaScript + - [@aureooms/js-prime](https://github.com/make-github-pseudonymous-again/js-prime) : Prime numbers for JavaScript #### :shell: Integer sequences - - [@aureooms/js-integer-sequences](https://github.com/aureooms/js-integer-sequences) : Integer sequences for JavaScript - - [@aureooms/js-fibonacci](https://github.com/aureooms/js-fibonacci) : Fibonacci numbers for JavaScript + - [@aureooms/js-integer-sequences](https://github.com/make-github-pseudonymous-again/js-integer-sequences) : Integer sequences for JavaScript + - [@aureooms/js-fibonacci](https://github.com/make-github-pseudonymous-again/js-fibonacci) : Fibonacci numbers for JavaScript ### :game_die: Randomness - - [@aureooms/js-random](https://github.com/aureooms/js-random): Randomness algorithms for JavaScript - - [@aureooms/js-pseudo-random](https://github.com/aureooms/js-pseudo-random) : Pseudorandom number generators for JavaScript + - [@aureooms/js-random](https://github.com/make-github-pseudonymous-again/js-random): Randomness algorithms for JavaScript + - [@aureooms/js-pseudo-random](https://github.com/make-github-pseudonymous-again/js-pseudo-random) : Pseudorandom number generators for JavaScript ### :brain: Hard problems - - :satisfied: [@aureooms/js-sat](https://github.com/aureooms/js-sat) : Boolean formula satisfiability algorithms for Javascript - - :school_satchel: [@aureooms/js-knapsack](https://github.com/aureooms/js-knapsack) : + - :satisfied: [@aureooms/js-sat](https://github.com/make-github-pseudonymous-again/js-sat) : Boolean formula satisfiability algorithms for Javascript + - :school_satchel: [@aureooms/js-knapsack](https://github.com/make-github-pseudonymous-again/js-knapsack) : Knapsack problem algorithms for JavaScript - - :test_tube: [@aureooms/js-metaheuristics](https://github.com/aureooms/js-metaheuristics) : + - :test_tube: [@aureooms/js-metaheuristics](https://github.com/make-github-pseudonymous-again/js-metaheuristics) : Metaheuristic algorithms for JavaScript ### :left_right_arrow: Sytems of equalities and inequalities - - [@aureooms/js-equation](https://github.com/aureooms/js-equation) : equations system code bricks for JavaScript + - [@aureooms/js-equation](https://github.com/make-github-pseudonymous-again/js-equation) : equations system code bricks for JavaScript ### :broom: Combinatorics - - :seat: [@aureooms/js-permutation](https://github.com/aureooms/js-permutation): Permutations library for JavaScript - - :bento: [@aureooms/js-set-partition](https://github.com/aureooms/js-set-partition): Set partition algorithms for Javascript + - :seat: [@aureooms/js-permutation](https://github.com/make-github-pseudonymous-again/js-permutation): Permutations library for JavaScript + - :bento: [@aureooms/js-set-partition](https://github.com/make-github-pseudonymous-again/js-set-partition): Set partition algorithms for Javascript Those packages aim to provide *code bricks* that are as generic as possible. diff --git a/package.json b/package.json index c4e1724..8cba910 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "js/dist/algorithms.js", "version": "3.0.7", "repository": { - "url": "https://github.com/aureooms/js-algorithms.git", + "url": "https://github.com/make-github-pseudonymous-again/js-algorithms.git", "type": "git" }, "keywords": [ @@ -37,7 +37,7 @@ "aureooms-node-package": "^6.0.1" }, "bugs": { - "url": "https://github.com/aureooms/js-algorithms/issues" + "url": "https://github.com/make-github-pseudonymous-again/js-algorithms/issues" }, "dependencies": {}, "license": "AGPL-3.0", From 2de516c17930874c63244d61004113271aa7945e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Mon, 26 Apr 2021 16:15:52 +0200 Subject: [PATCH 44/48] :books: docs(README): Update title. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b826f92..5896dab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -:rocket: [@aureooms/js-algorithms](https://github.com/make-github-pseudonymous-again/js-algorithms#readme) +:rocket: [Algorithms](https://github.com/make-github-pseudonymous-again/js-algorithms#readme) [![License](https://img.shields.io/github/license/make-github-pseudonymous-again/js-algorithms.svg?style=flat)](https://raw.githubusercontent.com/make-github-pseudonymous-again/js-algorithms/main/LICENSE) [![GitHub issues](https://img.shields.io/github/issues/make-github-pseudonymous-again/js-algorithms.svg?style=flat)](https://github.com/make-github-pseudonymous-again/js-algorithms/issues) == From 726de57f7e450297c72df5b00940baabae4f44d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Tue, 27 Apr 2021 22:32:31 +0200 Subject: [PATCH 45/48] :books: docs(README): Update some links. --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 5896dab..fb0b10a 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@

Playground for algorithms in JavaScript. -This is a child project of [@aureooms/js-library](https://github.com/make-github-pseudonymous-again/js-library) +This is a child project of [@make-github-pseudonymous-again/js-library](https://github.com/make-github-pseudonymous-again/js-library) and -the twin project of [@aureooms/js-data-structures](https://github.com/make-github-pseudonymous-again/js-data-structures). +the twin project of [@make-github-pseudonymous-again/js-data-structures](https://github.com/make-github-pseudonymous-again/js-data-structures). ## :newspaper: Description @@ -45,16 +45,16 @@ of those projects, #### :balance_scale: Comparison sorting - :notebook_with_decorative_cover: [aureooms/js-in-situ-sort-spec](https://github.com/make-github-pseudonymous-again/js-in-situ-sort-spec): in place sorting for JavaScript - - :leaves: [aureooms/js-heapsort](https://github.com/make-github-pseudonymous-again/js-heapsort): heapsort for JavaScript - - :rabbit2: [aureooms/js-quicksort](https://github.com/make-github-pseudonymous-again/js-quicksort): quicksort for JavaScript - - :rewind: [aureooms/js-insertion-sort](https://github.com/make-github-pseudonymous-again/js-insertion-sort): Insertion sorting algorithms for JavaScript - - :person_fencing: [aureooms/js-merge-insertion-sort](https://github.com/make-github-pseudonymous-again/js-merge-insertion-sort): Ford-Johnson algorithm for JavaScript - - :dragon: [aureooms/js-mergesort](https://github.com/make-github-pseudonymous-again/js-mergesort): mergesort for JavaScript - - :musical_score: [aureooms/js-odd-even-mergesort](https://github.com/make-github-pseudonymous-again/js-odd-even-mergesort): Batcher's odd-even mergesort for JavaScript + - :leaves: [@sorting/heap-sort](https://github.com/data-structures-and-algorithms/heap-sort): Heapsort for JavaScript + - :rabbit2: [@sorting/quick-sort](https://github.com/data-structures-and-algorithms/quick-sort): Quicksort for JavaScript + - :rewind: [@sorting/insertion-sort](https://github.com/data-structures-and-algorithms/insertion-sort): Insertion sorting algorithms for JavaScript + - :person_fencing: [@sorting/merge-insertion-sort](https://github.com/data-structures-and-algorithms/merge-insertion-sort): Ford-Johnson algorithm for JavaScript + - :dragon: [@sorting/merge-sort](https://github.com/data-structures-and-algorithms/merge-sort): Mergesort for JavaScript + - :musical_score: [@sorting/odd-even-merge-sort](https://github.com/data-structures-and-algorithms/odd-even-merge-sort): Batcher's odd-even mergesort for JavaScript #### :zzz: Integer sorting - - :oden: [aureooms/js-radix-sort](https://github.com/make-github-pseudonymous-again/js-radix-sort): Radix sorting algorithms for JavaScript + - :oden: [@sorting/radix-sort](https://github.com/data-structures-and-algorithms/radix-sort): Radix sorting algorithms for JavaScript - [aureooms/js-countingsort](https://github.com/make-github-pseudonymous-again/js-countingsort): countingsort for JavaScript - [aureooms/js-bucketsort](https://github.com/make-github-pseudonymous-again/js-bucketsort): bucketsort for JavaScript @@ -69,11 +69,11 @@ of those projects, ### :globe_with_meridians: Graphs - [@aureooms/js-gn](https://github.com/make-github-pseudonymous-again/js-gn) : graphs and networks code bricks for JavaScript - - :oden: [@aureooms/js-topological-sorting](https://github.com/make-github-pseudonymous-again/js-topological-sorting): + - :oden: [@graph-algorithm/topological-sorting](https://github.com/graph-algorithm/topological-sorting): Topological sorting algorithms for Javascript - - :haircut_woman: [@aureooms/js-mincut](https://github.com/make-github-pseudonymous-again/js-mincut): + - :haircut_woman: [@graph-algorithm/minimum-cut](https://github.com/graph-algorithm/minimum-cut): Minimum cut algorithms for JavaScript - - :blossom: [@aureooms/js-maximum-matching](https://github.com/make-github-pseudonymous-again/js-maximum-matching): + - :blossom: [@graph-algorithm/maximum-matching](https://github.com/graph-algorithm/maximum-matching): Maximum matching algorithms for JavaScript ### :1234: Numbers From ae238628f7a0e9154464f57ad2cccc60df6d240f Mon Sep 17 00:00:00 2001 From: make-github-pseudonymous-again <5165674+make-github-pseudonymous-again@users.noreply.github.com> Date: Thu, 29 Jul 2021 10:12:04 +0200 Subject: [PATCH 46/48] :books: docs: Update links. --- README.md | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index fb0b10a..b60770c 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@

Playground for algorithms in JavaScript. -This is a child project of [@make-github-pseudonymous-again/js-library](https://github.com/make-github-pseudonymous-again/js-library) +This is a child project of [js-library](https://github.com/make-github-pseudonymous-again/js-library) and -the twin project of [@make-github-pseudonymous-again/js-data-structures](https://github.com/make-github-pseudonymous-again/js-data-structures). +the twin project of [js-data-structures](https://github.com/make-github-pseudonymous-again/js-data-structures). ## :newspaper: Description @@ -44,17 +44,17 @@ of those projects, #### :balance_scale: Comparison sorting - - :notebook_with_decorative_cover: [aureooms/js-in-situ-sort-spec](https://github.com/make-github-pseudonymous-again/js-in-situ-sort-spec): in place sorting for JavaScript - - :leaves: [@sorting/heap-sort](https://github.com/data-structures-and-algorithms/heap-sort): Heapsort for JavaScript - - :rabbit2: [@sorting/quick-sort](https://github.com/data-structures-and-algorithms/quick-sort): Quicksort for JavaScript - - :rewind: [@sorting/insertion-sort](https://github.com/data-structures-and-algorithms/insertion-sort): Insertion sorting algorithms for JavaScript - - :person_fencing: [@sorting/merge-insertion-sort](https://github.com/data-structures-and-algorithms/merge-insertion-sort): Ford-Johnson algorithm for JavaScript - - :dragon: [@sorting/merge-sort](https://github.com/data-structures-and-algorithms/merge-sort): Mergesort for JavaScript - - :musical_score: [@sorting/odd-even-merge-sort](https://github.com/data-structures-and-algorithms/odd-even-merge-sort): Batcher's odd-even mergesort for JavaScript + - :notebook_with_decorative_cover: [@comparison-sorting/specification](https://github.com/comparison-sorting/specification): Comparison sorting specification for JavaScript + - :leaves: [@comparison-sorting/heap-sort](https://github.com/comparison-sorting/heap-sort): Heapsort for JavaScript + - :rabbit2: [@comparison-sorting/quick-sort](https://github.com/comparison-sorting/quick-sort): Quicksort for JavaScript + - :rewind: [@comparison-sorting/insertion-sort](https://github.com/comparison-sorting/insertion-sort): Insertion sorting algorithms for JavaScript + - :person_fencing: [@comparison-sorting/merge-insertion-sort](https://github.com/comparison-sorting/merge-insertion-sort): Ford-Johnson algorithm for JavaScript + - :dragon: [@comparison-sorting/merge-sort](https://github.com/comparison-sorting/merge-sort): Mergesort for JavaScript + - :musical_score: [@comparison-sorting/odd-even-merge-sort](https://github.com/comparison-sorting/odd-even-merge-sort): Batcher's odd-even mergesort for JavaScript #### :zzz: Integer sorting - - :oden: [@sorting/radix-sort](https://github.com/data-structures-and-algorithms/radix-sort): Radix sorting algorithms for JavaScript + - :oden: [@integer-sorting/radix-sort](https://github.com/integer-sorting/radix-sort): Radix sorting algorithms for JavaScript - [aureooms/js-countingsort](https://github.com/make-github-pseudonymous-again/js-countingsort): countingsort for JavaScript - [aureooms/js-bucketsort](https://github.com/make-github-pseudonymous-again/js-bucketsort): bucketsort for JavaScript @@ -98,8 +98,8 @@ of those projects, - [@aureooms/js-fibonacci](https://github.com/make-github-pseudonymous-again/js-fibonacci) : Fibonacci numbers for JavaScript ### :game_die: Randomness - - [@aureooms/js-random](https://github.com/make-github-pseudonymous-again/js-random): Randomness algorithms for JavaScript - - [@aureooms/js-pseudo-random](https://github.com/make-github-pseudonymous-again/js-pseudo-random) : Pseudorandom number generators for JavaScript + - [@randomized/random](https://github.com/randomized-algorithm/random): Randomness algorithms for JavaScript + - [@entropy-source/pseudo-random](https://github.com/entropy-source/pseudo-random) : Pseudorandom number generators for JavaScript ### :brain: Hard problems - :satisfied: [@aureooms/js-sat](https://github.com/make-github-pseudonymous-again/js-sat) : Boolean formula satisfiability algorithms for Javascript @@ -112,8 +112,12 @@ of those projects, - [@aureooms/js-equation](https://github.com/make-github-pseudonymous-again/js-equation) : equations system code bricks for JavaScript ### :broom: Combinatorics - - :seat: [@aureooms/js-permutation](https://github.com/make-github-pseudonymous-again/js-permutation): Permutations library for JavaScript - - :bento: [@aureooms/js-set-partition](https://github.com/make-github-pseudonymous-again/js-set-partition): Set partition algorithms for Javascript + - :exclamation: [@combinatorics/factorial](https://github.com/computational-combinatorics/factorial): Factorial function for JavaScript + - :seat: [@combinatorics/permutation](https://github.com/computational-combinatorics/permutation): Permutations library for JavaScript + - :zebra: [@combinatorics/n-permutations](https://github.com/computational-combinatorics/n-permutations): Set n-permutations for JavaScript + - :hippopotamus: [@combinatorics/n-combinations](https://github.com/computational-combinatorics/n-combinations): Set n-combinations for JavaScript + - :rhinoceros: [@combinatorics/n-multi-combinations](https://github.com/computational-combinatorics/n-multi-combinations): Set n-multicombinations for JavaScript + - :bento: [@combinatorics/set-partition](https://github.com/computational-combinatorics/set-partition): Set partition algorithms for Javascript Those packages aim to provide *code bricks* that are as generic as possible. From 70fdf8573be8ff97288b71523ab7b6b7d877cb82 Mon Sep 17 00:00:00 2001 From: make-github-pseudonymous-again <5165674+make-github-pseudonymous-again@users.noreply.github.com> Date: Mon, 16 Aug 2021 19:45:31 +0200 Subject: [PATCH 47/48] :books: docs: Fix typo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b60770c..978ff39 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ of those projects, - :seat: [@combinatorics/permutation](https://github.com/computational-combinatorics/permutation): Permutations library for JavaScript - :zebra: [@combinatorics/n-permutations](https://github.com/computational-combinatorics/n-permutations): Set n-permutations for JavaScript - :hippopotamus: [@combinatorics/n-combinations](https://github.com/computational-combinatorics/n-combinations): Set n-combinations for JavaScript - - :rhinoceros: [@combinatorics/n-multi-combinations](https://github.com/computational-combinatorics/n-multi-combinations): Set n-multicombinations for JavaScript + - :rhinoceros: [@combinatorics/n-multicombinations](https://github.com/computational-combinatorics/n-multicombinations): Set n-multicombinations for JavaScript - :bento: [@combinatorics/set-partition](https://github.com/computational-combinatorics/set-partition): Set partition algorithms for Javascript From 0a07ff53337e9247ff802bbd08b7100917d00feb Mon Sep 17 00:00:00 2001 From: make-github-pseudonymous-again <5165674+make-github-pseudonymous-again@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:21:27 +0200 Subject: [PATCH 48/48] :boom: cleaning!: Remove float comparison code. BREAKING CHANGE: The code is gone. --- js/src/epsilon/absepsilon.js | 18 ----------- js/src/epsilon/relepsilon.js | 29 ----------------- test/js/src/epsilon.js | 62 ------------------------------------ 3 files changed, 109 deletions(-) delete mode 100644 js/src/epsilon/absepsilon.js delete mode 100644 js/src/epsilon/relepsilon.js delete mode 100644 test/js/src/epsilon.js diff --git a/js/src/epsilon/absepsilon.js b/js/src/epsilon/absepsilon.js deleted file mode 100644 index e57fc03..0000000 --- a/js/src/epsilon/absepsilon.js +++ /dev/null @@ -1,18 +0,0 @@ - - -var __absepsilon__ = function ( epsilon ) { - - - return function ( a, b ) { - - var r; - - r = a - b; - - return r < -epsilon ? -1 : r > epsilon ? 1 : 0; - - }; - -}; - -exports.__absepsilon__ = __absepsilon__; diff --git a/js/src/epsilon/relepsilon.js b/js/src/epsilon/relepsilon.js deleted file mode 100644 index b8cbad3..0000000 --- a/js/src/epsilon/relepsilon.js +++ /dev/null @@ -1,29 +0,0 @@ - -var __relepsilon__ = function ( epsilon ) { - - - return function ( a, b ) { - - var r; - - if ( b === 0 ) { - return a; - } - - else if ( a === 0 ) { - return -b; - } - - else { - - r = a / b - 1; - - return r < -epsilon ? -1 : r > epsilon ? 1 : 0; - - } - - }; - -}; - -exports.__relepsilon__ = __relepsilon__; diff --git a/test/js/src/epsilon.js b/test/js/src/epsilon.js deleted file mode 100644 index 41fd692..0000000 --- a/test/js/src/epsilon.js +++ /dev/null @@ -1,62 +0,0 @@ - - -test ( "epsilon", function ( ) { - - var absepsilon, relepsilon, epsilon; - - epsilon = Math.pow( 2, -10 ); - morethanepsilon = epsilon + epsilon / 128; - - absepsilon = algorithms.__absepsilon__( epsilon ); - relepsilon = algorithms.__relepsilon__( epsilon ); - - - ok( absepsilon( 0, 0 ) === 0, " absolute 0 === 0 " ); - ok( relepsilon( 0, 0 ) === 0, " relative 0 === 0 " ); - - - ok( absepsilon( epsilon, 0 ) === 0, " absolute e === 0 " ); - ok( absepsilon( -epsilon, 0 ) === 0, " absolute -e === 0 " ); - ok( absepsilon( 0, epsilon ) === 0, " absolute 0 === e " ); - ok( absepsilon( 0, -epsilon ) === 0, " absolute 0 === -e " ); - - ok( relepsilon( epsilon, 0 ) > 0, " relative e > 0 " ); - ok( relepsilon( -epsilon, 0 ) < 0, " relative -e < 0 " ); - ok( relepsilon( 0, epsilon ) < 0, " relative 0 < e " ); - ok( relepsilon( 0, -epsilon ) > 0, " relative 0 > -e " ); - - - ok( absepsilon( morethanepsilon, 0 ) > 0, " absolute e' > 0 " ); - ok( absepsilon( -morethanepsilon, 0 ) < 0, " absolute -e' < 0 " ); - ok( absepsilon( 0, morethanepsilon ) < 0, " absolute 0 < e' " ); - ok( absepsilon( 0, -morethanepsilon ) > 0, " absolute 0 < -e' " ); - - ok( relepsilon( morethanepsilon, 0 ) > 0, " relative e' > 0 " ); - ok( relepsilon( -morethanepsilon, 0 ) < 0, " relative -e' < 0 " ); - ok( relepsilon( 0, morethanepsilon ) < 0, " relative 0 < e' " ); - ok( relepsilon( 0, -morethanepsilon ) > 0, " relative 0 > -e' " ); - - - ok( absepsilon( 1 + epsilon, 1 ) === 0, " absolute 1 + e === 1 " ); - ok( absepsilon( 1 - epsilon, 1 ) === 0, " absolute 1 - e === 1 " ); - ok( absepsilon( 1, 1 + epsilon ) === 0, " absolute 1 === 1 + e " ); - ok( absepsilon( 1, 1 - epsilon ) === 0, " absolute 1 === 1 - e " ); - - ok( relepsilon( 1 * ( 1 + epsilon ), 1 ) === 0, " relative 1 * ( 1 + e ) === 1 " ); - ok( relepsilon( 1 / ( 1 + epsilon ), 1 ) === 0, " relative 1 / ( 1 + e ) === 1 " ); - ok( relepsilon( 1, 1 * ( 1 + epsilon ) ) === 0, " relative 1 === 1 * ( 1 + e ) " ); - ok( relepsilon( 1, 1 / ( 1 + epsilon ) ) === 0, " relative 1 === 1 / ( 1 + e ) " ); - - ok( absepsilon( 1 + morethanepsilon, 1 ) > 0, " absolute 1 + e' > 1 " ); - ok( absepsilon( 1 - morethanepsilon, 1 ) < 0, " absolute 1 - e' < 1 " ); - ok( absepsilon( 1, 1 + morethanepsilon ) < 0, " absolute 1 < 1 + e' " ); - ok( absepsilon( 1, 1 - morethanepsilon ) > 0, " absolute 1 > 1 - e' " ); - - ok( relepsilon( 1 * ( 1 + morethanepsilon ), 1 ) > 0, " relative 1 * ( 1 + e' ) > 1 " ); - ok( relepsilon( 1 / ( 1 + morethanepsilon ), 1 ) < 0, " relative 1 / ( 1 + e' ) < 1 " ); - ok( relepsilon( 1, 1 * ( 1 + morethanepsilon ) ) < 0, " relative 1 < 1 * ( 1 + e' ) " ); - ok( relepsilon( 1, 1 / ( 1 + morethanepsilon ) ) > 0, " relative 1 > 1 / ( 1 + e' ) " ); - - - -} );