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

01. World Tour

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

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

https://pastebin.com/0dZpZ9SD

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

Тагове:
0
JavaScript Fundamentals
Dukoff avatar Dukoff 2 Точки

Здравей!

Гледам, че и ти си направил същата грешка като мен (и аз имам 66/100). Това, което забелязах като разлика с други решения е, че в твоят код (и моя) принтираме в if тялото, а не извън него. Тоест, идеята е да се принтира дори и да не са валидни входните данни. Според мен не бяха напълно ясни условията на задачите, но най-вероятно проблема е в мен, тъй като има немалко хора изкарали пълния брой точки.

0
09/08/2020 22:58:53
Tzigoriyn avatar Tzigoriyn 13 Точки

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

0
Dukoff avatar Dukoff 2 Точки

Напълно съм съгласен!

Скоро трябва да може да достъпим същия изпит и да се упражняваме на него.
Имай това предвид, за принтирането извън if-a.

0
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