Created
July 21, 2017 11:03
-
-
Save VictorFursa/21d310494ed6bddc1b66001a36f1082b to your computer and use it in GitHub Desktop.
LightSoft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
final class Palindrome | |
{ | |
/** @var string $string */ | |
private $string; | |
/** @var string $oneLongString */ | |
private $oneLongString; | |
/** | |
* Palindrome constructor. | |
* @param string $string | |
*/ | |
public function __construct(string $string) | |
{ | |
$this->string = $string; | |
} | |
/** | |
* @param string $string | |
* @return string | |
*/ | |
private function utf8StringReverse(string $string) | |
{ | |
preg_match_all('/./us', $string, $array); | |
return join('', array_reverse($array[0])); | |
} | |
/** | |
* @return string | |
*/ | |
public function isPalindrome() | |
{ //prepared string | |
$string = str_replace(" ", "", trim(mb_strtolower($this->string))); | |
$this->oneLongString = $this->mbStrSplit($this->utf8StringReverse($string)); | |
// check palindrome or not | |
if ($this->utf8StringReverse($string) == $string) { | |
return $this->string . " - палиндром"; | |
} // if not found palindrome return first letter | |
if (empty($this->getLongestWord($this))) { | |
$firsLetter = $this->mbStrSplit($this->string); | |
return "подпалиндромы отсутствуют в строке - выводится первыйсимвол строки - $firsLetter[0]"; | |
} | |
return $this->getLongestWord($this); | |
} | |
/** | |
* @return array | |
*/ | |
private function foundWords() | |
{ | |
/** @var string $word */ | |
$word = ''; | |
/** @var array $foundWords */ | |
$foundWords = []; | |
/** @var integer $keyBigString */ | |
$keyBigString = null; | |
$explodedStrings = explode(' ', mb_strtolower($this->string)); | |
$j = 0; | |
foreach ($explodedStrings as $key => $value) { | |
/** @var boolean $flag */ | |
$flag = true; | |
/** @var integer $count */ | |
$count = mb_strlen($value); | |
$wordAsArray = $this->mbStrSplit($value); | |
for ($i = 0; $i < $count; $i++, $j++) { | |
$word = $word . $this->oneLongString[$j]; | |
//find coincidences | |
if ($this->oneLongString[$j] != $wordAsArray[$i]) { | |
$flag = false; | |
$j = $j + $count; | |
break; | |
} | |
} | |
if ($flag) { | |
$foundWords[] = $word; | |
} | |
$word = ''; | |
} | |
return $foundWords; | |
} | |
/** | |
* @param Palindrome $palindrome | |
* @return string | |
*/ | |
private function getLongestWord(Palindrome $palindrome) | |
{ | |
/** @var string $longestWord */ | |
$longestWord = ''; | |
$min = 0; | |
foreach ($palindrome->foundWords() as $key => $word) { | |
$lengths = mb_strlen($word); | |
if ($lengths > $min) { | |
$min = $lengths; | |
$longestWord = $word; | |
} | |
} | |
return $longestWord; | |
} | |
/** Return Word as array | |
* And supports the encoding utf-8 | |
* @param string $string | |
* | |
* @return mixed | |
*/ | |
private function mbStrSplit(string $string) | |
{ | |
preg_match_all('#.{1}#uis', $string, $out); | |
return $out[0]; | |
} | |
} | |
$string = 'Аргентина eманит негра'; | |
$palindrome = new Palindrome($string); | |
echo $palindrome->isPalindrome(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE `category`. | |
( `id` INT NOT NULL AUTO_INCREMENT , `parent_category_id` INT NULL , `name` VARCHAR(255) | |
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY (`id`), INDEX (`parent_category_id`) | |
) ENGINE = InnoDB; | |
-- На выборку всех категорий верхнего уровня, начинающихся на “авто” | |
SELECT * FROM category | |
WHERE name LIKE 'авто%' | |
AND parent_category_id IS NULL; | |
-- На выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины) | |
-- даже если ноль подкатегорий | |
SELECT c.* FROM category c | |
LEFT JOIN category p ON c.id=p.parent_category_id | |
GROUP BY c.id | |
HAVING count(p.id) <= 3; | |
-- хотя бы одна подкатегория | |
SELECT c.* FROM category c | |
LEFT JOIN category p ON c.id=p.parent_category_id | |
WHERE p.id IS NOT NULL | |
GROUP BY c.id | |
HAVING count(p.id) <= 3; | |
-- На выборку всех категорий нижнего уровня (т.е. не имеющих детей) | |
-- возвращает так же категории верхнего уровня если у них нет потомков | |
SELECT c.* | |
FROM category c | |
LEFT JOIN category p ON c.id=p.parent_category_id | |
WHERE p.id IS NULL; | |
-- Исключает категории верхнего уровня даже если у них нет потомков | |
SELECT c.* FROM category c | |
LEFT JOIN category p ON c.id=p.parent_category_id | |
WHERE p.id IS NULL AND c.parent_category_id IS NOT NULL; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
example -> https://jsfiddle.net/nsh8mspo/ | |
document.getElementById('t').style.color = 'green'; | |
document.getElementById('t').className = 'a'; | |
document.getElementsByClassName('c')[0].style.color = 'green'; | |
document.getElementsByTagName('table')[0].className = 'a'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment