* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
101 lines
2.1 KiB
Markdown
101 lines
2.1 KiB
Markdown
---
|
|
id: a3f503de51cfab748ff001aa
|
|
title: Pairwise
|
|
challengeType: 5
|
|
forumTopicId: 301617
|
|
dashedName: pairwise
|
|
---
|
|
|
|
# --description--
|
|
|
|
Given an array `arr`, find element pairs whose sum equal the second argument `arg` and return the sum of their indices.
|
|
|
|
You may use multiple pairs that have the same numeric elements but different indices. Each pair should use the lowest possible available indices. Once an element has been used it cannot be reused to pair with another element. For instance, `pairwise([1, 1, 2], 3)` creates a pair `[2, 1]` using the 1 at index 0 rather than the 1 at index 1, because 0+2 < 1+2.
|
|
|
|
For example `pairwise([7, 9, 11, 13, 15], 20)` returns `6`. The pairs that sum to 20 are `[7, 13]` and `[9, 11]`. We can then write out the array with their indices and values.
|
|
|
|
<div style='margin-left: 2em;'>
|
|
|
|
| Index | 0 | 1 | 2 | 3 | 4 |
|
|
| ----- | - | - | -- | -- | -- |
|
|
| Value | 7 | 9 | 11 | 13 | 15 |
|
|
|
|
</div>
|
|
|
|
Below we'll take their corresponding indices and add them.
|
|
|
|
<div style='margin-left: 2em;'>
|
|
|
|
7 + 13 = 20 → Indices 0 + 3 = 3
|
|
9 + 11 = 20 → Indices 1 + 2 = 3
|
|
3 + 3 = 6 → Return `6`
|
|
|
|
</div>
|
|
|
|
# --hints--
|
|
|
|
`pairwise([1, 4, 2, 3, 0, 5], 7)` should return 11.
|
|
|
|
```js
|
|
assert.deepEqual(pairwise([1, 4, 2, 3, 0, 5], 7), 11);
|
|
```
|
|
|
|
`pairwise([1, 3, 2, 4], 4)` should return 1.
|
|
|
|
```js
|
|
assert.deepEqual(pairwise([1, 3, 2, 4], 4), 1);
|
|
```
|
|
|
|
`pairwise([1, 1, 1], 2)` should return 1.
|
|
|
|
```js
|
|
assert.deepEqual(pairwise([1, 1, 1], 2), 1);
|
|
```
|
|
|
|
`pairwise([0, 0, 0, 0, 1, 1], 1)` should return 10.
|
|
|
|
```js
|
|
assert.deepEqual(pairwise([0, 0, 0, 0, 1, 1], 1), 10);
|
|
```
|
|
|
|
`pairwise([], 100)` should return 0.
|
|
|
|
```js
|
|
assert.deepEqual(pairwise([], 100), 0);
|
|
```
|
|
|
|
# --seed--
|
|
|
|
## --seed-contents--
|
|
|
|
```js
|
|
function pairwise(arr, arg) {
|
|
return arg;
|
|
}
|
|
|
|
pairwise([1,4,2,3,0,5], 7);
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```js
|
|
function pairwise(arr, arg) {
|
|
var sum = 0;
|
|
arr.forEach(function(e, i, a) {
|
|
if (e != null) {
|
|
var diff = arg-e;
|
|
a[i] = null;
|
|
var dix = a.indexOf(diff);
|
|
if (dix !== -1) {
|
|
sum += dix;
|
|
sum += i;
|
|
a[dix] = null;
|
|
}
|
|
}
|
|
});
|
|
return sum;
|
|
}
|
|
|
|
pairwise([1,4,2,3,0,5], 7);
|
|
```
|