@aquario-cloud

Насколько может быть полезен codewars?

Дело было так: смотрел собесы по джаве на ютубе и случайно наткнулся на собес по js. Решил выучить js, как второй язык. Буквально за день дошел до ООП, не включая его, так прям досканально прошелся, по малому уровню, в чем различия типов и т.д.
Ну это так, предисловие)
Решил, что нужно практиковаться и пришел на кодварс.
Начал решать задачи 6кью.
И чуть ли не в каждой задаче я решал ее, а потом смотрел на топовые решения, почти все они были в 1 строку, когда у меня было 50.

Вот пример:

function songDecoder(song){
    song = Array.from(song);
    
    let newArr = [];

    for(let i = 0; i < song.length; i++){
        if (song[i] === "W" && song[i+1] === "U" && song[i+2] === "B") {
            song[i] = "";
            song[i + 1] = "";
            song[i + 2] = "";
        } else {
            if (song[i] === "W" && song[i + 1] === "U" && song[i + 2] === "B") {
                continue;
            }
            newArr.push(song[i]);
        }
    }

    let i = 0;
    while(i < newArr.length){
        if (newArr[i].length === 0){
            newArr.splice(i, 1);
        }
        i++;
    }

    for (let i = 0; i < newArr.length; i++){
        if(newArr[i] === "" && newArr[i + 1] === ""){
            newArr.splice(i, 1);
        }
        if(newArr[0] === ""){
            newArr.splice(0, 1);
        }
        if(newArr[newArr.length - 1] === ""){
            newArr.splice(newArr.length - 1, 1)
        }
    }

    let finalString = "";
    let j = 0;
    while(j < newArr.length){
        if (newArr[j] !== ""){
            finalString += newArr[j];
        } else {
            finalString += " ";
        }
        j++;
    }

    return finalString.replace(/\s{2,}/g, ' ').trim();
}

// console.log(songDecoder(" WUAB "));


И топовое решение:

function songDecoder(song){
  return song.replace(/(WUB)+/g," ").trim()
}

function songDecoder(song){
  return song.split('WUB').filter(Boolean).join(' ');
}


Хотелось бы попросить объяснить смысл вот этой вот строки:

return song.split('WUB').filter(Boolean).join(' ');


Какова вообще польза от таких задач? И стоит ли их продолжать дальше решать, ибо я чувствую, что все упирается в знание языка?
  • Вопрос задан
  • 530 просмотров
Решения вопроса 2
nykakdelishki
@nykakdelishki
Системный аналитик
Если кратко и грубо split делает деление строки на массив ('этим значением делет").
К примеру let a = "www.derher.com" метод сплит('.') сделает массив из трех значений [www derher com]
Filter(Булиантип) догадаться не трудно
а метод join обратное свойству сплит :)

Что касается пользы ,они безусловно полезны ,узнаешь или вспоминаешь много свойств учишься писать маленький код (а иногда к в вашем случае и более понятный ,но эт больше редкость).
Ответ написан
Комментировать
like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей
return song.split('WUB').filter(Boolean).join(' ');

Эта строка кода возвращает строку, сформированную следующим образом: значение строковой переменной song сплитится по разделителю ‘WUB’ в результате получается массив со строками, далее каждый элемент этого массива проходит фильтрацию в методе filter, передаваясь в качестве аргумента функции Boolean, на предмет является ли значение true при приведении его к логическому типу аналогично коду
if ( variable ) {
    return true;
} else {
    return false;
}
, далее все значения, прошедшие проверку конкатенируются в строку через пробелы.

Подобные задачи есть смысл решать только, если вы планируете учавствовать в олимпиадах по программированию, в ином случае их практическая ценность стремится к нулю.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@McBernar
Ну вот в этом и польза — чтобы вместо 50 строк написать одну, делающую то же самое.
Ответ написан
Комментировать
hzzzzl
@hzzzzl
еще как полезно,
прочитал условие задачи, если оттуда убрать "воду", то и остается:
1) заменить WUB на пробел
2) убрать пробелы с начала и конца строки

song.replace(/(WUB)+/g," ").trim()

причем я почти уверен, что и на java оптимальное решение было бы похожим на это, а не циклами
Ответ написан
Комментировать
@Kipsi
Сами задания в жизни мало вероятно что пригодятся, но в ходе их решений полезны алгоритмы которые ты используешь в ходе их решений и какие то части кода по отдельности. Но нужно начинать хотя бы с 4-5 kyu там задания уже более менее сложные пойдут над которыми нужно подумать.
Ответ написан
Комментировать
@sibkron
Чаще всего свойства и методы коллекций/структур/объектов могут быть уже оптимизированы и в том числе и в js и java лучше использовать готовые. Код выглядит лаконичней, а иной раз и элегантней. Свои циклы стоит использовать, если нет методов и ваш код более оптимален и быстр, чем встроенные методы/свойства.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы