@combinatorics/n-combinations
Version:
Set n-combinations for JavaScript
1 lines • 2.19 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/_combinations.js","../src/combinations.js"],"sourcesContent":["import {list} from '@iterable-iterator/list';\nimport {forwardRangeIterator} from '@iterable-iterator/range';\n\n/**\n * Yields all k-subsets of {0, 1, ..., n-1}.\n *\n * @param {number} n\n * @param {number} k\n * @returns {IterableIterator<number[]>}\n */\nexport default function* _combinations(n, k) {\n\tif (k > n) return;\n\n\tconst indices = list(forwardRangeIterator(0, k, 1));\n\n\tyield indices;\n\n\twhile (true) {\n\t\tlet i = k - 1;\n\n\t\t// eslint-disable-next-line no-constant-condition\n\t\twhile (true) {\n\t\t\tif (i < 0) return;\n\n\t\t\tif (indices[i] !== i + n - k) {\n\t\t\t\tlet pivot = ++indices[i];\n\n\t\t\t\tfor (++i; i < k; ++i) indices[i] = ++pivot;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t--i;\n\t\t}\n\n\t\tyield indices;\n\t}\n}\n","import {list} from '@iterable-iterator/list';\nimport {map, pick} from '@iterable-iterator/map';\n\nimport _combinations from './_combinations.js';\n\n/**\n * Yields all combinations of each possible choice of <code>r</code> elements\n * of the input iterable.\n *\n * @example\n * // AB AC AD BC BD CD\n * combinations('ABCD', 2)\n *\n * @example\n * // 012 013 023 123\n * combinations(range(4), 3)\n *\n * @param {Iterable} iterable - The input iterable.\n * @param {number} r - The size of the combinations to generate.\n * @returns {IterableIterator<Array>}\n */\nconst combinations = (iterable, r) => {\n\tconst pool = list(iterable);\n\treturn map(\n\t\t(indices) => list(pick(pool, indices)),\n\t\t_combinations(pool.length, r),\n\t);\n};\n\nexport default combinations;\n"],"names":["_combinations","n","k","indices","list","forwardRangeIterator","i","pivot","_context","iterable","r","pool","map","pick","length"],"mappings":"6IAUyBA,YAAAA,EAAcC,EAAGC,iGACrCA,EAAID,oDAIR,OAFME,EAAUC,OAAKC,uBAAqB,EAAGH,EAAG,aAE1CC,EALQ,OAQTG,EAAIJ,EAAI,cAIPI,EAAI,yDAEJH,EAAQG,KAAOA,EAAIL,EAAIC,mBAG1B,IAFIK,IAAUJ,EAAQG,KAEfA,EAAGA,EAAIJ,IAAKI,EAAGH,EAAQG,KAAOC,EAjB1B,sCAsBVD,EAtBUE,uBAyBb,iBAAML,EAzBO,2GCWM,SAACM,EAAUC,GAC/B,IAAMC,EAAOP,OAAKK,GAClB,OAAOG,MACN,SAACT,UAAYC,OAAKS,OAAKF,EAAMR,KAC7BH,EAAcW,EAAKG,OAAQJ"}