From 3bf6ad2285abfca649580f0fb7a132a30f2433fc Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 8 Sep 2021 14:57:04 -0400 Subject: =?UTF-8?q?Add=20=E2=80=A2rand.Subset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/bqn.js | 17 ++++++++++++----- 1 file 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 { + 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 = { -- cgit v1.2.3