Вышел открытый проект Every Cube с отображением всех перестановок кубика Рубика (43 252 003 274 489 856 000 вариаций)

Разработчик Ален Йоханнан представил проект под названием Every Cube (веб-версия решения). Это визуальное (в 3D и 2D) отображение всех возможных вариантов перестановок оригинального кубика Рубика 3х3. В проекте можно посмотреть на 43 252 003 274 489 856 000 состояний головоломки.

«Этот проект представляет собой прокручиваемый индекс всех достижимых перестановок кубика Рубика (43 252 003 274 489 856 000), отображаемый в виде живого 3D‑куба, который изменяется при прокрутке. Базы данных нет. Каждое состояние генерируется на лету из индекса n с помощью функции ранжирования/уменьшения ранга по группе кубиков. Прокрутите (или перетащите линейку), и кубик обновится на месте. Первые несколько тысяч состояний — это лёгкие перестановки, а на линейке есть маркеры для нескольких известных комбинаций (суперпереворот, шахматная доска), чтобы вы могли сразу перейти к ним», — пояснил автор проекта.

Используемые технологии при разработке проекта: Next.js ((App Router), TypeScript, Tailwind и react‑three‑fiber для 3D‑визуализации. Отсутствует бэкенд и база данных, поэтому развёртывается как статическое приложение Next.js. При работе с кодом автору помогал ИИ‑ассистент Claude.

Как это работает

Любой индекс перестановки n разбивается на четыре стандартные координаты куба (перестановка углов и ребер, ориентация углов и ребер), упорядоченные таким образом, что низкие индексы изменяют только ориентацию. Кубик изначально собран и слегка перемешивается, прежде чем начнут действовать перестановки.

См. lib/cubeMath.ts для математических вычислений и lib/cubiePlacement.ts для преобразования в 3D-преобразования для каждой детали, между которыми детали могут физически анимироваться.

Известные паттерны на линейке (lib/patterns.ts) не являются жёстко заданными предположениями. Superflip строится на основе своего определения из учебника и проверяется с помощью обратного прохода через конвейер ранжирования. Шахматная доска создаётся с помощью небольшого, созданного с нуля механизма перемещения (lib/cubeMoves.ts) и проверяется на соответствие фактическим визуальным свойствам узора (каждая грань чередует два цвета), прежде чем разрешить её выпуск. Обе проверки выполняются при загрузке модуля, поэтому неправильный узор никогда не может появиться незаметно.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев