Skip to content

Instantly share code, notes, and snippets.

@BrunoDSouza
Forked from Woodsphreaker/pairwise.js
Created June 30, 2017 20:59
Show Gist options
  • Save BrunoDSouza/792ec9b505900529de3fecd039f2e27b to your computer and use it in GitHub Desktop.
Save BrunoDSouza/792ec9b505900529de3fecd039f2e27b to your computer and use it in GitHub Desktop.
Pairwise
const pairwise = (arr, arg) =>
/*
Primeiro laço (reduce) com os numeros recebidos no array
Inicio o reduce com um array contendo 2 posições, um número inteiro que vai armazenar as somas dos indices e um
objeto que vai armazenar os indices já usados no processo
*/
arr.reduce((acc, cur, indexR, arr) => {
/*
Segundo laço (forEach) para testar o valor recebido do reduce com cada valor do array com a finalizade de
satisfazer a condição do desafio
*/
arr.forEach((cur2, indexF) => {
/*
Se a condição for satisfeita, os indices são somados e armazenados na primeira posição do acumulador do reduce
Os indices já utilizados, são inseridos no objeto, presente na segunda posição do acumulador do reduce, pois serão
fundamentais na validação da condição
*/
if (cur + cur2 === arg && indexR !== indexF && !acc[1][indexR] && !acc[1][indexF]) {
acc[0] += (indexR + indexF)
acc[1][indexR] = true
acc[1][indexF] = true
}
})
// Retorno o acumulador para a proxima interação
return acc
}, [0, {}])[0]
console.log(pairwise([7, 9, 11, 13, 15], 20)) // 6
console.log(pairwise([0, 0, 0, 0, 1, 1], 1)) // 10
console.log(pairwise([1, 4, 2, 3, 0, 5], 7)) // 11
console.log(pairwise([1, 3, 2, 4], 4)) // 1
console.log(pairwise([1, 1, 1], 2)) // 1
console.log(pairwise([], 100)) // 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment