Skip to content

Instantly share code, notes, and snippets.

@VictorFursa
Created July 21, 2017 11:03
Show Gist options
  • Save VictorFursa/21d310494ed6bddc1b66001a36f1082b to your computer and use it in GitHub Desktop.
Save VictorFursa/21d310494ed6bddc1b66001a36f1082b to your computer and use it in GitHub Desktop.
LightSoft
<?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();
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;
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