Skip to content

Instantly share code, notes, and snippets.

@matheustp
Created June 17, 2017 05:53
Show Gist options
  • Save matheustp/f9c793b13157d5643d3f5c4b3e085134 to your computer and use it in GitHub Desktop.
Save matheustp/f9c793b13157d5643d3f5c4b3e085134 to your computer and use it in GitHub Desktop.
const divisors = [...Array(10).keys()].slice(1) //Poderia ser qlqr array, apenas mantive o que ja tava no codigo
const divisorNotEqual1 = (number) => number != 1
const divisorNotEqualNumber = (divisor, number) => divisor != number
const isDivisible = (number) => (divisor) => divisorNotEqual1(divisor) && divisorNotEqualNumber(divisor, number) && number % divisor === 0
const allDivisors = (numberIsDivisibleBy) => divisors.filter(numberIsDivisibleBy)
const isPrime = (number) => {
const divisors = allDivisors(isDivisible(number))
if (divisors.length == 0) {
return `O numero ${number} é primo`
}
return `Ops, o numero ${number} não é primo, pois é divisivel por mais de 2 números inteiros [${divisors}]`
}
console.log(isPrime(10)) // Ops, o numero 10 não é primo, pois é divisivel por mais de 2 números inteiros [2,5,10]
console.log(isPrime(100003)) // O numero 100003 é primo
console.log(isPrime(100004)) // Ops, o numero 100004 não é primo, pois é divisivel por mais de 2 números inteiros [2,4]
@suissa
Copy link

suissa commented Jun 17, 2017

const divisorNotEqual1 = (number) => number != 1
const divisorNotEqualNumber = (divisor, number) => divisor != number 

Percebeu que vc tem 2 funçõesw fazendo a mesma coisa? Isso pode ser colocado assim para ser reusado:

const notEqual = ( x ) => ( number ) => ( number != x )

const notEqual1 = notEqual( 1 )
const divisorNotEqual1 = (number) => notEqual1( number )
const divisorNotEqualNumber = (divisor, number) => notEqual( divisor )( number )
 

@suissa
Copy link

suissa commented Jun 17, 2017

Deve encapsular tb a lógica para testar se existe um divisor, está assim:

const isDivisible = (number) => (divisor) => divisorNotEqual1(divisor) && divisorNotEqualNumber(divisor, number) && number % divisor === 0 

Vc pode fazer assim:

const hasDivisor = ( x ) => ( y ) => 
  ( ( y % x ) === 0 )

///...

const isDivisible = ( number ) => ( divisor ) => 
  ( divisorNotEqual1( divisor ) && 
   divisorNotEqualNumber( divisor, number ) && 
   hasDivisor( divisor )( number ) )

@suissa
Copy link

suissa commented Jun 17, 2017

const divisors = [...Array(10).keys()].slice(1)

Eu faria assim:

const generateSequenceFromOneUntil = ( max ) => 
  [ ...Array(max).keys() ].slice(1)


const divisors = generateSequenceFromOneUntil( 10 )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment