Skip to content

Instantly share code, notes, and snippets.

@Woodsphreaker
Last active June 30, 2017 20:59
Show Gist options
  • Save Woodsphreaker/2274d301a49abf63ed16e3b26ba5c186 to your computer and use it in GitHub Desktop.
Save Woodsphreaker/2274d301a49abf63ed16e3b26ba5c186 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