Мы можем представить кубик Рубика в виде сети следующим образом (при решении):
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
Каждая буква представляет соответствующий цвет ( W
белый, G
зеленый и т. Д.)
Это было показано , что существует ровно (~ нониллион) различных перестановок , что кубик Рубика может быть в.
Ваша задача - взять целое число от до и вывести соответствующую перестановку, как показано выше. Вы можете выбрать порядок упорядочения перестановок, но должен быть показан алгоритм, который вы используете, чтобы сгенерировать уникальную и правильную перестановку для каждого возможного ввода.
Неверные правила перестановки
Взято с этой страницы
Начнем с того, что центр каждой грани 3х3 должен оставаться неизменным, поскольку центральный квадрат кубика Рубика не может вращаться. Весь куб можно вращать, меняя положение лица, но это не влияет на сеть куба.
Если мы скажем, что каждая перестановка имеет четность, основанную на четности числа перестановок для достижения этой перестановки, мы можем сказать,
Каждая угловая часть имеет три возможных направления. Он может быть ориентирован правильно (0), по часовой стрелке (1) или против часовой стрелки (2). Сумма угловых ориентаций всегда остается делимой на 3
Каждое допустимое вращение на кубике Рубика всегда переворачивает четное число ребер, поэтому не может быть только одна часть, ориентированная неправильно.
Учитывая перестановку всех углов и ребер, общая четность должна быть четной, что означает, что каждый допустимый ход всегда выполняет эквивалент четного числа свопов (игнорируя ориентацию)
Например, следующие три сети являются недействительными выходами:
WWW
WWW
WWW
GGGWWWBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
(Too many whites/not enough reds)
WRW
WRW
WRW
GGGRWRBBBOOO
GGGWRRBBBOOO
YYGRWROOOBBB
YYY
GGY
YYY
(There are two red/green center squares and no white/yellow center squares.
In all valid permutations, the center squares are all different colours)
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBOYOO
YYY
YYY
YYB
(The yellow/orange/blue corner is rotated into an impossible permutation)
правила
- Вы должны доказать, как вы хотите, что алгоритм действителен. Вам не нужно перечислять каждую перестановку, если вы доказываете правильность своего алгоритма.
- Вы должны включить какое-то подтверждение действительности в свой ответ. Это доказательство может подтвердить правильность любого принятого метода доказательства, за исключением перечисления всех возможностей.
- Вы можете использовать альтернативный метод ввода, если хотите, если:
- Вход ограничен
- Каждый вход соответствует уникальному выходу
- Вы четко объясняете формат ввода и как он соответствует каждому выходу
- Вы можете изменить символы, используемые для использования 6 различных символов ASCII, между 33 (
!
) и 126 (~
) вместоWGRBOY
- Вы можете выводить любым способом, каким пожелаете, при условии, что он образует четкое представление куба, в котором могут быть показаны все 6 граней, включая любую действительную сеть куба, строку с одной подкладкой или 3D-рендеринг. Если вы не уверены в конкретном формате, не стесняйтесь спрашивать в комментариях.
Это код-гольф, поэтому выигрывает самый короткий код в байтах на каждом языке.
Пример допустимых выходов
YYY
YYY
YYY
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
WWW
WWW
WWW
(The `W` and `Y` faces have been swapped)
ZZZ
+++
+}}
+[[}77ZZ7bbb
bb[}[[7}}+Z7
bb[}++[}}+Z7
7bb
[7Z
[7Z
(To start with, the colours have been mapped W -> +, G -> b, R -> [, B -> }, O -> Z and Y -> 7.
Then, the moves L, R, U and F' have been applied, in that order.
Notice that each centre square is different, and corresponds to the same colour as in the mapping)
источник
Ответы:
Древесный уголь ,
334297 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите целое число в переменную
q
.Разделите
q
на 3⁷, положив остаток вe
. Затем, считаяe
число в базе 3,e
добавьте суффикс к цифре, чтобы ее цифры (в базе 3) складывались в кратное число 3. Это позволяетe
определить повороты углов.Разделите
q
на 8!, Положив остатокz
. (8! Временно сохраняетсяd
для сохранения байта.) Это позволяетz
определить положение углов.Разделите
q
на 2¹¹, положив остаток вh
. Затем, считаяh
число в базе 2,h
добавьте суффикс к цифре, чтобы ее цифры (в базе 2) складывались в кратное число 2. Это позволяетh
определить перевороты ребер.Зацикливание на строковом представлении центров.
Перепрыгните в положение каждого центра и распечатайте его.
Отслеживайте соотношение угловых положений в переменной
w
.Создайте массив угловых позиций.
Создайте массив угловых цветов.
Цикл дважды, один раз для углов, один раз для краев, именуемый в дальнейшем «кубиками».
Цикл по массиву цветов куба.
Извлечь следующую позицию куба
z
, обновив паритет вw
. Используйте это соотношение для последнего, но одного ребра. Это гарантирует, что сумма четности ребер и углов будет четной.Напечатайте куб в этой позиции, скорректированный для следующего поворота или переверните в зависимости от ситуации.
Уберите вращение или переверните с
e
.Создайте массив позиций ребер. Это будет использоваться второй раз в цикле.
Создайте массив краевых цветов.
Перезапись угловой переменных
z
иe
с соответствующим краевым переменнымиq
иh
так, чтобы края переставляются и перевернутыми во втором проходе цикла.источник
Рубин ,
570408 байтПопробуйте онлайн!
Оригинальная версия, с массивами магических чисел вместо волшебных строк
Попробуйте онлайн!
Анонимная функция, которая в своем текущем виде принимает два целых числа, что, по-видимому, разрешено: «вы можете выбрать альтернативный метод ввода». Первая - это перестановка в диапазоне от 0 до,
12!*8!/2 - 1
а вторая - ориентация фигур в диапазоне от 0 до2**11 * 3*7 - 1
. Выход в разрешенном состоянии является следующей строкой:Дальнейший гольф
Осталось сохранить еще примерно 10 символов, изменив формат вывода на следующую форму. Но это уменьшит читабельность, поэтому я не буду делать это в настоящее время
объяснение
перестановка
Внутри решенное состояние представлено серией восьмеричных чисел в массиве
a
. Входные данныеg
делятся на числа12..1
с модулем, используемым для выбора и удаления ребраa
и его размещенияz
. Когда это сделано, остаются только углыa
, поэтомуg
делится на числа8..1
с модулем, используемым для удаления углаa
и помещения его вz
.Поскольку для определения порядка двух последних углов недостаточно информации, значение
g
будет разделено на ноль к моменту их достижения, поэтому они всегда будут добавляться кz
в исходном порядке. Затем выполняется проверка, чтобы определить, является ли общая перестановка четной или нечетной, и, если необходимо, последние два угла меняются местами, чтобы сделать перестановку четной.ориентация
Существуют различные способы определения правильности ориентации угла или кромки, если они не находятся в определенном месте. Для целей этого ответа угол рассматривается в правильной ориентации, если он показан
0
или1
на верхней или нижней грани. Поэтому поворот верхней или нижней грани не меняет ориентацию угла. Вращение других граней меняет ориентацию, но таким образом, что общая сумма четности остается неизменной. Края рассматриваются в правильной ориентации, если они показывают a2
или4
вперед / назад или a3
или5
влево / вправо. Это означает, что вращение вершины или низа на четверть оборота переворачивает четыре ребра, но вращение других граней оставляет статус переворота неизменным.Вход содержит явную информацию для всех, кроме первого ребра и последнего угла. 11 младших разрядов
h%2048
суммируются, а модуль используется для определения ориентации первого ребра.h
умножается на 2 путем добавления его к себе, а значение для ориентации первого ребра добавляется как младший значащий бит. Ориентация последнего угла определяется путем постепенного вычитания ориентации других угловj
. Для самого последнего угла (гдеi/19
=1
)j%3
добавляется значениеh
(которое будет уменьшено до нуля), и это определяет ориентацию последнего угла.Строка
b
поставляется с инициализацией текста для центров граней.h
делится в2
двенадцать раз, затем в3
восемь раз, с модулями, используемыми для определения ориентации кусков. В каждом случае число inz
преобразуется в строку с соответствующим количеством цифр (2 или 3), а затем строка дублируется. Это позволяет извлечь из строки правильное вращение цифр, найденное по модулю, путем индексации и добавления кb
дисплей
Наконец, необработанные стикеры копируются
b
в более понятный для человека формат сs
использованием магических чисел в индексной таблице.источник