Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Simeon.R avatar Simeon.R 198 Точки

Exam 16 October 2016 - 03. Spy Master

Здравейте,

Условието в judge е на този адрес: https://judge.softuni.bg/Contests/Practice/Index/325#2

Решавах тази задача 2 часа на изпита и изкарах 42 точки. Няма смисъл да пускам код - основно налучквах.

Проблема ми се стори не с условието, не с алгоритъма, а че не бях сигурен кой инструмент и как да ползвам. Например, при най-малката промяна в регекса ставаха големи поразии и не винаги ескейпинга ми работеше еднакво в сторма и в regex101. Друго нещо, което изглежда лесно е да заменя резултата от "exec" с променения стринг и как да взема "specialKey" case insensitive, а думата след него case sensitive. Гледам някой колеги са използвали line.replace(regex, function(match, s1, s1...){...}), а проблема с главни и малки букви са го оправили с няколко проверки.

Може ли да ми дадете вашите решения, много искам да видя колкото се може повече варианти, тъй като мисля да отида на повишителен и искам дотогава да зацепя тези малки хитрини за regex-а. 

Ако някой може да каже освен лекциите и примерните изпити как се е готвил специално за тoзи тип задачи..

Мерси! :) 

Тагове:
0
Module: JS Advanced
viktor.pts avatar viktor.pts SoftUni Team Trainer 332 Точки

Проблема с кейсинга се решава с допълнителна проверка във функцията която ти риплейсва. В нормалните имплементации на RegExp имаш опцията да включваш и изключваш флагове като g, i, m, само за определение части на патърна, но това не се поддържа в JavaScript. Един от по-бързите варианти е да направиш мача toUppoerCase() и да го сравниш с оригиналния - ако има разлика, значи някоя от буквите е била малка.

1
Simeon.R avatar Simeon.R 198 Точки

Благодаря, не се бях сетил да сравня оригиналния мач с такъв във UpperCase. На изпита ми дойдоха всякакви неефективни решения, дори hardcode-нах specialKey и го сменях в целия текст с флаг i, за да не ползвам флаг i в основния патърн. Не знам как съм се сетил за това, а не за бързия вариант.

0
byclops avatar byclops 126 Точки

Аз реших проблема case insensitive special key, като използвах case sensitive regex, в който заменям всяка буква от ключа с regex, който мачва малка или голяма буква,т.е specialKey->[sS][pP][eE][cC][iI][aA][lL][kK][eE][yY].

За замяната на търсения стринг съм използвал capturing groups вместо функция.

http://pastebin.com/sTN7w9pj

2
19/10/2016 18:24:52
Simeon.R avatar Simeon.R 198 Точки

Доста различен подход, благодаря! Judge го прие 100/100, а после 71/100 не разбрах защо. В webstorm ми пише: "str.split is not a function", но ми харесва подхода като цяло!

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