marlonmisra - 4 months ago 26

Ruby Question

I wrote this script to find the first 100 primes that are also palindromes. For some reason some primes are not being printed (13, 17, etc.), and the palindromic function does not seem to work. Any tips?

`#palindrome checker`

def is_palindrome?(number)

number == number.to_s.reverse.to_i

end

#primes will consists of all primes starting with 2

#i will be incrememented and each i will be checked for being prime

primes = [2]

i = 3

#we only want the first 100 palindromic primes

while primes.length < 100

#test is false for a prime

test = false

#checks if i is divisible by any of the elements in the array

primes.each { |n|

if i % n == 0

test = true

end

}

#if i is prime that it is added to the primes array

if test == false

primes.push(i)

end

i += 1

end

#remove all non palindromic primes

primes.each { |n|

if is_palindrome?(n) == false

primes.delete(n)

end

}

#puts palindromic primes

puts primes

Answer

I got it to work by changing your script to this:

```
#palindrome checker
def is_palindrome?(number)
number == number.to_s.reverse.to_i
end
#primes will consists of all primes starting with 2
#i will be incrememented and each i will be checked for being prime
primes = [2]
i = 3
#we only want the first 100 palindromic primes
while primes.length < 100
#test is false for a prime
test = false
#checks if i is divisible by any of the elements in the array
primes.each { |n|
if i % n == 0
test = true
end
}
#if i is prime that it is added to the primes array
if test == false
primes.push(i) if is_palindrome?(i) # This is the line I changed
end
i += 1
end
#puts palindromic primes
puts primes
```

You were getting weird errors by modifying and iterating over your the `primes`

array at the same time. I moved the palindrome check to inside the while loop so you will actually get 100 palindromes vs. 100 primes minus the non-palindromes.

Source (Stackoverflow)

Comments