рони,
Прошу объяснить, что выполняет код
1.
a!= +a //Если номер чашки не равен номеру чашки * 2? Т.е, если это не "ноль"?
2.
(a = names.indexOf(a) + 1, [a *= 2, --a].reverse()) // Для чего тут используется reverse()? Какой массив мы им переворачиваем?
3.
(a % 2 && --a, a = a / 2 % names.length, names[a]) // Вообще без внятных догадок...
function nextPerson(a) {
return a != +a ? (a = names.indexOf(a) + 1, [a *= 2, --a].reverse())
: (a % 2 && --a, a = a / 2 % names.length, names[a])
};