Обновить

Комментарии 15

Проблема генерации судоку в другом - нужно уметь как-то оценить сложность для игрока, а это не столько само решение, сколько начальное условие (какие цифры убрать)

Блоки с явным указанием 3! и 9! выглядят страшновато, тем более что это всегда факториал от длины массива. Изящнее был бы какой-нибудь класс-помощник которому можно было передать N и запрашивать перестановки, при этом он сам бы внутри менял N.

Типа:

reader = new PermutationsReader(N)

pDigits = reader.readPermutation([1,2,3,4,5,6,7,8,9]);

...

const pRows = reader.readPermutations([0,1,2], 3)

Программа поддерживает изменение сложности "на лету" (ползунок на скриншоте). От 5 до 0 отображаемых цифр подсказок, и от 0 до 4 скрываемых/отображаемых знака больше меньше. То какие цифры и знаки будут скрываться и в какой последовательности, определяет сид, то есть для каждого сида будет всегда своя одинаковая уникальная последовательность отображения подсказок.

Блоки с явным указанием 3! и 9! выглядят страшновато, тем более что это всегда факториал от длины массива. Изящнее был бы какой-нибудь класс-помощник которому можно было передать N и запрашивать перестановки, при этом он сам бы внутри менял N.

"Don't Repeat Yourself" ). Вы правы, так будет почище.

Прочитал удалённый кусочек вашего комментария на почте, думаю разумно будет дать больше пояснений.
609 492 049 920 - это математический предел уникальных и правильных сеток которые можно сгенерировать из одной базовой не нарушая при этом правила Судоку. Операция остатка от деления (A % B) работает как кольцевой счетчик, как циферблат. В результате выражение seedBigInt % 609492049920 всегда выдаст нам число от 0 до 609492049919. Получив это итоговое число PermutationsReader начинает его распаковывать в обратном порядке:
делит N на 362880 (9!, используются системы счисления перестановок, 362880 для цифр и 6 для блоков),
берет остаток и понимает: цифры меняем вот по такой схеме,
само число N уменьшается, мы отрезали от него часть данных,
дальше делит остаток на 6 и понимает: строки меняем так,
и так до тех пор пока от огромного не останется ноль а сетка не будет полностью перемешана уникальным образом.
прочитал данные -> сдвинулся -> прочитал следующие -> сдвинулся
Таким образом достигается жесткая биекция.

Кажется что ничего страшного не произойдёт даже если ноль в конце не останется после извлечения всех интересующих перестановок (их число же фиксированное). Комментарий я удалил, так как понял что входной hex переваливает за значения max safe int, и остаток от деления как раз сокращает число для нормальной работы с number

Так а потыкать-то где?

К сожалению пока нигде. Хочется сделать apk для андроид, но каникулы подходят к концу. В понедельник на работу, школьные чаты уже о себе напоминают и моё "приключение" вот-вот закончится. Теперь любая работа над этим проектом будет продвигаться гораздо медленнее. Вероятно через какое-то неопределённое время я смогу поделиться результатами.

Так раз у вас статичная страничка, то бахнули б на github её. ну и судя по ссылкам оно у вас уже где-то есть в телеграмных мини-приложениях.

Честно говоря, где-то на тысячной строчке кода, примерно на моменте когда я писал логику обхода мёртвых паттернов, я стал смотреть на этот проект несколько по-другому. Из простого он превратился в надежду хоть немного поправить финансовое положение. Признаюсь, чувствую себя виноватым за такой меркантильный подход, но я не без причин в этом году отказался от путешествий по Азии.

Желаю успехов, но судоку кажется довольно избитой темой. В любом случае это будет опыт изучения коммерческого потенциала, которым можно поделиться, а на github можно закинуть и через год.

P.S. Я делал судоку в игре Newspaper puzzle (2024) на newgrounds

Спасибо. Думаю в этом проекте ещё есть парочка интересных решений которыми здорово будет поделиться с такими же новичками как я. Обязательно напишу об этом статью. К тому же я перевёл своё приложение на 36 языков включая Ассемблер, Яваскрипт и Эльфийский, для этого тоже пришлось провести занимательное исследование)

Ну, коммерциализировать конечно можно, только не очень понятно как вы при этом конкурентов будете обходить. Ну, да не суть.

Понимаю вашу иронию. Конкурировать планирую не лобовой атакой, а гибкостью. У меня есть ползунок сложности ), карандашные заметки и сид которым можно делиться в чате. Много всяких мелочей, я начинал проект именно как что-то для себя, а я годами играл в эту игру и точно знаю чего нет других приложениях.

Да не, я без иронии. Вам определённо виднее как получить из этого профит, так что только успехов могу пожелать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации