diff options
author | Santiago Lapresta <santiago@typeform.com> | 2015-06-04 18:30:38 +0200 |
---|---|---|
committer | Nicolas Williams <nico@cryptonector.com> | 2015-06-23 10:59:58 -0500 |
commit | ec7647c4ab1c50d7f45c8ff9fd73917af867e0be (patch) | |
tree | 6ea8e6b55a9e99bdc3cde57881300945d9ca84d5 | |
parent | 8aecf82bfef6647315eb96e69eac3f65ce38ee70 (diff) |
Add combinations/0 and combinations/1
-rw-r--r-- | builtin.c | 12 | ||||
-rw-r--r-- | docs/content/3.manual/manual.yml | 15 |
2 files changed, 26 insertions, 1 deletions
@@ -1486,7 +1486,17 @@ static const char* const jq_builtins[] = { "def first: .[0];", "def last: .[-1];", "def nth($n): .[$n];", - // # transpose a possibly jagged matrix, quickly; + "def combinations:" + " if length == 0 then [] else" + " .[0][] as $x" + " | (.[1:] | combinations) as $y" + " | [$x] + $y" + " end;", + "def combinations(n):" + " . as $dot" + " | [range(n) | $dot]" + " | combinations;", + // # transpose a possibly jagged matrix, quickly; // # rows are padded with nulls so the result is always rectangular. "def transpose:" " if . == [] then []" diff --git a/docs/content/3.manual/manual.yml b/docs/content/3.manual/manual.yml index 05e1733f..8d4800d0 100644 --- a/docs/content/3.manual/manual.yml +++ b/docs/content/3.manual/manual.yml @@ -1307,6 +1307,21 @@ sections: input: '["foobar", "barfoo"]' output: ['[false, true]'] + - title: "`combinations`, `combinations(n)`" + body: | + + Outputs all combinations of the elements of the arrays in the + input array. If given an argument `n`, it outputs all combinations + of `n` repetitions of the input array. + + examples: + - program: 'combinations' + input: '[[1,2], [3, 4]]' + output: ['[1, 3]', '[1, 4]', '[2, 3]', '[2, 4]'] + - program: 'combinations(2)' + input: '[0, 1]' + output: ['[0, 0]', '[0, 1]', '[1, 0]', '[1, 1]'] + - title: "`ltrimstr(str)`" body: | |