Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Интересное задание codewars.com (https://javascript.ru/forum/misc/73461-interesnoe-zadanie-codewars-com.html)

j0hnik 06.05.2018 14:55

Цитата:

Сообщение от Alexandroppolus
пропатчить некоторые встроенные функции.

лучше не привыкать :)

j0hnik 06.05.2018 14:56

Alexandroppolus,
какие преимущества быть в каком либо клане???

Alexandroppolus 06.05.2018 15:16

Цитата:

Сообщение от j0hnik (Сообщение 484741)
лучше не привыкать :)

в той ситуации выбора не было

Alexandroppolus 06.05.2018 15:21

Цитата:

Сообщение от j0hnik (Сообщение 484742)
Alexandroppolus,
какие преимущества быть в каком либо клане???

никаких
мне дали ссылку на этот сайт на работе, ну я и вступил, чтобы была соревновательность со знакомыми людьми, а не какими-то неизвестными персонажами (с помощью клана всех сразу видно). Потом все клановые быстро забили, я по инерции ещё немного порешал то что казалось интересным и незамороченным, и тоже забил.

сейчас, оглядываясь назад, из того что решил могу вспомнить интересных задач только штук 5-7...

j0hnik 06.05.2018 18:27

Alexandroppolus,

const solution = new RegExp('.');
var str = solution.test.toString();
solution.test = function(x) { /* тут любое решение )) */ };
solution.test.toString = function() { return str; };


как этой фишкой пользоваться?

Alexandroppolus 06.05.2018 21:41

j0hnik,
ты про задачу с делимостью на 7?

вместо /* тут любое решение )) */ написать что-то вроде

return !(parseInt(x, 2) % 7)


Тут косяк автора вот в чем: он хочет от игрока регулярку, которой проверяет строку (методом test). А мы тупо берем и заменяем этот метод своей функцией. Чтобы такое не прокатило, автор теста проверяет результат test.toString(), но мы и toString переопределили.

Самый правильный подход - получать от игрока строку. Проверять что это строка (typeof) и по ней создавать регекс. При этом предварительно сохранить метод test из RegExp.prototype, и сам конструктор RegExp, потом это всё использовать. Тогда юзер нигде ничего не перепишет и будет вынужден честно упороться и таки написать регулярку.

j0hnik 06.05.2018 21:50

Alexandroppolus,
это я написал, чтоб тестировать проще было :lol:

надеялся что мухлевать никто не будет

https://www.codewars.com/kata/regula...ain/javascript

j0hnik 04.08.2018 02:23

Интересная ката 6kyu (новичок+)
Нужно найти во входном массиве (от 1 до n) пропущенные числа и вернуть их новый массив в порядке возрастания.

[8, 10, 11, 7, 3, 15, 6, 1, 14, 5, 12] ---> [2, 4, 9, 13]

ВАЖНО[!] решение должно быть скоростным, проверка на огромных массивами, с редкими пропусками.

рони 04.08.2018 10:05

j0hnik,
<script>
function fn(b) {
    for (var c = [], a = 0; a < b.length; a++) c[b[a]] = true;
    b = [];
    for (a = 1; a < c.length; a++) c[a] || b.push(a);
    return b
};
var a =  [8, 10, 11, 7, 3, 15, 6, 1, 14, 5, 12] ;
    a = fn(a);
document.write(JSON.stringify(a, null, 4))
</script>

j0hnik 04.08.2018 10:33

рони,
Такой была моя первая попытка, только я чиcла пушил,
var x = c[b[a]];
c[x] = x;

кодварс ответил мне: "Хей! бро, не, ты меня не понял, нужно ОЧЕНЬ быстрое решение!"


Часовой пояс GMT +3, время: 07:12.