Во-первых, кажется, что вы думаете о паттерне, который повторяется в 14s , и пытаетесь решить его в mod 7
, что будет довольно сложно. Вместо этого также работают в mod 14
.
Во-вторых, 7
дней после дня 1
будет днем 8
(не днем 6
), поэтому вам необходимо дополнительное преобразование для этих случаев. Если вас не волнуют субботы или воскресенья, мы могли бы «выбросить их» , сопоставив их все до 0
. Это означает, что операция не является обратимой в выходные дни.
Вот функция, которая возвращает
0
, если ввод 0
или 6
(mod 7
)
2
меньше, чем вход (mod 14
), если вход превышает 5
(mod 14
)
- вход (
mod 14
), если вход 5
или меньше (mod 14
)
Так что вам просто нужно настроить начальное смещение
const day = x => {
const y = (x % 7) % 6;
if (y === 0) return 0;
const z = x % 14;
return z > 5
? z - 2
: z;
};
day(0); // 0
day(1); // 1
day(2); // 2
day(3); // 3
day(4); // 4
day(5); // 5
day(6); // 0
day(7); // 0
day(8); // 6
day(9); // 7
day(10); // 8
day(11); // 9
day(12); // 10
day(13); // 0
day(14); // 0
day(15); // 1
// ...