Спасибо. Думаю в этом проекте ещё есть парочка интересных решений которыми здорово будет поделиться с такими же новичками как я. Обязательно напишу об этом статью. К тому же я перевёл своё приложение на 36 языков включая Ассемблер, Яваскрипт и Эльфийский, для этого тоже пришлось провести занимательное исследование)
Честно говоря, где-то на тысячной строчке кода, примерно на моменте когда я писал логику обхода мёртвых паттернов, я стал смотреть на этот проект несколько по-другому. Из простого он превратился в надежду хоть немного поправить финансовое положение. Признаюсь, чувствую себя виноватым за такой меркантильный подход, но я не без причин в этом году отказался от путешествий по Азии.
Прочитал удалённый кусочек вашего комментария на почте, думаю разумно будет дать больше пояснений. 609 492 049 920 - это математический предел уникальных и правильных сеток которые можно сгенерировать из одной базовой не нарушая при этом правила Судоку. Операция остатка от деления (A % B) работает как кольцевой счетчик, как циферблат. В результате выражение seedBigInt % 609492049920 всегда выдаст нам число от 0 до 609492049919. Получив это итоговое число PermutationsReader начинает его распаковывать в обратном порядке: делит N на 362880 (9!, используются системы счисления перестановок, 362880 для цифр и 6 для блоков), берет остаток и понимает: цифры меняем вот по такой схеме, само число N уменьшается, мы отрезали от него часть данных, дальше делит остаток на 6 и понимает: строки меняем так, и так до тех пор пока от огромного не останется ноль а сетка не будет полностью перемешана уникальным образом. прочитал данные -> сдвинулся -> прочитал следующие -> сдвинулся Таким образом достигается жесткая биекция.
К сожалению пока нигде. Хочется сделать apk для андроид, но каникулы подходят к концу. В понедельник на работу, школьные чаты уже о себе напоминают и моё "приключение" вот-вот закончится. Теперь любая работа над этим проектом будет продвигаться гораздо медленнее. Вероятно через какое-то неопределённое время я смогу поделиться результатами.
Блоки с явным указанием 3! и 9! выглядят страшновато, тем более что это всегда факториал от длины массива. Изящнее был бы какой-нибудь класс-помощник которому можно было передать N и запрашивать перестановки, при этом он сам бы внутри менял N.
"Don't Repeat Yourself" ). Вы правы, так будет почище.
Программа поддерживает изменение сложности "на лету" (ползунок на скриншоте). От 5 до 0 отображаемых цифр подсказок, и от 0 до 4 скрываемых/отображаемых знака больше меньше. То какие цифры и знаки будут скрываться и в какой последовательности, определяет сид, то есть для каждого сида будет всегда своя одинаковая уникальная последовательность отображения подсказок.
Спасибо. Думаю в этом проекте ещё есть парочка интересных решений которыми здорово будет поделиться с такими же новичками как я. Обязательно напишу об этом статью. К тому же я перевёл своё приложение на 36 языков включая Ассемблер, Яваскрипт и Эльфийский, для этого тоже пришлось провести занимательное исследование)
Честно говоря, где-то на тысячной строчке кода, примерно на моменте когда я писал логику обхода мёртвых паттернов, я стал смотреть на этот проект несколько по-другому. Из простого он превратился в надежду хоть немного поправить финансовое положение. Признаюсь, чувствую себя виноватым за такой меркантильный подход, но я не без причин в этом году отказался от путешествий по Азии.
Прочитал удалённый кусочек вашего комментария на почте, думаю разумно будет дать больше пояснений.
609 492 049 920 - это математический предел уникальных и правильных сеток которые можно сгенерировать из одной базовой не нарушая при этом правила Судоку. Операция остатка от деления (A % B) работает как кольцевой счетчик, как циферблат. В результате выражение seedBigInt % 609492049920 всегда выдаст нам число от 0 до 609492049919. Получив это итоговое число PermutationsReader начинает его распаковывать в обратном порядке:
делит N на 362880 (9!, используются системы счисления перестановок, 362880 для цифр и 6 для блоков),
берет остаток и понимает: цифры меняем вот по такой схеме,
само число N уменьшается, мы отрезали от него часть данных,
дальше делит остаток на 6 и понимает: строки меняем так,
и так до тех пор пока от огромного не останется ноль а сетка не будет полностью перемешана уникальным образом.
прочитал данные -> сдвинулся -> прочитал следующие -> сдвинулся
Таким образом достигается жесткая биекция.
К сожалению пока нигде. Хочется сделать apk для андроид, но каникулы подходят к концу. В понедельник на работу, школьные чаты уже о себе напоминают и моё "приключение" вот-вот закончится. Теперь любая работа над этим проектом будет продвигаться гораздо медленнее. Вероятно через какое-то неопределённое время я смогу поделиться результатами.
"Don't Repeat Yourself" ). Вы правы, так будет почище.
Программа поддерживает изменение сложности "на лету" (ползунок на скриншоте). От 5 до 0 отображаемых цифр подсказок, и от 0 до 4 скрываемых/отображаемых знака больше меньше. То какие цифры и знаки будут скрываться и в какой последовательности, определяет сид, то есть для каждого сида будет всегда своя одинаковая уникальная последовательность отображения подсказок.