|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
|
Парсер/счётчик строки на основе stack/deque04.01.2016, 11:43. Показов 2762. Ответов 25
Метки нет (Все метки)
Дан фрагмент последовательности скобок, состоящей из символов (){}[].
Требуется определить, возможно ли продолжить фрагмент в обе стороны, получив корректную последовательность. Если возможно - выведите минимальную корректную последовательность, иначе - напечатайте "IMPOSSIBLE". Максимальная длина строки 10^6 символов. Sample Input 1: }[[([{[]} Sample Output 1: {}[[([{[]}])]] Sample Input 2: {][[[[{}[] Sample Output 2: IMPOSSIBLE Добавлено через 5 часов 23 минуты ап, все еще актуально
0
|
|
| 04.01.2016, 11:43 | |
|
Ответы с готовыми решениями:
25
Написать программу использующую пользовательские классы Stack, Queue, Deque Массивы в Visual C++. CArray, deque, stack, указатели [bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>' |
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||
| 05.01.2016, 14:13 | ||||
|
0
|
||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||||||||||||||||||||||||||||||||||||||||
| 05.01.2016, 15:19 | |||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено gru74ik как решение
Решение
Дисклеймер: код ниже приведен исключительно для демонстрации. Может содержать ошибки, проблемы с производительностью и наверняка его можно сделать лучше.
Ваша функция делает слишком много: и вычисления, и ввод-вывод. Я согласился бы даже на название fill, если функция вернет объект, по виду или документации которого будет понятно: что и где им нужно заполнить. Введем такое определение:
Для хранения пар скобок будем использовать вектор пар:
Итак, функция fill принимает на вход: — Входную строку — Допустимые пары скобок Возвращает: — Либо Complement — Либо ошибку (пусть в виде исключения). Сигнатура функции получается такой:
Ок, что будет внутри функции? Выше я уже написал, что она должна делать:
Функция parse, очевидно, парсит входную последовательность. Возвращает оставшиеся непарные скобки. Ради которых нужно делать дополнение. Это тоже понятно уже в точке использования, и не нужно закапываться в реализацию. Но она короткая:
Да, сложность субъективна. Но балки комментариев, разбивающих код на блоки, закрывающие теги вида "// for", разнесение широко используемых однострочных операций на десяток строк и прочие меры никак не помогают справиться со сложностью структуры, а только добавляют визуальный шум. Я не призываю менять свои убеждения. Просто высказал свои мысли, чтобы больше к этому вопросу не возвращаться. Полный код
1
|
|||||||||||||||||||||||||||||||||||||||||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||||
| 05.01.2016, 21:51 | ||||||||
|
Я еще думал что же вы взамен предложите. Ваш вариант показался мне сложным и непрактичным. Ну и названия функций. У вас они, как у дипломатов, предназначены, чтобы скрывать ваши мысли. Ну и программа работает с ошибками. Вот несколько примеров неправильно обрабатываемых строк:
Ну, я уж не говорю про форматирование. Никогда ни понимал в чем прикол кернигановской несимметричной расстановки скобок. Если бы начальником был я, то давал бы за это не меньше пяти лет расстрела.
0
|
||||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||
| 05.01.2016, 23:24 | |||||||
|
По всем остальным возражениям не хочу пускаться в дискуссию, ибо она скатится в обсуждения кто как читает код и кто как думает, что непродуктивно. Если подходить к вопросу формально, то все определяется проектом и компанией. В конкретной компании, в конкретном проекте есть соглашения о кодировании, которые нужно соблюдать. Плюс, может быть принята процедура ревью кода. Все это направлено на то, чтобы код выглядел единообразно и был понятен другим людям. Здесь, в теме на форуме, нет проектных требований, поэтому писать можно как угодно. Код с исправлением ошибки и симметричными скобочками
0
|
|||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 06.01.2016, 19:08 | ||||||
|
0x10, прочитал вашу программу и понял, что мою вы таки не дочитали и в алгоритм мой не въехали, иначе бы не сочинили сами такой неэффективный. Моя программа как только встречает невалидное сочетание соседних скобок, так заканчивает работу. А ваша даже невалидную строку парсит до конца (а строка по условию может содержать до миллиона символов), а потом еще пытается к ней голову и хвост пришпандорить.
Ежели продолжить соревнование упрощенцев, то еще такой вариант пришел на ум, с классами:
0
|
||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||
| 06.01.2016, 21:14 | |||||||
|
Добавлено через 1 минуту Раз уж на то пошло, то в моем случае не нужно переписывать весь код, чтобы прекратить разбор строки при нахождении невалидной пары. Переносим исключение из функции parse в функцию match, кидаем как только встречаем невалидную пару. Все остальные базовые функции остались без изменений. Если остались ошибки — можно тестировать, искать, исправлять. Кликните здесь для просмотра всего текста
0
|
|||||||
| 06.01.2016, 21:14 | |
|
На основе контейнера stack построить стек с информацией об успешности студентов Написать парсер/счётчик строк (файловый ввод/вывод)
Счётчик на основе сдвигового регистра в multisim и ewb
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|