Pull to refresh

Comments 18

В чём прикол? Банальные прямолинейные задачи — упражнения для работы с массивами для первого семестра. Особенности Javascript тоже никак не используются. Решения почти дословно можно перевести на любой другой алгоритмический язык.
Видимо, для тех, у кого не было и не может быть первого семестра, а есть потребность начать с чего-то.
К тому же, JS есть вообще на любой платформе, в которой есть графический режим и браузер.
видимо это предварительный скрининг что-бы отфильтровать людей и уменьшить нагрузку на интервьюверов.
Это задачи с Codility, там обычно можно выбрать язык для решения. Возможно у автора был ограничен выбор из-за роли, на которую подавал. У Microsoft почему-то online assessment достаточно легкий, мб на on-site отыгрываются :)
Ну да. Прямо на их главной странице логотип MS.
Да, наверное, и нет прикола никакого. Просто задачки на понимание самых основ. Автор же написал, что потом только онлайн собеседование :)

А вообще, спасибо автору, помог с утра вкатиться в работу после больших выходных:)
кажется, тут много ошибок/опечаток в коде. Залейте куда-нибудь типа JSFiddle и дайте ссылку, чтобы каждый мог проверить как это работает.
P.S. примеры ошибок: в функции descending стоит два раза if (a > b) — наверное, во второй ветке должно было быть a < b? Одни переменные объявляются с let, другие (sum, result) почему-то без. Сама функция solution в её первом варианте вообще не возвращает значение, а только пишет результат в консоль. Ну и так далее.
Тссс, пацанам не сказали, что регулярные выражения завезли. Третья задача тоже решается в одну строчку:
var str = "abbbaaaaaaabbbaabaaabbb";
console.log( str.match( /a{3}|b{3}/g ).length );  // 6

По условию достаточно подсчитать число замен. Впрочем и выполнить замены не намного сложнее.
Согласно моей женской логике замены делаются так:
//  Сначала итеративно заменяем патерны из 5-ти букв. Итерации необходимы, т.к. после первого раунда замен могут появиться новые 5-буквенные патерны, например (с пробелом для ясности) aaaaa aaa => aabaa aaa — в конце вылез новый 5-буквенный патерн. Поэтому выполняем "подходы к снаряду", пока новые такие патерны не перестанут появляться, т.е. до тех пор, пока строка, получающаяся после замены (temp), не будет совпадать со строкой до замены (str):
while ( !( str === ( temp = str.replace( /aaaaa/g, 'aabaa' ) ) ) ) str = temp;
//  С патернами из 3-х букв уже просто. Тут итерации не нужны, тупо реплэйсим:
str = str.replace( /aaa/g, 'aba' );
// + Аналогично с буквой b
Справедливости ради, регулярки при использовании capturing groups проседают в производительности (по очевидным причинам), и едва ли будут прям сильно лучше посимвольного перебора строки.

Offtopic: отличная кпдв, прям дышит Microsoft ;)

Что то легко. Пойду ка я работать в к ним -_-
Там потом собеседование с HR по телефону и только после этого on-site интервью на пол-дня :)
Люблю такие штуки, первую задачку ещё можно решить так:
'uuuuxaaaaxuuu'.replace(/((.)\1)\1+/g, '$1$2');

Остальные так коротко не решаются, по этому лень)))
В решении для второй задачи сложность O(N logN) из-за сортировки. Там можно сделать лучше O(N logK) (K — максимальное значение элемента), сохраняя одно максимальное число для отдельной суммы.

function solution(arr) {
  let sums = {};

  let result = -1;
  arr.forEach((num) => {
    const sum = sumDigits(num);
    if (sums[sum]) {
      const pair_num = sums[sum];
      sums[sum] = Math.max(pair_num, num);
      result = Math.max(result, num + pair_num);
    } else {
      sums[sum] = num;
    }
  });
  return result;
}


Зачем эти упражнения и эта статья если есть codewars.
Only those users with full accounts are able to leave comments. Log in, please.