aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-09-08 14:57:04 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-09-08 14:57:04 -0400
commit3bf6ad2285abfca649580f0fb7a132a30f2433fc (patch)
tree1b894de66fab40e094f1055004ad09d68728825f /docs
parent42fc243d720d95a11d38ab9cd4ae2eb34d37b3b2 (diff)
Add •rand.Subset
Diffstat (limited to 'docs')
-rw-r--r--docs/bqn.js17
1 files changed, 12 insertions, 5 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index 88492d59..c294878d 100644
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -573,19 +573,26 @@ let rand = (() => {
let r = x ? (()=>randnat(x)) : Math.random;
return has(w) ? list(Array(w).fill().map(r)) : r();
};
- let deal = (x,w) => {
- reqnat("Deal: 𝕩", x);
+ let iota = x => Array(x).fill().map((_,i)=>i);
+ let deal_err = e => (x,w) => {
+ reqnat(e+": 𝕩", x);
if (!has(w)) w=x; else {
- reqnat("Deal: 𝕨", w); if (w>x) throw Error("•rand.Deal: 𝕨 must be less than or equal to 𝕩");
+ reqnat(e+": 𝕨", w); if (w>x) throw Error("•rand."+e+": 𝕨 must be less than or equal to 𝕩");
}
- let r = Array(x).fill().map((_,i)=>i);
+ let r = iota(x);
for (let i=0; i<w; i++) {
let j = i + randnat(x-i);
let t=r[i]; r[i]=r[j]; r[j]=t;
}
r.length = w; return list(r);
};
- return makens(["Range", "Deal"], [range, deal]);
+ let deal = deal_err("Deal");
+ let subset = (x,w) => {
+ reqnat("Subset: 𝕩", x);
+ if (!has(w)) return list(iota(x).filter(_=>Math.random()<0.5));
+ return deal_err("Subset")(x,w).sort();
+ };
+ return makens(["range", "deal", "subset"], [range, deal, subset]);
})();
let sysvals = {