<?php
$primePalindromeFinder = new BetterPrimePalindromeFinder(1000, 1);
var_dump($primePalindromeFinder->hasPrimePalindrome() ? $primePalindromeFinder->find() : 'NOPE');
$primePalindromeFinder = new BetterPrimePalindromeFinder(500, 400);
var_dump($primePalindromeFinder->hasPrimePalindrome() ? $primePalindromeFinder->find() : 'NOPE');
// Exception
#var_dump($primePalindromeFinder->find());
class BetterPrimePalindromeFinder {
private $start;
private $end;
private $prime_palindrome;
public function __construct(int $start, int $end) {
$this->start = $start;
$this->end = $end;
for($i = $this->start; $i >= $this->end; $i--) {
if($this->isPalindrome($i) && $this->isPrime($i)) {
$this->prime_palindrome = $i;
}
}
}
public function find():int {
if($this->hasPrimePalindrome()) {
return $this->prime_palindrome;
}
throw new \Exception("No Prime Palindrome found between {$start} and {$end}");
}
public function hasPrimePalindrome():bool {
return $this->prime_palindrome !== null;
}
private function isPalindrome(int $number):bool {
$number = strval($number);
for($i = 1; $i <= floor(strlen($number) / 2); $i++) {
$from_start = substr($number, $i - 1, 1);
$from_end = substr($number, $i * -1, 1);
if($from_start !== $from_end) {
return false;
}
}
return true;
}
private function isPrime(int $number):bool {
if($number == 1) {
return false;
}
if($number == 2) {
return true;
}
if($number % 2 == 0) {
return false;
}
for($i = 3; $i <= ceil(sqrt($number)); $i = $i + 2) {
if($number % $i == 0)
return false;
}
return true;
}
}
- Output for 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
- int(2)
string(4) "NOPE"
- Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
- Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/97YPK on line 28
Process exited with code 255.
preferences:
256.12 ms | 402 KiB | 330 Q