|
8 / 5 / 4
Регистрация: 18.02.2014
Сообщений: 409
|
||||||
Оцените код24.09.2016, 23:15. Показов 1491. Ответов 16
Метки нет (Все метки)
Всем привет. Такая ситуация, пару недель назад пытался устроиться на работы на вакансию "PHP Разработчик". По требованиям я им подошел, дали тестовое задание вот такое:
Написать программу которая бы проверяла правильно ли расставлены фигурные скобки в php файле. Например: { … { … } { … { … } … } здесь не правильно расставлены скобки { … { … } { … { … } … }...} здесь правильно написал вот такой код:
Кто может объяснить, чем этот код плох. И как можно было сделать лучше? Вроде так то код работает и делает, что от него требуется. Плиз подскажите, что могло не понравится? Ну очень интересно, где я налажал.
0
|
||||||
| 24.09.2016, 23:15 | |
|
Ответы с готовыми решениями:
16
Оцените код Оцените мой код. Знания в Веб технологиях у меня не маленькие и опыт тоже!
|
|
Фрилансер
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
|
||||||
| 24.09.2016, 23:23 | ||||||
|
Ну возможно потому что слишком много телодвижений.(1 разбивка, другая, 10-я...) Задача проста, найти закрывающие и открывающие теги, сравнить кол-во тех и других и если равны то всё ок, если не равны, значит какую то скобку забыли.
1
|
||||||
|
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
|
|
| 25.09.2016, 03:50 | |
|
А возможно и потому, что вы и правда не справились с заданием.
Вы считаете закрывающие и открывающие скобки, но даже если их будет поровну, не очень похоже, чтоб в строке } … { … } { … { … } … }...{ скобки были расставлены правильно. Если к красивому и компактному решению ув. Azdeman добавить проверку первой и последней скобки, то думаю получится то, что надо.
1
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||||||
| 25.09.2016, 07:12 | ||||||
|
Ещё короче:
0
|
||||||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
| 25.09.2016, 08:10 | |
|
Чего Вы тут насоветовали?
![]() Эта задача стара как мир и решается по-другому, за один проход по строке: 1. Нашел открывающую скобку, прибавил единицу к счетчику. 2. Нашел закрывающую скобку, убавил единицу. 3. Каждый раз проверяешь - если счетчик меньше 0, ошибка. 4. Если в конце строки счетчик остался больше 0, ошибка. 5. Иначе верно. Только обычно делают сразу несколько видов скобок ({[...
1
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
| 25.09.2016, 08:44 | |
|
pav1uxa, с регулярным выражением короче.
Добавлено через 5 минут И на двух миллионах подряд идущих скобок отрабатывает в 2 раза быстрее, чем for. Не по теме: Только кому эти два миллиона нужны. :D
0
|
|
| 25.09.2016, 10:20 | |
|
0
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||
| 25.09.2016, 10:51 | ||
FOR? Если бы это работало, конечно. ![]() А так -- да, это провал. Тогда только Ваш вариант -- посимвольно перебирать.
0
|
||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
| 25.09.2016, 12:13 | |
|
Да это не то чтобы мой вариант, он народный
Стандартная задача на собеседованиях по любому ЯП. Задача на стек.Просто следующее задание будет с {[(. И тут тяжело будет без понимания.
0
|
|
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
||||||
| 25.09.2016, 12:26 | ||||||
|
Еще вариант с http://php.net/manual/ru/function.count-chars.php
0
|
||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||||||
| 25.09.2016, 12:38 | ||||||
|
Emilien, тут сложнее немного.
0
|
||||||
| 25.09.2016, 12:53 | ||||||
|
Не по теме: Я чувствую скоро дойдем до
0
|
||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||||||||||||||||
| 25.09.2016, 14:36 | ||||||||||||||||
|
Итак, вариант pav1uxa (комментарии из его сообщения):
По рецензии того же pav1uxa, доделал регулярное выражение, чтобы на подобное:
false.
false.Не знаю, почему pav1uxa так резко отреагировал на регулярку, но она в десятки раз быстрее работает, чем цикл. Да и кода в функции всего 3 строки. Я бы отправил работодателю всё-таки регулярку. И пусть у него хоть глаза лопнут от нечитабельности, но на то регулярка и регулярка. P.S. При всём при этом -- не утверждаю, что данное регулярное выражение идеально. Вероятно, можно сделать и лучше. Но главное -- циклы с треском проваливаются.
1
|
||||||||||||||||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 25.09.2016, 14:44 | ||
![]() Но засунуть mb_substr в цикл на 5 МБ это сильно (Я уже не говорю о том что { во всех кодировках имеет одинаковое кодирование, и все что касается mb_ можно убрать.
0
|
||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|||||||||
| 25.09.2016, 15:03 | |||||||||
![]() Добавлено через 5 минут
0
|
|||||||||
|
8 / 5 / 4
Регистрация: 18.02.2014
Сообщений: 409
|
|
| 25.09.2016, 20:57 [ТС] | |
|
mrNTF, Нет мой код находит в вашем варианте строки ошибку, но я уже понял, что просто слишком намудрил можно было написать все короче. Видимо из-за этого и не взяли
0
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|||||||
| 26.09.2016, 11:01 | |||||||
![]() Ну ладно, если уж так хотите парсить строки 5 мб, вот:
1
|
|||||||
| 26.09.2016, 11:01 | |
|
Помогаю со студенческими работами здесь
17
Оцените код Оцените от 1 до 10 код Оцените код Оцените код) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|