• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IronBlood / AoC-js / 18776341873

24 Oct 2025 09:57AM UTC coverage: 86.302% (+0.005%) from 86.297%
18776341873

push

github

IronBlood
fix: annotation

5843 of 6986 branches covered (83.64%)

Branch coverage included in aggregate %.

11470 of 13075 relevant lines covered (87.72%)

238391.47 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

70.83
/src/lib/array.js
1
// @ts-check
2

3
/**
4
 * @template T
5
 * @param   {T[]}    arr
6
 * @param   {number} len size of each combination
7
 * @returns {T[][]}
8
 */
9
export const combinations = (arr, len) => {
4✔
10
        if (len === 0)
×
11
                return [[]];
×
12

13
        const result = [];
×
14
        for (let i = 0; i <= arr.length - len; i++) {
×
15
                for (const sub_combination of combinations(arr.slice(i + 1), len - 1)) {
×
16
                        result.push([arr[i], ...sub_combination]);
×
17
                }
18
        }
19
        return result;
×
20
};
21

22
/**
23
 * @template T
24
 * @param {T[]} arr
25
 * @returns {T[][]}
26
 */
27
export const all_subsets = (arr, with_empty_set = false) => {
4✔
28
        let result = with_empty_set ? [[]] : [[arr[0]]];
2!
29

30
        for (let i = with_empty_set ? 0 : 1; i < arr.length; i++) {
2!
31
                const valve = arr[i];
10✔
32
                const new_result = result.map(left => left.slice());
62✔
33
                for (const left of result) {
10✔
34
                        new_result.push([...left, valve]);
62✔
35
                }
36

37
                result = new_result;
10✔
38
        }
39

40
        return result;
2✔
41
};
42

43
/**
44
 * @template T
45
 * @param {T[]} arr
46
 * @param {T[][]} subsets
47
 */
48
export const zip_with_complement = (arr, subsets) => {
4✔
49
        return subsets.map(left => {
2✔
50
                const left_set = new Set(left);
64✔
51
                const right = arr.filter(v => !left_set.has(v));
384✔
52
                return [left, right];
64✔
53
        });
54
};
55

56
/**
57
 * @template T
58
 * @param {T[]} arr
59
 * @param {number} l
60
 * @param {number} r
61
 */
62
export const reverse_range = (arr, l, r) => {
4✔
63
        while (l < r) {
56✔
64
                const tmp = arr[l];
56✔
65
                arr[l++] = arr[r];
56✔
66
                arr[r--] = tmp;
56✔
67
        }
68
};
69

70
/**
71
 * @template T
72
 * @param {T[]} arr
73
 * @param {number} n
74
 */
75
export const rotate_left = (arr, n) => {
4✔
76
        n %= arr.length;
28✔
77
        if (n === 0)
28!
78
                return;
×
79

80
        reverse_range(arr, 0, n-1);
28✔
81
        reverse_range(arr, n, arr.length - 1);
28✔
82
        return arr.reverse();
28✔
83
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc