Loading...

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

Tzigoriyn avatar Tzigoriyn 44 Точки

01. World Tour

Ако някой има възможност да помогне?

Какво стана с този изпит така и не разбрах 66/100 на първа задача:

https://pastebin.com/0dZpZ9SD

Проблем с тестове 5 и 6

Тагове:
0
JavaScript Fundamentals
MapoBG avatar MapoBG 36 Точки

Здравейте,

Както колегата Dukoff е отбелязал, в кода от ОП не се печата във всеки случай. Също така при

  1.                 if (trip.includes(findIndex)) {

  2.                     trip = trip.replace(findIndex, newDest);

  3.                     console.log(trip);

  4.                 }

Тука изпускаш случая с повече от едно съвпадения и сменяш само първото. Това е тест 6

 

Моя въпрос е, защо гърми с Runtime Error, когато му се добави цикъл, за да може да замени всички съвпадения???

https://pastebin.com/nY3qCB6R 

Едниственото, което се сетих е, че може да се подадът еднакви стрингове, затова и добавих една проверка, но не е от това....

Задача:

https://judge.softuni.bg/Contests/Practice/Index/2518#0

2
14/09/2020 14:58:37
willystyle avatar willystyle 2472 Точки

Знаеш ли какво се случва, мисля че подават нов стринг който съдържа стария стринг и твоя replace зацикля, понеже той както е направен сменя само първия мач, затова предлагам да замениш:
 

if (oldString !== newString) {
    while (allLocations.includes(oldString)) {
        allLocations = allLocations.replace(oldString, newString);
    }
}

с един от двата варианта, сложен replace с функция с offset:

let offset = 0;
while (allLocations.indexOf(oldString, offset) >= 0) {
    allLocations = allLocations.replace(oldString, (oldString, offset) => newString);
    offset = allLocations.indexOf(oldString, offset) + newString.length;
}

или replace с регекс с глобален флаг (проблема е че подлежи на регекс инжекция, но в тестовете няма проблемни символи и минава 100/100):

let rgx = new RegExp(oldString, 'g');
allLocations = allLocations.replace(rgx, newString);

 

1
MapoBG avatar MapoBG 36 Точки

Отново много благодаря!

Странното е, че при ползване и на двата варианта предложени от теб, пак ми дава 87/100, но този път не е с Runtime error, а обикновена грешка(грешен резултат Х)....

https://pastebin.com/iC2ysQzh

https://ibb.co/ncRn3b0

https://ibb.co/Y8zWzdX

Оффсета все още нищо не ми говори - не е тема засегната в Fundamentials....

Според мен е или грешка в теста или някой стабилно се е изгаврил с колегите на изпита, понеже това е изпитна задача и по описание, трябва да се решава само с обикновени стрингови операции(задача 1); 2-ра е с регЕкс, 3-та с обекти)....

Поздрави,

1
willystyle avatar willystyle 2472 Точки

да, има още един пропуск при case "Remove Stop" (да махнеш = от валидацията за горен индекс) :

if (startIndex >= 0 && startIndex < allLocations.length) && (endIndex >= 0 && endIndex < allLocations.length)

https://pastebin.com/SU1J157Q

или

https://pastebin.com/bR5Be23v

офсета е просто отместване, indexOf може да му се каже от кой индекс (офсет) нататък да търси, съответно replace малко по-трудно се ползва с offset, както виждаш

1
13/09/2020 17:24:10
MapoBG avatar MapoBG 36 Точки

Благодаря!

Вярно, че при endIndex = allLocations.length, излиза от масива :)(тука и гърми теста), а startIndex = allLocations.length също губи смисъл дори и при startIndex = 0 и allLocations.length = 0...

П.П. Този изпит от 9.08.2020 си е бил доста неприятен - тези 13т от 1-ва зад. щяха да ми откъснат главата и предполагам, че доста колеги са се затруднили, 2-ра зад. е с регЕкс и е елементарна - решава се за 5 мин. буквално, но за сметка на това на 3-та зад. при положение, че решение минава от първия път и с двата нулеви теста, Judgе дава само 37/100 и 5 теста гърмят с Runtime error - тука ще е голяма главоблъсканица....

Отново ти благодаря за коментарите - много са полезни!

Поздрави,

1
SimeonKazandzhiev avatar SimeonKazandzhiev 3 Точки

https://pastebin.com/wq7JzAEF Пичове това е моят код, но е на Java. Имах същият проблем с рънтайм и стигах до 83/100.След като премахнах while за ремуува и го заместих просто с replace judge ми даде 100/100. Надявам се да съм бил полезен. :)

Успех

1
Elena123456 avatar Elena123456 235 Точки

@ SimeonKazandzhiev , много благодаря за споделения отговор и решение. Judge найстина неодобрява while цикъла за Remove командата, когато използваме Replace. Много ми е странно, че с while цикъла и Replace на няколко пъти попадах в безкраен цикъл, а понякога със същия синтаксис се печаташе правилния стринг. След изключването на while цикъла всичко се оправи.

Ето и едно решение на C#- https://pastebin.com/9Zd5cH9n

 

Туко-що разбрах защо се получава безкраен цикъл в този случай, когато примерно initialString="elenafeefeelenafdefeelena" и искаме да Switch:elena:gelena. Програмата винаги ще открива стринга "elena" в първоначалния стринг, защото новия стринг съдържа и стария. Ето защо попадаме в безкраен цикъл и Judge не дава 100/100 при наличие на while.

 if (oldString != newString)
                    {
                        while (initialString.Contains(oldString))
                        {
                            initialString = initialString.Replace(oldString, newString);
                        }
                    }

 

Правилен вариант:

 if (initialString.Contains(oldString) && oldString != newString)
                    {                      
                        initialString = initialString.Replace(oldString, newString);
                    }

 

Поздрави!

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