Nitin4873
Nitin4873

Reputation: 17562

Scala - Perfect Number usage in higher order function - anything wrong?

Apologies , but am new to scala... learning it, now.

I have been trying to complete a excercise where the ask was as follows :-

// Write a function isPerfectNumber which takes integer input and returns String output.

// It finds if a number is perfect, and returns true if perfect, else returns false

// Write a higher order function myHigherOrderFunction which takes isPerfectNumber and intList as input, and returns a List of Strings which contain the output if the number is perfect or not using map.

Perfect Number :

https://rosettacode.org/wiki/Perfect_numbers just go to the scala section

My Code :

object ListMapHigherOrder{
def main(args:Array[String])
{

val intRes = args.toList
val intList: List[Int] = intRes.map(_.toInt).toList

 def isPerfectNumber(input: Int) :String  = 
 {
 var check_sum = ( (2 to math.sqrt(input).toInt).collect  { case x if input % x == 0 => x + input / x}  ).sum 
 if ( check_sum == input - 1 )
      return "true"
      else 
      return "false"
      }

def myHigherOrderFunction(argFn: Int => String, argVal:List[Int]): List[String] = { argVal.map(argFn) }

println(myHigherOrderFunction(isPerfectNumber, intList))

}
}

Code execution : scala ScalaExcercise12.scala 1 6 13

Expected Output : List(false , true , false)

the code gives expected output, am not sure how the backend testing is being done.... it just dosent pass the test.

Is there any issue with the code? - i did like to fix it , but cant i see anything wrong/missing especially because i am getting the same output as desired :(

Upvotes: 2

Views: 1345

Answers (1)

rajat saha
rajat saha

Reputation: 124

object ListMapHigherOrder{
    def main(args:Array[String])
   {

   val intRes = args.toList
   val intList: List[Int] = intRes.map(x=>x.toInt)

       def isPerfectNumber(input: Int) :String  = 
           {
           var sum = 0
           for(i <- 1 until input){
                if(input % i == 0)
                sum = sum+i
                 }
  
           if ( sum == input )
           return "true"
           else 
           return "false"
           }

    def myHigherOrderFunction(argFn: Int => String, argVal:List[Int]): List[String] = { argVal.map(argFn) }

    println(myHigherOrderFunction(isPerfectNumber, intList))

}
}

**This worked for me

Upvotes: 2

Related Questions