Професионална програма
Loading...
Tzigoriyn avatar Tzigoriyn 13 Точки

01. World Tour

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

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

https://pastebin.com/0dZpZ9SD

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

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

Здравейте,

Както колегата 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

1
14/09/2020 14:58:37
willystyle avatar willystyle 2280 Точки

Знаеш ли какво се случва, мисля че подават нов стринг който съдържа стария стринг и твоя 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 29 Точки

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

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

https://pastebin.com/iC2ysQzh

https://ibb.co/ncRn3b0

https://ibb.co/Y8zWzdX

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

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

Поздрави,

1
willystyle avatar willystyle 2280 Точки

да, има още един пропуск при 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 29 Точки

Благодаря!

Вярно, че при 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