@fertyga098
FullStack js developer

Кто может объяснить код js?

let n = prompt('');
let k = prompt('');
let ans = new Set();

for (let i = k; i <= 2 * n + 1; i *= 2) {
  if ((n % i) - 1 <= k) {
    ans.add(Math.abs((n % i) - 1));
  }
}

if (!ans.size == 0) {
  for (let j of ans) console.log(j);
} else {
  console.log(0);
}


объясните код пж , полно и пошагово
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 1
@choupa
Архитектор (обычный, который строит)
1.
ans — это коллекция, в неё складываются некие числа, которые получают на предыдущем этапе алгоритма. Я сделал отступы и убрал мусорные скобки:
if (!ans.size == 0)           //  Если в коллекции есть хоть один элемент, 
     for (let j of ans)        //  то перебираем её в цикле 
           console.log(j);    //  и выводим каждый элемент. 
else                               //  Если коллекция пустая,
     console.log(0);         //  то выводим 0.


2.
Что касается решения задачи, то мне она видится очень непростой. По крайней мере за 5 минут, я не вижу у неё простого решения. Очевидно, что выигрышной стратегии у Пети тут в общем случае вообще и нет, после первого хода Пети (допустим, он взял К1 спичек), Ваня стоит ровно перед той же задачей, только с другими параметрами: N → N-K1, K → K1+1.

Ход игры зависит не только от Пети, но и от Вани. Есть прямолинейный путь: строить дерево вариантов. Но это рекурсивный перебор. Но сдаётся мне, что решение задачи не может быть таким простым в виде однопроходного цикла. Представленное решение (алгоритм) я вообще не понимаю! Тем более он работает неправильно. Допустим N=6, К=5. Очевидно, что Пете надо брать 5 спичек, чтобы оставить Ване одну, чтобы он заведомо её взял и проиграл. Ваш алгоритм для таких условий выдаст бессмыслецу, напечатает два числа: 0, -1.
Ответ написан
Ваш ответ на вопрос

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

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