Skip to content

Instantly share code, notes, and snippets.

@hraban hraban/carthesian.ts
Last active Nov 16, 2017

Embed
What would you like to do?
carthesian product in TypeScript
function carthesian<T>(columns: T[][], f: (x: T[]) => void, stackOut: T[] = []): void {
if (columns.length === 0) {
f(stackOut)
} else {
const column = columns.shift()!;
column.forEach(entry => {
stackOut.push(entry);
carthesian(columns, f, stackOut);
stackOut.pop();
});
columns.unshift(column);
}
}
const columns = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
carthesian(columns, x => console.log(x));
// =>
//
// [ 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 ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.