This module provides generators for iterating subsets of an input. It is heavily
inspired by the combinatorial iterators provided by the
itertools package from the
Python
standard library.
Returns r-length
subsequences of elements from the input iterable
. Order of
selection does not matter and elements are chosen without replacement.
import { assertEquals } from "@std/assert"; import { combinations } from "jsr:@gabelluardo/itertools"; const sequences = [...combinations([1, 2, 3, 4], 2)]; assertEquals(sequences, [ [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4], ]);
Returns successive r-length
permutations of elements from the iterable
.
import { assertEquals } from "@std/assert"; import { permutations } from "jsr:@gabelluardo/itertools"; const sequences = [...permutations([1, 2, 3, 4], 2)]; assertEquals(sequences, [ [1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3], ]);
Returns r-length
subsequences of elements from the input iterable
allowing
individual elements to be repeated more than once.
import { assertEquals } from "@std/assert"; import { combinationsWithReplacement } from "jsr:@gabelluardo/itertools"; const sequences = [...combinationsWithReplacement([1, 2, 3, 4], 2)]; assertEquals(sequences, [ [1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [3, 4], [4, 4], ]);
Returns successive r-length
permutations of elements from the iterable
allowing individual elements to be repeated more than once.
import { assertEquals } from "@std/assert"; import { permutationsWithReplacement } from "jsr:@gabelluardo/itertools"; const sequences = [...permutationsWithReplacement([1, 2, 3, 4], 2)]; assertEquals(sequences, [ [1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4], ]);
Generates the Cartesian product of input iterables. Roughly equivalent to nested
for...of
loops, where each loop uses one of the inputs to provide the element
at the corresponding position in the yielded Array
.
import { assertEquals } from "@std/assert"; import { product } from "jsr:@gabelluardo/itertools"; const sequences = [ ...product([ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]), ]; assertEquals(sequences, [ [1, 4, 7], [1, 4, 8], [1, 4, 9], [1, 5, 7], [1, 5, 8], [1, 5, 9], [1, 6, 7], [1, 6, 8], [1, 6, 9], [2, 4, 7], [2, 4, 8], [2, 4, 9], [2, 5, 7], [2, 5, 8], [2, 5, 9], [2, 6, 7], [2, 6, 8], [2, 6, 9], [3, 4, 7], [3, 4, 8], [3, 4, 9], [3, 5, 7], [3, 5, 8], [3, 5, 9], [3, 6, 7], [3, 6, 8], [3, 6, 9], ]);
Add Package
deno add jsr:@gabelluardo/itertools
Import symbol
import * as itertools from "@gabelluardo/itertools";
---- OR ----
Import directly with a jsr specifier
import * as itertools from "jsr:@gabelluardo/itertools";
Add Package
npx jsr add @gabelluardo/itertools
Import symbol
import * as itertools from "@gabelluardo/itertools";
Add Package
yarn dlx jsr add @gabelluardo/itertools
Import symbol
import * as itertools from "@gabelluardo/itertools";
Add Package
pnpm dlx jsr add @gabelluardo/itertools
Import symbol
import * as itertools from "@gabelluardo/itertools";
Add Package
bunx jsr add @gabelluardo/itertools
Import symbol
import * as itertools from "@gabelluardo/itertools";