РАЙТ ДЖОЙНt

тестовое задание - разбор скобок

ЗАКАЗ

проверка правильности написания скобок в выражении

Опубликовано:2025-03-04
Тэги:тестовое заданиеphp

Тест

Введите выражение и нажмите Check! для проверки:

Ok 16:23:43

Принцип работы функции

В рекурсивную функцию checkBrackets передается массив символов обозначающих скобки $bracketsSigns

  • array(
  • "br_1" => array(
  • "start" => "<",
  • "end" => ">",
  • ),
  • "br_2" => array(
  • "start" => "{",
  • "end" => "}",
  • ),
  • "br_3" => array(
  • "start" => "[",
  • "end" => "]",
  • ),
  • "br_4" => array(
  • "start" => "(",
  • "end" => ")",
  • ),
  • );

Что бы функция php strpos не вернула false, где надо, добавим пробел к строке и вычтем один символ с номера позиции.

  • Считаем что если есть символ закрытой скобки в исходной строке $str, значит дожен быть символ и открытой скобки
  • Строка между скобками $restStr проверяется рекурсивно как и исходная строка
  • Строка, склеенная из остатков после вырезки из исходной $glueStr, проверяется рекурсивно как и исходная строка

php-код

Скачать готовый пример на php можно здесь.

  • function checkBrackets($str, $bracketsSigns)
  • {
  • foreach($bracketsSigns as $brace){
  • if($endPos=strpos($str, $brace["end"])){
  • $tmpStr = substr($str, 0, $endPos)." ";
  • if($startPos = strpos(strrev($tmpStr), $brace["start"])){
  • $restStr=substr($str, strlen($tmpStr)-$startPos, $endPos-strlen($tmpStr)+$startPos);
  • $glueStr=substr($str, 0, strlen($tmpStr)-$startPos-1).substr($str, $endPos+1, strlen($str));
  • if(checkBrackets($glueStr, $bracketsSigns)){
  • if(checkBrackets($restStr, $bracketsSigns)){
  • return true;
  • }else{
  • return false;
  • }
  • }else{
  • return false;
  • }
  • }else{
  • return false;
  • }
  • }elseif($startPos=strpos($str, $brace["start"])){
  • return false;
  • }
  • }
  • return true;
  • };

Выводы

Правильное решение тестового задания не гарантирует что бы будете приняты на предложенную вакансию. Никогда не решайте объемных заданий, решайте только те что не составят вам труда или буду полезны лично вам.

Комментарии

0
пред.след.
Напишите коммент первым!
Вход по логин и парольok-кнопкаvk-кнопка - Зарегистрируйтесь чтобы писать комменты
Написать новый коммент