@hugoalh/setation
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

Setation (NodeJS)

License GitHub Repository GitHub Stars GitHub Contributors GitHub Issues GitHub Pull Requests GitHub Discussions CodeFactor Grade

Releases Latest (GitHub Latest Release Date) Pre (GitHub Latest Pre-Release Date)
GitHub GitHub Total Downloads GitHub Latest Release Version GitHub Latest Pre-Release Version
NPM NPM Total Downloads NPM Latest Release Version NPM Latest Pre-Release Version

📝 Description

A NodeJS module to list permutations and combinations from a set.

📚 Documentation

Getting Started

  • NodeJS ^ v12.20.0 || ^ v14.15.0 || >= v16.13.0
npm install @hugoalh/setation
/* Either */
import { ... } from "@hugoalh/setation";// Named Import
import * as setation from "@hugoalh/setation";// Namespace Import

API

Generator Function

  • combination<T>(set: T[] | Set<T>, size: number | number[]): Generator<T[], void, unknown>;
    combination<T>(set: T[] | Set<T>, sizeMinimum: number, sizeMaximum: number): Generator<T[], void, unknown>;
    combination<T>(set: T[] | Set<T>, options: CombinationOptions = {}): Generator<T[], void, unknown>;
  • /* >= v1.2.0 */
    combinationMatrix<V>(set: { [x: string]: V | V[]; } | Map<string, V | V[]>): Generator<{ [x: string]: V; }, void, unknown>;
  • permutation<T>(set: T[] | Set<T>, size: number | number[]): Generator<T[], void, unknown>;
    permutation<T>(set: T[] | Set<T>, sizeMinimum: number, sizeMaximum: number): Generator<T[], void, unknown>;
    permutation<T>(set: T[] | Set<T>, options: PermutationOptions = {}): Generator<T[], void, unknown>;

Interface / Type

  • interface CombinationOptions {
      allowRepeat: boolean = false;// Whether to allow the same element repeat appear in the same subset.
      size?: number | number[];// Size of the subset.
      sizeMaximum?: number;// Maximum size of the subset.
      sizeMinimum?: number;// Minimum size of the subset.
    }
  • interface PermutationOptions {
      allowRepeat: boolean = false;// Whether to allow the same element repeat appear in the same subset.
      size?: number | number[];// Size of the subset.
      sizeMaximum?: number;// Maximum size of the subset.
      sizeMinimum?: number;// Minimum size of the subset.
    }

Example

let item = ["a", "b", "c", "d", "e", "f"];
Array.from(combination(item, 3));
/*=>
[
  [ "a", "b", "c" ], [ "a", "b", "d" ],
  [ "a", "b", "e" ], [ "a", "b", "f" ],
  [ "a", "c", "d" ], [ "a", "c", "e" ],
  [ "a", "c", "f" ], [ "a", "d", "e" ],
  [ "a", "d", "f" ], [ "a", "e", "f" ],
  [ "b", "c", "d" ], [ "b", "c", "e" ],
  [ "b", "c", "f" ], [ "b", "d", "e" ],
  [ "b", "d", "f" ], [ "b", "e", "f" ],
  [ "c", "d", "e" ], [ "c", "d", "f" ],
  [ "c", "e", "f" ], [ "d", "e", "f" ]
]
*/

Array.from(permutation(item, 3));
/*=>
[
  [ "a", "b", "c" ], [ "a", "b", "d" ],
  [ "a", "b", "e" ], [ "a", "b", "f" ],
  [ "a", "c", "b" ], [ "a", "c", "d" ],
  [ "a", "c", "e" ], [ "a", "c", "f" ],
  [ "a", "d", "b" ], [ "a", "d", "c" ],
  [ "a", "d", "e" ], [ "a", "d", "f" ],
  [ "a", "e", "b" ], [ "a", "e", "c" ],
  [ "a", "e", "d" ], [ "a", "e", "f" ],
  [ "a", "f", "b" ], [ "a", "f", "c" ],
  [ "a", "f", "d" ], [ "a", "f", "e" ],
  [ "b", "a", "c" ], [ "b", "a", "d" ],
  [ "b", "a", "e" ], [ "b", "a", "f" ],
  [ "b", "c", "a" ], [ "b", "c", "d" ],
  [ "b", "c", "e" ], [ "b", "c", "f" ],
  [ "b", "d", "a" ], [ "b", "d", "c" ],
  [ "b", "d", "e" ], [ "b", "d", "f" ],
  [ "b", "e", "a" ], [ "b", "e", "c" ],
  [ "b", "e", "d" ], [ "b", "e", "f" ],
  [ "b", "f", "a" ], [ "b", "f", "c" ],
  [ "b", "f", "d" ], [ "b", "f", "e" ],
  ... +80
]
*/

Array.from(combinationMatrix({ foo: [1, 2, 3], bar: [4, 5, 6] }));
/*=>
[
  { foo: 1, bar: 4 }, { foo: 1, bar: 5 },
  { foo: 1, bar: 6 }, { foo: 2, bar: 4 },
  { foo: 2, bar: 5 }, { foo: 2, bar: 6 },
  { foo: 3, bar: 4 }, { foo: 3, bar: 5 },
  { foo: 3, bar: 6 }
]
*/

Package Sidebar

Install

npm i @hugoalh/setation

Weekly Downloads

1

Version

1.2.0

License

MIT

Unpacked Size

26.6 kB

Total Files

12

Last publish

Collaborators

  • hugoalh