рони,
Прошу объяснить, что выполняет код 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]) }; |
Alexander Belov,
1.проверка что а это строка 2. можно без reverse 3. если число 17(нечётное) сделать его 16(чётным), разделить на 2, стало 8, получить остаток от деления на длину массива 5 , стало 3 , вернуть элемент массива с индексом 3 , стало "Pat", |
Alexander Belov,
2. если а это строка "Pat" находим индекс элемента массива с этой строкой, было "Pat" стало индекс 3 + 1 , или 4, 4 умножить 2 = 8 , 8 - 1 = 7 итого [8,7] для мнимого удобства переворачиваем reverse , получили [7,8] -- то есть по порядку "Pat" выпьет седьмую и восьмую чашку ... |
рони,
Благодарю! Так понятнее. |
Alexander Belov,
исправил , сейчас (a % 2 && ++a, a = (a - 2) / 2 % names.length,names[a]) |
Alexander Belov,
<script> var names = ["Kurt", "Dave", "Kris", "Pat", "Steve"] function nextPerson(a) { return a != +a ? (a = names.indexOf(a) + 1, [a *= 2, --a].reverse()) : (a % 2 && ++a, a = (a - 2) / 2 % names.length, names[a]) }; for (var i=1; i<=30; i++) {document.write(i + " => " +nextPerson ( i )+"<br>")} </script> |
Часовой пояс GMT +3, время: 20:45. |