Это копия, сохраненная 21 декабря 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
В алгоритмических олимпиадных задачах язык не решает ничего
В реальной разработке ты ничего сложнее реализации дерева и поиска по нему писать не будешь
Тем более все эти алгоритмы легко гуглятся
Давай разберем по частям тобою написанное.
>задача далеко не самая сложная
Да. Абсолютно изи. Рил за 1 минуту решается.
>Тем более Python, который считается очень легким языком. На каком-нибудь С++ я бы это 3 дня решал.
Нет. На уровне простых задачек различия языков не проявляются.
>нужно иметь очень высокий интеллект, чтобы вкатиться в программирование и сильные математические способности
Интеллект помогает, но не является обязательным. Можно надрочиться на конкретные типы задач. Тебе сложно именно томучто ты не знаешь примеров решений похожих задач.
Решается за минуту с двумя счётчиками и одним циклом по строке
Считаешь открывающиеся скобки, считаешь закрывающие, сравниваешь, до этой хуйни ифы которые проверяют есть ли чтото кроме скобок.
Чо сложного?
open_br = 0
for i in text:
if i == '(':
open_br += 1
elif i == ')':
if open_br > 0:
open_br -= 1
else:
return False
return True
print(is_correct_bracket("()(()())"))
print(is_correct_bracket(")(())("))
print(is_correct_bracket("((()))"))
print(is_correct_bracket("(()())"))
print(is_correct_bracket("()(())()(()())()((()))"))
print(is_correct_bracket("())()()()("))
Тут же тупо щотчик нужен
Если получилось это решить значить есть перспективы и всё ок.
Просто продолжай в том же духе. Ты же не собирался получить востребованную и высокооплачиваемую работу за месяц?
Специальной олимпиады тред!
Теперь решите то же самое, но скобок может быть три вида - [], (), {}.
>Видимо, нужно иметь очень высокий интеллект, чтобы вкатиться в программирование и сильные математические способности, иначе там просто нечего делать
Ебать! А ты думал, что там всё просто? И всё решается гуглежом? А задача интересная, кстати.
Проверить не незакрытые скобки забыл, да
>Тем более Python, который считается очень легким языком. На каком-нибудь С++ я бы это 3 дня решал.
Это алгоритмические задачи, вообще пох на чём писать.
>>88885
(define (ti-pidor? anon)
(eq? anon 'op))
Ну а потом тебе надо будет написать какую-нибудь хуету, аналоговнет которой. У меня такое было и пришлось думать самому.
устраивайся обратно. В лучшем случаи, если не будешь ебланить, год уйдёт.
public static boolean isCorrectBracket(String string) {
return string.matches("^\\([()]+\\)$") && (string.chars().filter(ch -> ch == '(').count() == string.chars().filter(ch -> ch == ')').count());
}
5 минут, с гуглением регекспов
мимо джава господин синьор помидор 300КК нсек
> Тем более Python, который считается очень легким языком. На каком-нибудь С++ я бы это 3 дня решал.
Эту задачу что на питоне, что на сях, что на асме однохуйственно одинаково решать. Тут вопрос не в "сложности языка", а в банальном умении писать простые алгоритмы.
Во, всё решение, ёпта:
// Для подсчета балансировки скобок
counter := 0
// Бегаем по каждому символу
for c in inputStr {
switch (c) {
case "(": counter++ // Увеличиваем счетчик скобок при открытой скобке
case ")": counter-- // уменьшаем при закрытой
default: continue // не скобка? Ну пошли дальше значит
}
// это сработает, если закрывающих скобок больше, чем открывающих, либо они тупо раньше в строке, мол, ") хуй ("
if counter < 0 {
return false
}
}
// проверям что скобки сбалансированы.
if counter == 0 {
return true
} else {
return false
}
>>88885
Абсолютно стандартная задача для любого парсера. Иди нахуй, чмошник безграмотный.
> Тем более Python, который считается очень легким языком. На каком-нибудь С++ я бы это 3 дня решал.
Эту задачу что на питоне, что на сях, что на асме однохуйственно одинаково решать. Тут вопрос не в "сложности языка", а в банальном умении писать простые алгоритмы.
Во, всё решение, ёпта:
// Для подсчета балансировки скобок
counter := 0
// Бегаем по каждому символу
for c in inputStr {
switch (c) {
case "(": counter++ // Увеличиваем счетчик скобок при открытой скобке
case ")": counter-- // уменьшаем при закрытой
default: continue // не скобка? Ну пошли дальше значит
}
// это сработает, если закрывающих скобок больше, чем открывающих, либо они тупо раньше в строке, мол, ") хуй ("
if counter < 0 {
return false
}
}
// проверям что скобки сбалансированы.
if counter == 0 {
return true
} else {
return false
}
>>88885
Абсолютно стандартная задача для любого парсера. Иди нахуй, чмошник безграмотный.
У тебя получится, анон. Просто посчитай скобочки.
Если у тебя закрывающих скобочек становится больше, чем открывающих шли им false.
Wake up, Anon. The Matrix has you
я то блять думаю, хули джава приложении такие говно тормознутное. Оказывается джава синьоры классическую задачу на стек через регулярку решают. Ебааааать
а как ты реализовал? мне кажется через рекурсию можно ебануть довольно красиво
Это элементарная задача на понимание структуры данных "стек", чего там больше пяти минут пердолиться? Может не пытаться по говнокурсам вайти, а в универ поступить?
> классическую задачу на стек
Нахуй тут стек? Регулярками конечно трешево, но стек-то тоже ни разу ни в кассу.
guard struna_so_skobkami.count % 2 !=0 else {return false}
В свифте есть гвард, в питоне можно просто if в функцию на старте запихать, нет смысла решать задачу как-то после осознания что количество скобочек нечетное
нет. обычная веб-макака не быстрее тебя её решать будет
там == а не != должно быть, ну вы поняли
И правильно это не пердолить одно решение 2-3 раза в зависимости от условий, а делать сразу правильно
Смешной сарказм!
челикс, твоё решение просто неправильное, праизвадительность ты сам выдумал тут
Эмм... нет, там ведь то же самое - если закрывающая раньше открывающей, то вырубай машину
> нет смысла решать задачу как-то после осознания что количество скобочек нечетное
Хуйню какую-то написал. Во-первых, нахуй не нужный корнеркейс, который можно и так общим случаем обработать, во-вторых, всё-таки в реальном мире задача подсчета скобок предполагает что между ними что-то есть.
Какого тут космического эффекта дает guard -- непонятно.
с самого начала закрывающих боььше чем открывающих
Еблуша, алгоритмы подсветки скобок для редакторов решают именно эту задачу
Слышь, я тебя сам по IP оформлю, фуфел
там есть ограничение по времени и по памяти, ОП их не заскиринил
На олимпиаде это задачка решается в 1 строчку.
cout << true;
Половинные очки, считай получил, и время не потратил.
>if counter == 0 return true else return false
Ебало этого олимпиадника, который даже не понимает, что можно просто написать "return counter == 0", представили?
Идешь по массиву и считаешь открывающие и закрывающие скобки. Если в какой-то момент открывающих больше - false. Если в конце количество не совпало - false. Иначе true.
Это свифтовая привычка
Я не знаю как в других языках, но например когда пишешь любой алгоритм сортировки, всегда начинаешь с
quard arr.count == 1 else {return arr}
Я думаю в других языках тоже аррей с 1 элементом считается отсортированным. Поэтому есть тенденция в гвард запихивать все корнеркейсы как ты их назвал
по идее можно сделать цикл с проходом по всем символам и на каждую встреченную открывающую скобку искать дальше по строке закрывающую, после чего удалять закрывающую или запоминать её индекс. и если в конце остаётся неотмеченная закрывающая скобка или открывающая без пары или вообще если строка начинается с открывающей то сразу FALSE
> говнокурсам вайти, а в универ поступить?
Любой говнокурс по программированию лучше, чем то, что дают в среднем универе. В универ нужно идти не для того, чтобы научиться программированию, а чтобы получить хорошую математическую базу и начать шарить в алгоритмах. Чтобы стать васяном погромиздом на 90% вакансий универ нахуй не всрался.
как тебе сказать... завод это неплохая работа!
А массивами пользоваться можно?
Можно по индукции найти закономерность, что правильные скобки - это четные и ( должен предшествовать ), короче для n=2: (), для n=4: ()(), (()) для n=6:()()(), ()(()), ((())) и т.д.
Т.е. как видишь следующие последовательности получаются из предыдущих добавлением для каждой из них либо () по разным сторонам от скобок, т.е. для n=4 это добавление для () сбоку скобки (), либо внутри (...), как например (()) новых скобок.
Короче, создаешь массивы строк правильных скобок для хотя n=32, а потом через поиск находишь соответствует ли входная скобка правильной, просматривая массив и находя подобную скобку, если не найдена, то скобка неправильная.
Хуй там, первая подзадача не решена, остальные не проверяются.
чувак, парсер регулярок в сто раз тебя умнее и он проверит даже блять оптимальнее чем твое посимвольное корявое поделие. На строке в 100 миллионов символов проверка этой регулярки отрабатывает за 93 мс, и это возможно даже лучше чем втое кривое косое поделие, по крайней мере уж никак не хуже. учите матчасть епта
Алгоритм простой на стек, решается в один проход.
Бежим по строке слева направо, когда встречаем открывающую скобку заносим оную в стек, при закрывающей вытаскиваем значение из стека. В конце если стек пустой - последовательность верна. Работает с любым количеством скобок. Линейная сложность алгоритма O(n).
Знатоки, правильно решил?
>>89798
Бля обосрался
А если тогда сделать чтобы иф посимвольно проверял строку, когда находит ( в переменную записывается номер символа и дальше считвает пока не найдёт ) эти две скобки удаляются, если в строке не осталось символов тру, если что то осталось фолс. Проверьте, а то чувство что опять проебался.
Ого, ну нихуя себе, ты сэкономил целых пару строк условного иллюстративного псевдокода на выдуманном языке, вот это да! Ты наверно такой умный!
Скинь ссулку на сайт, чтобы синьор жаба-долбоёб и джун стек-ненужен проверили свои решение и поняли как они обосрались.
Учитывая быстрофикс - не выдаст. На первом же элементе закрывающих больше - значит false.
>Тем более все эти алгоритмы легко гуглятся
Как гуглить алгоритмы? Как понять какой алгоритм для конкретной задачи нужен? Как допустим из трёх алгоритмов определить самый подходящий под конкретный случай, допустим из трёх доступных?
Бля пока писал уже дохуя кто решение написал похожее
Это обычный ассерт. Ничего специфичного свифту тут нет. И корнеркейс тут банально не нужен.
Можно ещё пиздаче сделать. Хуярим нейронку (трансформер) и тренируем его на миллионе примеров.
Изичная задача же, ты чего
мимо бывший инженер-конструктор, перекатившийся с завода в с++
так нахуя в среднем вузе учиться? кроме топ вузов почти все универы говно
Пятки поднял - уважение программистов потерял
Так ты то инженер, а не макака
Хуета, можно и без стека обычным счетчиком -- это раз
На каждой итерации надо проверять что счетчик не ушел в минус, т.е. что закрывающиеся скобки не появились раньше открывающихся.
Тоже пытался вкатиться в пограмирование некоторое время назад и тоже решал подобные задачки, у меня друган есть синьор помидор на яве 200к в наносекунду, так я её терроризировал постоянно с помощью по задачкам, так вот мы вместе сидели и тупили как правильно это сделать. С реальными рабочими задачами эта хуйня имеет мало общего.
к сожалению имеет, просто часто этого разрабы не видят, и решают задачи не оптимальным образом. Современное железо, к счастью, позваляет.
Короче выглядит так
1 Создать большой список или массив строк
2 Первый (нулевой) элемент массива равен (), т.е. n=2
3 Заполнить оставшиеся элемента списка или массива прибавлением или конкатенацией скобок '()' + 'предыдущая правильная последов скобок',
либо 'предыдущая правильная последов скобок'+')',
либо '('+'предыдущая правильная последов скобок'+')'
4 Делаем так n раз, например 64 или 100
5 Получаем массив правильных скобок
6 Получаем входную скобку через функцию и ищем ее в массиве правильных скобок
7 Если найдена - вывести True, иначе False
> чувак, парсер регулярок в сто раз тебя умнее и он проверит даже блять оптимальнее
беспруфный джава петушок, пожалуйста, да и вообще, сейчас бы регулярками подсчитывать количество символов, даже не представляю, какой говнокод ты высираешь ежедневно
Решу с 1 счетчиком.
Берешь счетчик.
Запускаешь цикл
В цикле берешь след символ.
( - плюсуешь 1
) - минусуешь 1
На каждой итерации проверяешь, счетчик меньше нуля - брейк.
После цикла, счетчик 0 - все окей. Не 0 - последовательность говно.
>>91657
Не надо степик или любые другие платформы кроме
https://openedu.ru/course/ITMOUniversity/PADS/
Проходите его, отвечайте на задания, потом можно даже корку с ИТМО запросить, это лучше чем срань для детей на степиках
Просто твой мозг не привык решать такие задачки, решай дальше.
Безграмотный клоун пытаться доказать что обычная задача на один интовый счетчик должна решаться через целый стек?
Ты давай, нейронку ещё прикрути и ещё больше на формошлепов повыебывуйся -- так чтоб ну совсем комично было.
>>91621
> Пытается играть в кодгольф псевдокодом, иллюстрирующим простой алгоритм
> Делает вид, что не тупой
Макака, ты бы ещё умением джавадок писать выебнулся.
Тем более если ты не знаешь оч такое стек заебешься решать
> Классическая задача на стек
Классическая задача на стек -- это обратная польская нотация. А тут стек алгоритм в O(1) по памяти превращается в O(n) в худшем случае. ХУЕТА и стек тут не нужен. Задача с 1 курса универа, буквально Laba3.pas, ебана. Пиздец вкатывальщики пошли, я хуею.
Охуенно высокооплачиваемая да. Иногда вкатываюсь на джуна непонятно зачем. Недавно сделал очередное тестовое. Пиздец говна поел со всеми этими мавенами, спрингами, хибернейтами, жсонами и прочей поеботой. Просто блять вагонище тупорылый технологий, смысл которых вообще не понятен почему блять именно хибернейт, почему нельзя JDBC а потом уже на стажировке тыкать хибернейт? Предлагают стажировку джуном 3 мес. зп - 10к меньше минималки, да, типа буду на 0.75 ставки или как там. Блять я когда на сврщика учился в пту по путевке от цзн - я меньше килограмма электродов сжег, и меня уже мастер звал работать куда-то за 25к для начала. И сварщиком если вкалывать как и кодером, зарплата будет не меньше, и зная язык можно оформить перекат в норм страну.
Её уже N раз в треде решили:
>>91754
В т.ч. с примером на псевдокоде: >>90762
Всё без стека прекрасно решается. Вообще нахуй не нужен стек, если тебе не надо знать какие-то детали про каждый элемент на стеке. В данной задаче достаточно понимать что скобки должны в итоге засумммироваться в 0 и всё.
Посчитал количество символов одного типа и второго типа, если не равны = false. Тебя чисто синтаксис доебал?
Я ничего сложнее экселя никогда в руках не держал, но прост если проблема в самой форме записи то это дело наживное, главное вникать и закладывать в голову все больше с каждым днем. Если проблема в том чтобы написать код который сам определит, какие символы в тексте должны совпадать по количеству, то ты там дата саентистом что ли идешь?
count = 0
for i in text:
if i == '(':
count += 1
elif count > 0:
count -= 1
else:
return False
return count == 0
строка ")(())(" ссыт твоему решению на ебало
)(
if (text.trim() == '') {
console.log('text is empty');
return false;
}
if (text.match(/[^\(|\)]+/i)) {
console.log('text contains incorrect symbols');
return false;
}
if (text.match(/^\)/i) || text.match(/\($/i))
return false;
var open = 0;
var close = 0;
for (var i = 0; i < text.length; i++) {
if (text == '(')
open++;
else if (text == ')')
close++;
}
if (open != close)
return false;
return true;
}
Все верно или чего-то не учел?
Кстати тоже два часа примерно ебался
if (text.trim() == '') {
console.log('text is empty');
return false;
}
if (text.match(/[^\(|\)]+/i)) {
console.log('text contains incorrect symbols');
return false;
}
if (text.match(/^\)/i) || text.match(/\($/i))
return false;
var open = 0;
var close = 0;
for (var i = 0; i < text.length; i++) {
if (text == '(')
open++;
else if (text == ')')
close++;
}
if (open != close)
return false;
return true;
}
Все верно или чего-то не учел?
Кстати тоже два часа примерно ебался
А, да, я понял. Я долбаеб. Ну что ж, интересно даже.
ты, хуило, прежде чем что-то высирать, код прочти нормально. Твой пример успешно будет задекчен.
Для этого случая работает. Получается, нужно завести массив счетчиков и добавлять элемент каждый раз, когда открывается скобка другого типа. Тогда ты уже на третьем элементе получишь -1 и, соответственно, false.
Полоска посреди экрана чтобы не писать длинных строчек?
> Просто блять вагонище тупорылый технологий, смысл которых вообще не понятен почему блять именно хибернейт, почему нельзя JDBC а потом уже на стажировке тыкать хибернейт?
Это ты просто сам тупорылый, раз не понимаешь такие простые абстракции. Ты бы ещё поныл, что чёт сложно, давай проводочек руками замыкать и сигналы так в базу слать, а то какие-то драйверы, пиздец, сложно же.
> Предлагают стажировку джуном 3 мес. зп - 10к
Да это ещё и охуеть, ты же вообще не умеешь нихуя. Тебе в пору бы самому раскошелиться и хоть на какие-то курсы сходить, а то ты же реально в принципе не понимаешь что происходит.
> Ты мне оффер-то пришлешь, или я тут бесплатно тебя развлекаю?
Проиграл, могу тебе говна в рот из моей жопы прислать.
Проверяем, пустой ли стек, перед тем как вытаскивать.
А хули сложного.
Ждёшь первую скобку. Если она открывающаяся, идёшь дальше, если нет, сразу false
Идём дальше. Делаем 2 переменных счётчика. Одна для (, другая для )
Если в конце строки оба счётчика равны, выводим тру, иначе фолс.
Мимо тред не читал
сколько? Кидай номер
Это задача из синтаксических анализаторов, парсеров, там целая теория по грамматикам и тд, тут не так всё просто. Мне её объясняли как решать в шараге, хотя я и сам до этого калькулятор для любых выражений писал. Не помню уже за сколько этот анализатор тогда написал, но больше чем за 3 часа явно, мб за несколько дней даже. Так что не так всё плохо, если ты дел с прогой до этого вообще не имел
Это такой список, к которому можно добавлять элементы только в конец и убирать их тоже только из конца.
то есть ты просто создаешь в пятоне список и "играешь" по этим правилам. Подумай как ты можешь стек использовать в этой задаче.
Это задача на знание и понимание стандартных алгоритмов и структур данных, а именно стека, ну и проверка на то, что у тебя есть обычная, человеческая логика и здравый смысл. Если ты её решил за три часа не зная, что такое стек - то ты сверхразум и очень далеко пойдешь, без шуток.
> Тем более Python, который считается очень легким языком. На каком-нибудь С++ я бы это 3 дня решал.
В такого рода задачах язык ни на что не влияет, максимум - придётся гуглить стандартную библиотеку, если ты её не не знаешь.
> Это задача из синтаксических анализаторов, парсеров, там целая теория по грамматикам и тд, тут не так всё просто
Тут всё супер-просто. Подсчет скобок вообще самая тупая и тривиальная задача из области парсинга поэтому в машиночитаемой хуйне так часто используются всякие скобушки, не надо никаких грамматик выдумывать.
())(
В стог сена с Манькой
>Если ты её решил за три часа не зная, что такое стек - то ты сверхразум и очень далеко пойдешь, без шуток.
Как же жирно, боже.
А что там решать? Заводишь счетчик. Прибавляешь 1, если скобка "(", и отнимаешь 1, если скобка ")"/
Если в какой-то момент в счетчике отрицательное число, возвращаешь false. Иначе true.
> Это задача на знание и понимание стандартных алгоритмов и структур данных, а именно стека
Это задача не на стек нихуя. Поздравляю, ты нихуя не понимаешь что такое стек и какие у него свойства.
Нам в этой задаче нахуй не надо знать детали каждого элемента на стеке, достаточно осознания что скобки друг друга закрывают и одного счетчика для их подсчета.
O(1) vs O(n) по памяти, в пользу счетчика.
>Хуйня, а не задача. На практике это нигде не пригодится.
Мне похожие задачки на интервью давали много раз.
в целом это тебе базовую идею стека дают, скажем какая нибудь польская запись - считай та же самая идея, не парся анон, по началу всем непросто, учи и выучишь - гарантирую
Действительно. Нужно, чтобы в конце было 0.
Два чая, я как раз переживал что плохо за структуры шарю и иногда переусложняю с ними. А тут задачу на счетчик стеком решают, пиздец.
Дурачек ебанутый, не бомби, я во-первых, не с тобой разговаривал и вообще просто подбодрил чела. Грамматику в две строчки даже для этого стоит написать просто для того чтоб легче код было составить. А свою душноту ну тут все просто это тривиально и тд на собесе мне расскажешь, тут мне хуету написывать не надо, не интересно
Корректная скобка начинается с "(" и заканчивается ")", остальное не имеет значения, это же из примеров видно. Джуниоры ёбаные, счетчики какие-то придумывают, циклы...
мимо помидор
Ну 3 часа это еще нихуево, я именно на эту задачу вообще весь вечер потратил когда учился.
Не ссы, это нормально.
мимо 250к/мес дата сайнс питонист без рофла
я обобщил идею, дегенерат, если тебе попросят считать 10 видов скобок? ты сделаешь 10 счетчиков, да?
)))(((
Ты прав, у меня просто сознание извращено литкодом и техническими интервью, и я подразумевал, что следующим вопросом будет "а что если скобочки будут разными?"
Для задачи из ОП-пика стек не нужен.
Да какого стека, нахуй тут стек не нужен -- наоборот детект дебила, который не знает для чего полезен стек. Одно дело польская запись, когда тебе реально на стеке надо детали какие-то хранить, а потом при обходе обрабатывать. Другое дело тут, когда можно счетчик воткнуть.
на интервью нормальном тебе эту задачу разовьют до стека не волнуйся, дебил, пока в джунах посиди
Задача нихуя не простая, это считай интерпретатор япа на минималках надо написать.
Хоспаде, как же я люблю безграмотных дебилов, которые несут какую-то хуету, а потом жалуются что им "душно", когда их закономерно покрывают хуями за их хуйню.
Пиздец, грамматику он собрался "писать", чтобы скобки балансировать, что за клоун, а.
>Попробуй массивом счетчиков распарсить ({)}.
А кто сказал, что эта последовательность некорректна?
пасрал на вайтишку
> нужно иметь очень высокий интеллект, чтобы вкатиться в программирование и сильные математические способности
Нет, достаточно иметь средний интеллект, внимательность и усидчивость. Но программирование весьма жестоко в этих требованиях. Если твой интеллект НИЖЕ среднего, то это сразу всё, ловить тебе тут нечего. От тебя требуется понимать множество довольно простых вещей, но у тебя при этом нет права на затуп. Да, эти вещи простые, но если ты что-то не сможешь понять, то тебе никто не поможет, а без этого понимания ты не сможешь двигаться дальше. Тут нельзя сказать "хуй с ним" и надеяться, что результат просто будет чуть хуже, что потом можно будет скомпенсировать опытом. Про математические способности это вообще смешно, говорю, как чел с топ математическими способностями (если конечно ты не имеешь ввиду способность посчитать "2 + 2 х 2")
>>89053
Посмотрел бы на такую олимпиаду, лол. Это задача на отработку синтаксиса языка: циклов и условий. Автор, наверное, даже не подозревал, что для кого-то станет проблемой сама логика задачи
Сам ты дебил и джун. И если мне внезапно на интервью попытаются эту хуету развить в стек, я сразу же оттуда съябусь, ибо понятно что передо мной оказался студентик, который про структуры данных прочитал, а подсчитывать сложность алгоритма не научился.
Пиздец, стек для балансировки скобок.
(((
А теперь представь, что у тебя сначала идёт пять закрывающих скобок подряд, а потом пять открывающих. По твоей программе это будет правильной последовательностью, поскольку в сумме счётчик будет ноль.
Мимо решал задачу посложнее на Олимпиаде
А ты её решал через счётчик или через стек?
Я решил её за полчаса-час примерно, в рамках пары
мимо 12к/мес стрит клининг спешиалист
Ладно, я тупой, задача была про скобочную последовательность , а не про то, что правильно были использованы скобки, невнимательно прочел. Спасибо автору за то, что убирает мне конкуренцию, понижая вкатунам самооценку и давай задачки, которых не почти никогда бывает в реальности.
(((плюмодебил)))
Иди про O(n) почитай, вкатывальщик. Без понимания этой истории все твои "знания" про структуры данных -- говно полнейшее. Ты же даже не понимаешь как оценить объективно какая структура и подход для какого кейса лучше.
Это кое-как тренируется (не внимательность вообще, а внимательность в конкретной области применения)
Через нейронку прогнал по фасту, ну есть пару либ для питона, хз как по другому решать, задача не из простых, очевидно. Макбук чуть не перегрелся.
>вкатывальщик гедто услыщал про O notation
так жалко вкатывальщиков ппц, дегенератам ничего не светит
если невозможно - все, выводим фалс.
О(n^n/2) сложность.
хитрое - 2 счетчика.
первое - проверка четности лен(стр).
нечетное - фалс.
левые и правые.
проход слева.
считаем левые, вычитаем из них правые. если сумма меньше нуля - брейкаем, фалс.
Ну так вот. Знать надо просто овердохуища, чтобы попасть на эту не самую оплачиваемую работу. В любую другую профессию вкат не требует такого адового задрачивания.
Вот вроде оповскую задачку решил
Так ты сам кринжовую хуйню высираешь, у тебя логика макаки формошлепа который бежит сразу формошлепить. Тебе вопрос зададут как задачу решать, ты в слух грамматику озвучишь и все, вопросов вообще к тебе не будет. Не понимаю в чем тут проблема, может ты взорвался из-за незнакомых слов? Не знаешь как грамматику составить для этого тривиального случая?
Нет не гей, а метросексуал. Ну вообще я не против геев, моя девшука и ее бойфренд тоже ничего против не имеют.
Пиздец у тебя кодстайл, конечно. Учиться и учиться.
Нахуй ты пытаешься стек тут построить? Он тут не нужен, тебе банально не за чем хранить эту хуету на стеке лишний раз.
Метросексуал? Тебя уже отпустили, после того как ты девок в метро по жопам шлёпал и на дваче хвастался?
Кому ты пиздишь, маня, эта задача не решается циклами или регулярками.
Там надо через стек все это прокидывать.
Процесс буквально тот же самый, что в интерпретаторах япов, эту задачу рассматривают на курсе компиляторов/интерпретаторов.
Чел, не ебись в глаза
> На каждой итерации проверяешь, счетчик меньше нуля - брейк.
На твоей последовательности счетчик на первой же закрывающей скобке уйдет в минус, цикл вылетит, счетчик не равен нулю. Фолс.
Решается за 1 минуту, если скобка открывающая, пихаем в стек, если закрывающая, то вынимаем из стека, если вынуть не можем, фейл, если в конце стек непустой, фейл. Все. Любой прочитавший одну книгу по написанию компиляторов это знает.
Эта задача из курса для 6-классников, которые впервые узнали, что такое программирование. Какой нахуй стек?
Всё понял, спутал со своей задачей, спасибо Анон.
Так еще хуже, потому что прибавляя значения не разделяя тип скобок, ты делаешь все счетчики одинаковыми.
Если я неправильно тебя понял, то покажи решение - https://leetcode.com/problems/valid-parentheses/
Долбоебик, засада выполняет свою работу. Тот, кто не может ее решить на практике никому нахуй не нужен. Ору с погромистов с нулевым интеллектом.
>преждеверменная оптимизация
>не способность обобщить решение
спасибо мы вам перезвоним
def isvalid(str):
if len(s) % 2 != 0:
return False
else:
n = len(s)
while n >= len(s):
s = s.replace('()','')
s = s.replace('{}','')
s = s.replace('[]','')
n -= 2
return bool(s) is False
Два чая
Какой же ты тупой хуесос, у меня просто слов нет, пидор
Мы с тобой, анончик! Лови сердечко <3
Мб я чего-то не понял, но вроде не такая сложная задача, чтобы прям 3 часа решать. Вот накидал минут за 10 на c#:
using System;
public class HelloWorld {
public static void Main() {
Console.WriteLine(is_correct_bracket("()(()())").ToString());
Console.WriteLine(is_correct_bracket(")(())(").ToString());
}
static bool is_correct_bracket(string text)
{
int closedDifference = 0;
for (int i = 0; i < text.Length; i++)
{
if (text.ToString() == "(")
{
closedDifference++;
}
else
{
closedDifference--;
}
if (closedDifference <= -1)
{
return false;
}
}
return (closedDifference == 0);
}
}
Рейт
Мб я чего-то не понял, но вроде не такая сложная задача, чтобы прям 3 часа решать. Вот накидал минут за 10 на c#:
using System;
public class HelloWorld {
public static void Main() {
Console.WriteLine(is_correct_bracket("()(()())").ToString());
Console.WriteLine(is_correct_bracket(")(())(").ToString());
}
static bool is_correct_bracket(string text)
{
int closedDifference = 0;
for (int i = 0; i < text.Length; i++)
{
if (text.ToString() == "(")
{
closedDifference++;
}
else
{
closedDifference--;
}
if (closedDifference <= -1)
{
return false;
}
}
return (closedDifference == 0);
}
}
Рейт
Единственный проход по циклу, таким образом алгоритм линеен
Счетчик наращивается или уменьшается на каждом символе. Для ( он увеличивается, для ) уменьшается. Если значение счетчика в любой момент стало отрицательным, то False. В конце счетчик должен быть равен нулю, иначе False
мимо-вечный-джун без ума и талантов
Заорал
>Ну так вот. Знать надо просто овердохуища, чтобы попасть на эту не самую оплачиваемую работу. В любую другую профессию вкат не требует такого адового задрачивания.
Ну дак вкатывайся в любую другую сферу, в чем смысл твоего нытья?
Слишком тонко подъебал технаря. Не поймет.
Да, обоссывает только первого, где на js решение
Лол, а ты неплох.
Хуя фантазии у дурачка. Ты бы хоть на собес хоть раз в жизни сходил, прежде че-то там фантазировать.
Знаю, что надо было сделать функцию, которая возвращает бул, но мне лень
using System;
class HelloWorld {
static void Main() {
string skobs = "())))())()()(((()())(())))(()((((";
string skobsPrev = "";
while(skobs.Length != 0)
{
skobsPrev = skobs;
skobs = skobs.Replace("()","");
if(skobs == skobsPrev)
{
Console.WriteLine("False");
break;
}
Console.WriteLine(skobs);
}
}
}
Ты довен? Через стэк за 5 минут пишеться решение. Всё открывающие суем в него, если закрывающая снимаем вершину. Если стек в конце больше 0 false
вот вы пишите - стек, стек. а что есть этот ваш стек?
Пиздец, еще один даун со стеком.
нет ты
я вот загуглил:
Стек — список элементов, организованных по принципу LIFO («последним пришёл — первым вышел»).
Дауны с replace вы вообще понимаете насколько это неоптимально будет по сто раз пробегать строку? Да еще и выделять удалять память.
ну типа какой у тебя стек - какие языки знаешь, фреймворки, фронтэнд/бекенд, умеешь ли работать с базами данных. Вот это все. Кто все умеют, тех называют фуллстек.
Какой же ты дегенерат...
Представь магазин для АК. Это и есть стек. Снаряжаешь патрон - делаешь push(). Вынимаешь или выстреливаешь патрон - делаешь pop(). Т.е. операции всегда только с верхним (последним) патроном.
>>
Предлагаю мой дебильный способ решения
В чём суть.
Создаем массив правильных скобок индуктивным способом, начиная от n=2 прибавляю к предыдущему скобку () по бокам или (+предыдущие скобки+), далее входящую скобку сравниваем со значениями массива правильных скобок, если значение не найдено то False, иначе True.
Плюс, выводит массив правильных скобок.
Знаю, способ не эффективный, долгий и требует использование памяти, но хотя бы более наглядный
ну так изи же
оптимизация бывает в разную сторону
для одноразовой задачи оптимизировать время на написание - почему бы и нет?
ну хер знает. к каждой откр скобке есть закр скобка
и так двигаться по строке +1 символ вперед.
сначала с первого символа потом со второго, с третьего.
разве так нельзя исключить все закрытые пары?
For I range list name:
If i=')':
left+=1
else:
right+=1
if left==right:
return true
else:
return false
не оч помню питон, но примерно так
Концепцию решения придумал сразу же. Но на работу меня все равно не берут
мимо днорабочий закончившийся колледж на погромиста
Я ж написал, что накидал от пизды - это раз
Нахуя здесь оптимизировать? Я игру разрабатываю? - это два
Щас бы оптимизировать говнозадачку уровня шестого класса
Совсем ебанулся
Задача первого курса вуза
Пошел нахуй я так и знал что тупые вкатуны даже не могут посмотреть как нужно учиться
Не, только на милф
Правильно не берут, кста
Харкнул тебе в ебало.
Сука и ебаные нытики все такие
Посмотреть ебучий учебник? Попросить совета что нужно знать чтоб решить это говно?
Нахуй
НУЖНО НАНЫТЬ ПРОСТЫНЮ И ЗАПОСТИТЬ УЕБАНСКИХ ЛЯГУХ
Решение?
ну вообще там стек, ты ж вставляешь в рожок патрон сверху и он двигает остальные вниз. самый просто пример стека ( что дословно переводится как сука СТОПКА) - это сложенные друг в друга тарелки. Кладешь наверх, берешь верхнюю всегда
А что в ней трудного?
У тебя счетчик открытых скобочек изначально равен нулю.
Идешь по строке. Встретил открывыющую скобку - увелчил счетчик на 1. Встретил закрывающую - уменьшил на 1. В случае если счетчик стал меньше 0 - прервал выполнение(т.к. сразу понятно, что получил невалидную строку). В конце - если счетчик не 0 - строка невалидна.
если сначала будет закрывающая скобка, а потом открывающая строка будет неправильная, но твоё решение выдаст, что правильная
)(
Написать 2х слойную денс-сетку
показать ей 50 примеров и потом просто делать предикт тех что даны для проверки
дата-сатанист, не ебу как это решать классически
(Если твоё сообщение было не оскорблением того анона, мол зумер ты тупой, то извини меня, пожалуйста, я сглупил)
у тебя багло, ищи
Бля, я даун. Забыл увеличивать счетчик. Ну, в реальности я бы форичем просто воспользовался, т.к. к нему привык, ну да пох.
Ты тупой? Сложность операции вставки и удаления из стека О(1). Проход по списку символов O(N).
Вся общая сложность будет О(N)
> Я вставил первый патрон A. Он внизу.
В каком низу? Который сверху или который снизу? Это же вопрос относительности
В том низу, со стороны которого дно.
Я не понимаю, ты доебался потому, что в магазине патроны не друг над другом стоят, а с перекосом?
Ну тогда возьми обойму для ПМ.
Всё, увидел твой третий иф
Читать это неудобно будет, потому что в голове мало кто держит, в каком он сейчас блоке находится.
Тебя никто, что характерно, не тралировал.
Первый анон вообще из википедии строчку кинул, а ты сразу огрызаешься. Нехорошо.
> ты в слух грамматику озвучишь и все, вопросов вообще к тебе не будет. Не понимаю в чем тут проблема
Да потому что ты дурак и пытаешься натянуть сову на глобус, вбив себе в голову, что это аж целая задача парсинга какой-то формальной грамматики, ещё и с умным видом потом пердя про формошлепство. Ты бы ещё нейронками начал решать и доказывать, что это задача якобы на то чтобы ты вслух про лингвистические модели сказал. То что ты предлагаешь -- это и есть логика формошлепа. Они вон тоже выучивают одну функцию одного фреймворка и используют её везде, к месту и не к месту.
> незнакомых слов
> грамматику составить
Клоун безграмотный, грамматику не "составляют", её описывают в какой-нибудь стандартной нотации, а дальше парсерами/лексерами/токенайзерами реализуют её обработку.
хочешь смешной вариант решения этой задачи: делаешь замену скобок на фигурные и эвалуэйтишь это как dict.
да.
Да, там count-- если закрывающая скобка, а потом попадаем в третий иф
Хуй знает, одна из самых лёггких задач, котору. можно получить на собесе. Эта задача на знание стека.
Мне на прошлом собесе такое дали. Ну тут на знание рекурсии:
// ЗАДАЧА:
// Определить количество замкнутых несвязанных между собою пустот (дырок) в лабиринте размера NM
// 1 <= N <= 200, 1 <= M <= 200
//
// ВХОД:
// Текстовый файл, содержащий массив NM в виде строк (т.е. N строк, каждая длиной M символов)
// Символы: '.' - пусто '#' - занято (стенка лабиринта)
//
// НУЖНО ПОЛУЧИТЬ:
// Число замкнутых несвязанных между собою пустот (дырок) в переданном во входном файле лабиринте.
//
// ПОЯСНЕНИЕ:
// Пустота считается несвязанной с другими, если у неё нет смежных с другой пустотой клеток
// по горизонтали или вертикали. Т.е. из одной пустоты нельзя перейти в другую пустоту
// двигаясь по любой траектории и делая шаги по горизонтали и/или вертикали.
//
// Важно! Необходимо учитывать только пустоты, замкнутые стенами лабиринта со всех сторон!
//
// ВЫХОД:
// Вывести исходный файл и под ним - найденное число пустот.
// Или вывести сообщение об ошибке, если входной файл некорректен.
//
ПОЯСНЯЮЩИЕ ПРИМЕРЫ:
1)
Входные данные:
###...###.
#.##.###..
####......
......####
.###.#...#
.....#####
Выходной результат (должно получиться)
###...###.
#1##.###..
####......
......####
.###.#222#
.....#####
В этом примере у нас 2 (ДВЕ) дырки замкнутые в стенах лабиринта (помечены цифрами '1' и '2').
2)
Входные данные:
##########
#..##..###
###.###..#
#..##.#..#
##########
Выходной результат (должно получиться)
##########
#11##22###
###3###44#
#55##6#44#
##########
В этом примере у нас 6 (ШЕСТЬ) дырок.
3)
Входные данные:
#####.....
....#.....
#####.###.
.....#...#
......###.
Выходной результат (должно получиться)
#####.....
....#.....
#####.###.
.....#111#
......###.
В этом примере у нас 1 (ОДНА) дырка. Остальные пустоты, хотя из них и нельзя перейти из одной в другую,
не являются дырками, т.к. не замкнуты стенами лабиринта со всех сторон!
Хуй знает, одна из самых лёггких задач, котору. можно получить на собесе. Эта задача на знание стека.
Мне на прошлом собесе такое дали. Ну тут на знание рекурсии:
// ЗАДАЧА:
// Определить количество замкнутых несвязанных между собою пустот (дырок) в лабиринте размера NM
// 1 <= N <= 200, 1 <= M <= 200
//
// ВХОД:
// Текстовый файл, содержащий массив NM в виде строк (т.е. N строк, каждая длиной M символов)
// Символы: '.' - пусто '#' - занято (стенка лабиринта)
//
// НУЖНО ПОЛУЧИТЬ:
// Число замкнутых несвязанных между собою пустот (дырок) в переданном во входном файле лабиринте.
//
// ПОЯСНЕНИЕ:
// Пустота считается несвязанной с другими, если у неё нет смежных с другой пустотой клеток
// по горизонтали или вертикали. Т.е. из одной пустоты нельзя перейти в другую пустоту
// двигаясь по любой траектории и делая шаги по горизонтали и/или вертикали.
//
// Важно! Необходимо учитывать только пустоты, замкнутые стенами лабиринта со всех сторон!
//
// ВЫХОД:
// Вывести исходный файл и под ним - найденное число пустот.
// Или вывести сообщение об ошибке, если входной файл некорректен.
//
ПОЯСНЯЮЩИЕ ПРИМЕРЫ:
1)
Входные данные:
###...###.
#.##.###..
####......
......####
.###.#...#
.....#####
Выходной результат (должно получиться)
###...###.
#1##.###..
####......
......####
.###.#222#
.....#####
В этом примере у нас 2 (ДВЕ) дырки замкнутые в стенах лабиринта (помечены цифрами '1' и '2').
2)
Входные данные:
##########
#..##..###
###.###..#
#..##.#..#
##########
Выходной результат (должно получиться)
##########
#11##22###
###3###44#
#55##6#44#
##########
В этом примере у нас 6 (ШЕСТЬ) дырок.
3)
Входные данные:
#####.....
....#.....
#####.###.
.....#...#
......###.
Выходной результат (должно получиться)
#####.....
....#.....
#####.###.
.....#111#
......###.
В этом примере у нас 1 (ОДНА) дырка. Остальные пустоты, хотя из них и нельзя перейти из одной в другую,
не являются дырками, т.к. не замкнуты стенами лабиринта со всех сторон!
Например, при каждой новой открывающей скобке повышаем уровень на 1 и в рамках этого уровня считаем скобки, их общий баланс должен быть равен нулю.
Если где-то в массиве получился не ноль, то скобки не равны
С квадратным - придется таки стек использовать. Встретили открывающую - положили на стек. Встретили закрывающую, достали из стека, если она не того же типа - сразу вышли. В конце проверяем, осталось ли что-то на стеке и прошли ли мы всю строку.
ДАНО:
- ТаблицаЦен, в которой хранится товар, цена на товар и дата установки цены на негго.
ТОВАР | ЦЕНА | ДАТА УСТАНОВКИ ЦЕНЫ (эта цена действует до следующей установки цен)
- ТаблицаПродажТоваров, в которой хранится товар и дата продажи
ТОВАР | ДАТА ПРОДАЖИ
НУЖНО:
Написать запрос, который получит цену продажи товара (если на это время еще цена не была установлена, то считаем, что цена продажи равна 0).
Должна получится таблица:
ТОВАР | ДАТА ПРОДАЖИ | ЦЕНА ПРОДАЖИ
Использовать можно только SQL.
Просто сделай замену квадратных/фигурных на круглые
Получишь все круглые(т.е. приведёшь данные к одному виду) и сделаешь тоже самое, что и в ситуации, когда все скобки однотипные
Нахуя вы всё так усложняете
function isBalanced($str)
{
$count = 0;
for ($i = 0; $i < strlen($str); $i++) {
$count = $str[$i] === '(' ? $count + 1 : $count - 1;
if ($count < 0) {
return false;
}
}
return $count === 0;
}
Ты тупой.
В худшем случае у тебя использование памяти со стеком будет O(n) -- потоковую обработку ты так вообще не сможешь сделать, банально потому что у тебя память кончится, на потоке из "...(((((((((((((((...", потому что ты их за каким-то невидомым хером хочешь сохранять.
С обычным интовым счетчиком и инкрементом-декрементом заместо операций со стеком ты получаешь O(1) по потреблению памяти -- можешь хоть бесконечный поток скобок в него пулять, память никогда не кончится (ну, условно до момента когда счетчик уйдет в MAX_INT, если у тебя рантайм без длинной арифметики).
Ты банально лишнее говно в виде целого стека в памяти хранишь, потому что используешь тупо для того, чтобы кол-во плиточек посчитать, но для этого прекрасно обычный счетчик подходит и всё.
Стек нужен только когда тебя в деталях ебет содержимое плиточек, но это не тот случай.
Распарсить польскую нотацию -- там да, там нужен стек, ибо тебе надо сначала установить последовательность операций (построить стек), а потом выполнить их (пройтись по содержимому стека).
Это не натягивание совы, это просто класс задач, по грамматике лл1, составляешь грамматику в строчку и пишешь код по ней, все, есть чуть более сложные из той же оперы, что ты тогда делать будешь? Костыли свои дебильные городить? Ну раз тебе нравится решать задачу из этого класса как костыльному школьнику - решай, мне то что? Ну просто я бы сделал вывод о тебе что ты не понимаешь \ не знаешь какие то обычный вещи. Нахуя ты тут мне что-то доказываешь так упорно пытаясь хоть как-то сумничать - я в недоумении
Ты таким макаром увеличиваешь время выполнения своей хуйни. В строке с 1_000_000 символов - ты сначала должен пройтись и все заменить, а потом уже выполнять алгоритм подсчета. Неэффективно это, короче. А тут четко за O(n).
Не проверял, но:
SELECT ТаблицаПродажТоваров.ТОВАР, ТаблицаЦен.ЦЕНА, ТаблицаПродажТоваров.ДАТА ПРОДАЖИ
FROM ТаблицаЦен, ТаблицаПродажТоваров
WHERE ТаблицаПродажТоваров.ТОВАР = ТаблицаЦен.ТОВАР
ORDER BY ТаблицаПродажТоваров.ТОВАР;
Чел, я сам 1Сник. Эта задачка для собесов учебная.
Ты такой же запрос будешь писать, если, например, нужно будет не цену продажи получить, а прибыль рассчитать, используя закупочную цену в качестве себбестоимости с детализацией до документа.
И часто срез последних нужно получить на каждый документ. Виртуальная таблица тебе тут не поможет. Руками будешь срез делать.
А, я идиот
Я отключу телефон
И зачем ты все цены вытащил ? Надо цену получить на дату продажи. В таблице цен на каждый товар может кучу цен быть.
Нужно узнать, какая была цена в момент продажи.
Да и даже тут можно было без декартова произведения обойтись, а соединение хотя бы элементарное сделать, но оно один хер не будет работать. Тут без джоинов никак не решить. Притом джоин нужно делать саму с собой по датам, используя > "больше".
select ТаблицаПродажТоваров.ТОВАР as t, ТаблицаПродажТоваров.ДАТА ПРОДАЖИ, (select ТаблицаЦен.ЦЕНА where ТаблицаЦен.ТОВАР = t) order by ТаблицаПродажТоваров.ДАТА ПРОДАЖИ desc;
(но я понимаю что в реальности за такое выебут)
> Это не натягивание совы, это просто класс задач
Но это не тот класс задач, который ты пытаешься натянуть, вот и всё. Ты можешь пытаться делать какие угодно выводы, но лично я после таких вопросов сделаю вывод, что ты сам нихуя не понимаешь о чем говоришь и пытаешься "модную и крутую" штуку, про которую на хабре прочитал, безграмотно натянуть на абсолютно нерелевантную ей задачу балансировки скобок.
А делаю я такой вывод, потому что, еслиб ты вообще понимал что это и какие задачи решает, ты бы использовал её по назначению и задачи придумывал бы соответствующие с соответствующими констрейнами. Но раз у тебя грамматика -- это для решения задачи балансировки скобок, значит ты банально не понимаешь проблем, которые такая абстракция решает.
Haskell + Оптимизация хвостовой рекурсии.
Интерпретаторы функциональных языков переводят рекурсию в циклы, если используешь хвостовую рекурсию.
Хуйня, а не задача. Вот если бы ты попробовал поле для судоку заполнить, то тут бы охуел.
> Нахуя ты тут мне что-то доказываешь так упорно пытаясь хоть как-то сумничать
> Грамматика для балансировки скобок
> упорно пытаясь хоть как-то сумничать
Ясно все с тобой, клоун.
Хуйта какая-то. Я конечно понимаю что в условии обычно не сказано, что между скобками могут быть какие-то произвольные символы, но всё-таки.
Зачем в задаче на спортивное программирование говорить об эффективности? Ну не знаю даже, а сам как думаешь?
Да я знаю, я просто к тому что это вообще-то очень стандартная проблема, которая предполагает именно наличия промежуточного говна между скобками.
++
Ахах "модную и крутую" на хабре - это как раз про твоё понимание что такое лл1 и какие задачи ею решаются. Дружище че ты так рвешься то? Решение что по школьному, что по нормальному как это делают люди - одинаковы просты, тут даже и совы то нет которую ты мне тут приплести пытаешься. Почему это тебя так злит?
Это только на малом объеме будет работать, и то слабоэффективно.
По факту задача балансировки скобок замечательно решается вообще на бесконечном потоке входных данных, главное чтобы счетчик скобок влез.
> Мы не ограничены
А, ну раз вы не ограничены...
> Вопрос всё ещё тот же
Чтобы писать программы грамотно, а не как попало, работающие только в определенных абстрактных условиях в вакууме с большими ограничениями. Нет, для вкатывальшика наверно круто научиться решать задачи хоть как-то, но вкатывальщики на то и вкатывальщики, что поголовно хуесосы безграмотные.
Я тупой или для всего цикла нужно сделать проверку , если количество ( , равно количеству ) то True, если нет то false?
А, теперь понял, но так это с датами ебаться надо, а в целом суть та же остается.
Это должно быть на уровне подкорки.
Не совсем. К примеру строка "))((" будет валидной согласно твоему критерию, но невалидной согласно условию задачи
Дать им решать одну задачку. В процессе обсуждения они выгрызут друг другу глотки
Во-первых, условие коряво сформулировано, если следовать ему буквально, то все решается простым перебором и сравнением количества.
Во-вторых, ничего сложного, если ты кодингом ни одну неделю занимаешься. И в плюсах ничего слоэного нет.
Если, как вы говорите последовательность ")(" хуевая, то в решении тоже ничего сложного.
создаем вектор флагов;
начинаем парсить строку;
если попадается '(' пушбэкаем флаг в вектор;
если попадается ')' при пустом векторе, сразу нахуй такую строку, возвращаем ложь;
если попадается ')' при непустом векторе, попаем вектор;
если после перебора строки вектор непустой возвращшаем ложь, иначе истину;
Где я проебался?
Толсто. Никто такую таблицу читать не будет, никакой менеджер
Все просто. Куча долбачей пишут про счётчики и высирают говно.
Нормальные люди просто знают мету
Так-то в жизни так и бывает - придумал решение, а оказывается туда миллионы данных пихают или еще что-то некорректное.
А где ты в формулировке задачи увидел разрешение на допущение, что входных данных у тебя мало? Ты никогда таких задач не решал что ли? Тебе даются 1.5 простых примера, а потом автотест гоняет твою программу на ебейше огромных строках, чтобы увидеть что она отвалилась.
>>98159
Ну тут вопрос к составителю задачи, почему она получилось такой, что в итоге ничему тебя не учит.
Естественно я написал неоптимальный код, но он удовлетворяет условиям задачи и написан меньше чем за 5 минут.
Дегенерат, хули там решать, ( скобка делаешь к счетчику +1, ) — делаешь –1
Если меньше нуля на каком-то этапе произошло, то неправильная, если к концу строки не 0 — тоже
Самая первая мысль котоая пришла в голову, просто почтитать количество открвающих и закрывающих скороб и если оно не равно, значит нерпавильная стока. Это без всяких оптимизация, просто в лоб.
а ты шутник)))))(((((
"Модную и крутую" -- это про логику формошлёпа, которому модным и "интересным" реактом захотелось решать задачу вывода статического текста.
Не нужно никаких безконтекстных грамматик, Бэкуса-Наура, синтакс-деревьев и прочей хуеты, чтобы решать задачу балансировки скобок. Это просто банально не та задача.
Если ты таких простых вещей не понимаешь, значит и какие задачи решаются.
И это кстати LR-ом решать надо, а не LL-ом, даже тут ты обосрался.
символ
Да, тут все ок, я не заметил последнее условие в цикле.
Это ж хуйня а не задача, сразу же пришло в голову решение:
bool is_bracket_correct(string str)
{
int open = 0;
int close = 0;
for (int i = 0; i < str.length(); i++)
{
switch (str.at(i))
{
case '(':
++open;
break;
case ')':
if (++close > open)
return false;
break;
default:
return false;
}
}
return open == close;
}
Почти так, считаешь кол-во открытых скобок и вычитаешь из него закрытые. На каждой итерации ещё нужно проверять, чтобы счетчик не стал меньше 0 (т.е. закрывающая скобка не появилась раньше открывающей) -- а то отвалится на примерах, которые тебе в соседних ответах накидали.
Ты тупой?
>) — делаешь –1
>Если меньше нуля на каком-то этапе произошло, то неправильная
>)(
>)
>меньше нуля
>false
Ебало так что стянул, зелень ебаная
Ебать двач охуевший, табуляцию явно проставляет
У тебя, наверное, айкью 140. Сверхразум какой-то.
Да, ты прав
Нет необходимости считать открытые и закрытые скобки отдельными счетчиками. Просто открытые добавляешь, а закрытые вычитаешь из общего счетчика. На каждой итерации считаешь, не ушел ли счетчик ниже 0.
>>98903
Ну вообще он прав, т.к. у него есть условие
> Если меньше нуля на каком-то этапе произошло, то неправильная
На твоих примерах счётчик будет меньше нуля прям с первого символа и соот-но будет досрочный false
Так что не бомби, второкурсник, а учись адекватно общаться, даже если твой оппонент не прав хотя в данном случае неправ ТЫ, пригодится в жизни и на работе
>)))))))(((((((
Сразу -1 -> false
>())(()
+1 -1 -1 -> false
>(()())()
Задание корректное, условие по алгоритму выполяется -> true
Вопросы?
> пригодится в жизни и на работе
Он небось ещё думает что программирование -- это работа для НЕОБЩИТЕЛЬНЫХ
Блять, мкропчелик, ты сортинг не осилил?
Не-не, тебе не нужно два счетчика. Просто в один добавляешь открытые и вычитаешь закрытые. В итоге он должен быть равен нулю и никогда не опускаться ниже 0 в процессе обхода строки.
Это же курс, нужно решать имея те инструменты, что были даны в курсе, а сортировка идет после этой задачи.
Ахах ладно... Хаброшкольный гуглокарась иди ты уже нахуй, мозги себе лром реши
Я б перебрал массив char, сравнивая каждый нулевой и чётный элемент с "(", а нечётный элемент с ")".
Это копия, сохраненная 21 декабря 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.