01. World Tour
Ако някой има възможност да помогне?
Какво стана с този изпит така и не разбрах 66/100 на първа задача:
https://pastebin.com/0dZpZ9SD
Проблем с тестове 5 и 6
Ако някой има възможност да помогне?
Какво стана с този изпит така и не разбрах 66/100 на първа задача:
https://pastebin.com/0dZpZ9SD
Проблем с тестове 5 и 6
Здравейте,
Както колегата Dukoff е отбелязал, в кода от ОП не се печата във всеки случай. Също така при
if (trip.includes(findIndex)) {
trip = trip.replace(findIndex, newDest);
console.log(trip);
}
Тука изпускаш случая с повече от едно съвпадения и сменяш само първото. Това е тест 6
Моя въпрос е, защо гърми с Runtime Error, когато му се добави цикъл, за да може да замени всички съвпадения???
Едниственото, което се сетих е, че може да се подадът еднакви стрингове, затова и добавих една проверка, но не е от това....
Задача:
Знаеш ли какво се случва, мисля че подават нов стринг който съдържа стария стринг и твоя replace зацикля, понеже той както е направен сменя само първия мач, затова предлагам да замениш:
с един от двата варианта, сложен replace с функция с offset:
или replace с регекс с глобален флаг (проблема е че подлежи на регекс инжекция, но в тестовете няма проблемни символи и минава 100/100):
Отново много благодаря!
Странното е, че при ползване и на двата варианта предложени от теб, пак ми дава 87/100, но този път не е с Runtime error, а обикновена грешка(грешен резултат Х)....
https://pastebin.com/iC2ysQzh
https://ibb.co/ncRn3b0
https://ibb.co/Y8zWzdX
Оффсета все още нищо не ми говори - не е тема засегната в Fundamentials....
Според мен е или грешка в теста или някой стабилно се е изгаврил с колегите на изпита, понеже това е изпитна задача и по описание, трябва да се решава само с обикновени стрингови операции(задача 1); 2-ра е с регЕкс, 3-та с обекти)....
Поздрави,
да, има още един пропуск при 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, както виждаш
Благодаря!
Вярно, че при 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 - тука ще е голяма главоблъсканица....
Отново ти благодаря за коментарите - много са полезни!
Поздрави,
https://pastebin.com/wq7JzAEF Пичове това е моят код, но е на Java. Имах същият проблем с рънтайм и стигах до 83/100.След като премахнах while за ремуува и го заместих просто с replace judge ми даде 100/100. Надявам се да съм бил полезен. :)
Успех
@ 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);
}
Поздрави!