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.