Loading...
why_where_what avatar why_where_what 118 Точки

[Programming Fundamentals] 15.Balanced Brackets

Здравейте, колеги. Знам, че темата е отворена 2-3 пъти вече, но ми се иска да разбера дали има вариант, с който моето решение да мине успешно. Някой може ли да ми каже какво би едитнал в моя код, за да стигнем 100 точки

Поздрави на автора! 

Условие --> https://softuni.bg/trainings/resources/officedocument/15286/exercise-problem-descriptions-programming-fundamentals-may-2017

Мой код --> https://pastebin.com/epJi4skv 85 точки.

 

Тагове:
0
Programming Fundamentals 06/06/2017 11:13:06
why_where_what:
Problem is solved.
maya_ip avatar maya_ip 28 Точки
Best Answer

Погледни това https://pastebin.com/zy65nLcL. Входът е последователност от стрингове и скобите са с дължина едно, затова и втория цикъл е ненужен. За вложени скоби е по-лесно ако проверяваш като сравниш броя намерени отварящи и затварящи скоби (трябва да е по-голям от едно ако са вложени когато си намерил отваряща скоба или по-голямо от 0 ако си намерил затваряща скоба).

1
05/06/2017 01:41:41
stoiko.bogev avatar stoiko.bogev 78 Точки

В момента кода ти работи по следната логика: следи броя отворени и затворени скоби и ако са равни дава BALANCED. Обаче ако имаш като вход (, (, ), ) те са равен брой но не са в реда отворена/затворена за да бъдат BALANCED, а ти изписваш че са BALANCED.

Причината е, че си дефинирал input като string, а го използваш като List и if-loop-а където ти стои nestedbrackets не се използва. А и самия loop не работи, по логиката която си написал при два входа на "(" ще ти даде UNBLANCED, дори и да са както трябва напр.: (, ), (, ) .

Ако ме питаш какво бих едитнал, първо бих пренаписал nestedbrackets loop-a и бих добвил втори loop да следи за две ")" една след друга. Предполагам че това си искал да хванеш с този loop.

Но има и проблема с този вход: ), (, ), (. Сега както ти е кода няма да го хванеш. Има колега по-надолу във форума е качил решения, може да го погледнеш за идеи.

Аз бих ти препоръчал да пренапишешк кода и да напишеш логика която следи дали след тази скоба "(" следва тази ")". Поне така направих аз.

1
05/06/2017 01:32:10
e.manolov avatar e.manolov 80 Точки

Колега, аз бих те посъветвал да ползваш стек. Когато имаш отваряща скоба я добавяш в стека. Когато имаш затваряща я проверяваш дали последната добавена в стека е същата, само че отваряща- ако е така, попваш последната добавена в стека ,ако не е, то тогава не е балансиран реда. Накрая проверяваш дали има нещо останало в стека, ако има значи пак не е балансиран реда. Не забравяй и случая, в който първо добавяш затворена скоба, което автоматично прави реда не балансиран. Дано съм помогнал. Успех.

 

2
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

То хубаво му предлагаш stack но на тях им е малко рано.На колегите за тея неща те още цикли въртят камо ли вичи масивите и особено по-сложните от тях.Иначе варианти за решение тук много.

0
e.manolov avatar e.manolov 80 Точки

 Ооо да, понеже видях Programming fundamentals и ... Малко се заблудих, материалът, който използвах не са го учили. Сори.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

Накои от колегите като мен ще те разберат.Но са единици и то стакс и tails маи ги няма и в темите.Само до речници се стига.Иначе това което им предлагаш е елегантно,спор няма.Но им е малко рано

0
why_where_what avatar why_where_what 118 Точки

Ще напиша наново задачата с различен подход този път. Нямах време да отговоря по-рано, защото работя... Благодаря ви за ценните съветите, колеги! 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.