Как это сделаноГид
Как делается Неделя дня
Коротко
Каждую Неделю дня в Save Friday строит генератор, а не дизайнер уровней: он раскладывает готовое решение, разбирает его и оставляет неделю, только если спасти пятницу можно ровно одним способом. Потом бот-новичок играет её 100 раз, и неделя попадает в игру, только если его успех подходит этому дню недели.
Главное
- Сначала ответ. Генератор начинает с готовой недели и идёт от неё назад.
- Решатель считает способы спасти пятницу и останавливается на двух. Остаются только недели, где способ ровно один.
- Дата служит зерном генератора, поэтому у всех iPhone в один день одна и та же неделя. Недели дня больше чем на год вперёд уже лежат внутри приложения.
- До выпуска бот-новичок играет каждую неделю 100 раз. Цель для понедельника — 90% решений, для субботы — 28%.
- Недели никто не подбирает вручную, и их не пишет нейросеть. Это обычный детерминированный код.
Зачем Неделе дня ровно один ответ?
Потому что общая задача — честное соревнование, только если решить её можно одним способом. Когда ответ один, время 0:47 значит одно и то же на любом телефоне, и никто не обогнал тебя, случайно наткнувшись на путь полегче. А ещё единственный ответ держит головоломку на логике, а не на удаче: у каждой встречи есть причина стоять именно там, так что ответ можно вычислить, а не угадать.
Поэтому же карточка результата, которой ты делишься, показывает время, ходы и звёзды, но никогда не показывает, где стоят встречи. Друзья видят, как прошла твоя неделя, но не видят ответа.

Как генератор строит неделю?
В четыре шага.
- Раскладывает ответ. Генератор берёт пустую неделю, не трогает пятницу после обеда и режет свободные часы каждой переговорки на куски от одного до четырёх часов. Часть кусков становится встречами, остальные — занятыми часами: там переговорку забронировала другая команда.
- Набирает участников. На каждую встречу — от одного до четырёх человек, и в ответе никто не попадает на две встречи сразу. Генератор охотнее берёт тех, у кого в тот же час уже есть встреча в соседней переговорке: именно это делает неделю коварной. У каждого — минимум две встречи.
- Считает ответы. Решатель пытается собрать неделю с нуля, начиная с самой зажатой встречи, и считает, сколькими способами можно спасти пятницу. Как только находит два, останавливается. Если поменять местами две одинаковые встречи, новым ответом это не считается.
- Убирает лишний ответ. Если ответов два, генератор добавляет ограничение, которое исключает второй: обычно ставит на встречу ещё одного человека, у которого в другом варианте была бы накладка, или закрепляет встречу на месте. Потом считает заново. Если за 30 кругов единственного ответа не получилось, всё начинается с нового зерна.
Решатель — это поиск в глубину, классический перебор с возвратом. Битовые маски запоминают, какие клетки заняты и кто из людей занят в какой час какого дня. Он маленький и быстрый, и на той же идее работает туча в игре (о ней ниже).
Как у всех iPhone получается одна и та же неделя?
Дата и есть зерно. Для Недели дня генератор превращает строку «savefriday:v1:» плюс дату, например 2026-11-02, в 64-битное число с помощью FNV-1a, простой и хорошо описанной хеш-функции. Это число запускает SplitMix64 — быстрый генератор псевдослучайных чисел, который в 2014 году опубликовали Гай Стил, Даг Ли и Кристин Флуд. Вся сборка идёт только на целых числах, поэтому из одних и тех же данных на любом устройстве получается одна и та же неделя. Отдельный тест сверяет «отпечатки» известных недель, чтобы правка кода не могла незаметно их изменить.
На деле телефону даже не нужно ничего считать. Недели дня больше чем на год вперёд, считая от дня запуска, сгенерированы заранее и лежат внутри приложения, всего около 190 КБ. Поэтому Неделя дня работает без интернета. Дальше приложение строит недели из того же зерна. Неделя меняется в полночь по местной дате телефона, а Неделя дня №1 — это день запуска.

Как проверить головоломку, пока в неё никто не играл?
Ботами. В наших тестах есть несколько виртуальных игроков, и для Недели дня важнее всех новичок. Он берёт случайную встречу, ставит её туда, где она встаёт плотнее всего, в 15% случаев ошибается наугад и может отменить ход не больше пяти раз. Он играет как новичок: наперёд смотрит только на предупреждения самой игры.
Бот-новичок играет каждую неделю-кандидата 100 раз, и доля решений должна попасть в рамки, заданные для этого дня недели:
| День | Цель для бота-новичка, доля решений |
|---|---|
| Понедельник | 90–100% |
| Вторник | 75–100% |
| Среда | 60–85% |
| Четверг | 45–70% |
| Пятница | 35–60% |
| Суббота | 28–53% |
| Воскресенье | 40–65% |
По пятницам и субботам есть ещё одна проверка: новичок, который следит за тучей и сразу отменяет ход, когда она появляется, должен спасать пятницу минимум в 93% из 30 попыток. Сложный день имеет право быть сложным, но не нечестным. Генератор перебирает до 40 зёрен на дату (по пятницам и субботам до 80) и берёт первую неделю, которая прошла проверку. Если не прошла ни одна, в игру идёт самая близкая к цели.
Чему нас научили боты?
Вот что мы поменяли, посмотрев на ботов.
- Туча важнее, чем мы думали. В одном октябрьском тесте субботней недели бот-новичок сам спасал пятницу в 22% попыток, а когда следовал туче и отменял ходы, в 98%. Поэтому дополнительная проверка трудных дней — именно про тучу.
- 40 прогонов мало. Сначала мы гоняли каждую неделю-кандидата 40 раз, и удачная серия могла пропустить трудную неделю. Теперь прогонов 100.
- У кампании появилась своя кривая. У каждой недели года есть рамки для бота-новичка. Внутри части недели растут до пика, потом дают передышку, а каждая следующая часть сложнее предыдущей. Если кривая ломается, тест не пропускает сборку.
Это симуляция, а не люди. Игра не отправляет нам никаких данных о том, как ты играешь, поэтому пока мы настраиваем сложность по ботам и по письмам, которые присылают игроки.
Что делает туча?
После каждого хода решатель в фоне проверяет, можно ли ещё спасти пятницу из текущей позиции. Если нельзя, туча закрывает солнце, пока не отменишь ход. На самых тяжёлых неделях игры эта проверка в наших тестах на Mac занимала не больше 0,2 миллисекунды на позицию, так что следующий ход она не задерживает. Если хочется справляться совсем самостоятельно, выключи «Прогноз» в настройках — это режим «Эксперт».
Хочешь увидеть всё это в деле? Неделя дня — на отдельной странице, правила — в разделе «Как играть», а общая картина про такие игры — в статье «Что такое головоломка с календарём». А сама Save Friday скоро на iPhone.
Новая Неделя дня каждый день, бесплатно. Save Friday скоро на iPhone.
Скоро в App Store
Скоро на iPhone. Неделя дня и недели 1–10 — бесплатно.
- Без рекламы
- Без трекинга
- Одна покупка, без подписки
Ещё вопросы
-
Неделя дня у всех одинаковая?
Да. В одну и ту же дату у всех одна и та же неделя. Она меняется в полночь по местному времени.
-
Неделя дня может оказаться нерешаемой?
Нет. Каждая неделя строится из готового решения, а решатель до выпуска подтверждает, что спасти пятницу можно ровно одним способом.
-
Почему субботняя Неделя дня сложнее понедельничной?
Так задумано. Сложность растёт к концу недели: цель для бота-новичка — 90% решений в понедельник и 28% в субботу, а в воскресенье снова 40%.
-
Неделе дня нужен интернет?
Нет. Недели дня больше чем на год вперёд уже лежат в приложении, а дальше оно строит их из того же зерна, так что всё работает без сети.
-
Головоломки придумывает искусственный интеллект?
Нет. Их строят детерминированный генератор и решатель: один и тот же код и одна и та же дата всегда дают одну и ту же неделю.
Источники и проверка
- Fast Splittable Pseudorandom Number GeneratorsGuy L. Steele Jr., Doug Lea, Christine H. Flood, OOPSLA 2014, ACM, 2014-10
- RFC 9923: The FNV Non-Cryptographic Hash AlgorithmL. Noll, K. Vo, D. Eastlake 3rd, T. Hansen, RFC Editor, 2026-02
- Поиск с возвратомВикипедия
- Скриншоты — из настоящей игры. Их обрезают, но не редактируют.
Есть ошибка? Напиши на support@savefriday.app. Каждое исправление отмечаем здесь с датой. Как мы пишем