Ваша задача - создать граф с 54 вершинами, каждая из которых соответствует фасету куба Рубика. Между двумя вершинами есть ребро, если соответствующие грани имеют общую сторону.
правила
- Вы можете выбрать вывод списка смежности, матрицы смежности, списка ребер или любого приемлемого формата для представления графа в алгоритме. (Визуальный график, читаемый человеком, в большинстве случаев не является приемлемым форматом алгоритма.)
- Вы можете сделать либо каждую вершину смежной с собой, либо ни одну смежную с самой собой.
- Вы можете либо включить оба направления для каждого ребра (сосчитать один или два раза для самостоятельных петель), либо вывести ровно один раз для каждого ребра, но не смешивать пути.
- Вы можете изменить нумерацию вершин, пропустить некоторые числа или даже использовать ненулевые метки для вершин любым удобным для вас способом. Вы также должны опубликовать нумерацию, если она не очевидна, чтобы другие могли проверить ваш ответ более легкими способами.
- Это код-гольф. Самый короткий код в байтах побеждает.
Пример вывода
Это нумерация вершин, использованная в примере:
0 1 2
3 4 5
6 7 8
9 10 11 18 19 20 27 28 29 36 37 38
12 13 14 21 22 23 30 31 32 39 40 41
15 16 17 24 25 26 33 34 35 42 43 44
45 46 47
48 49 50
51 52 53
Вывести в виде списка смежности (число вершин перед каждым списком необязательно):
0 [1 3 9 38]
1 [2 4 0 37]
2 [29 5 1 36]
3 [4 6 10 0]
4 [5 7 3 1]
5 [28 8 4 2]
6 [7 18 11 3]
7 [8 19 6 4]
8 [27 20 7 5]
9 [10 12 38 0]
10 [11 13 9 3]
11 [18 14 10 6]
12 [13 15 41 9]
13 [14 16 12 10]
14 [21 17 13 11]
15 [16 51 44 12]
16 [17 48 15 13]
17 [24 45 16 14]
18 [19 21 11 6]
19 [20 22 18 7]
20 [27 23 19 8]
21 [22 24 14 18]
22 [23 25 21 19]
23 [30 26 22 20]
24 [25 45 17 21]
25 [26 46 24 22]
26 [33 47 25 23]
27 [28 30 20 8]
28 [29 31 27 5]
29 [36 32 28 2]
30 [31 33 23 27]
31 [32 34 30 28]
32 [39 35 31 29]
33 [34 47 26 30]
34 [35 50 33 31]
35 [42 53 34 32]
36 [37 39 29 2]
37 [38 40 36 1]
38 [9 41 37 0]
39 [40 42 32 36]
40 [41 43 39 37]
41 [12 44 40 38]
42 [43 53 35 39]
43 [44 52 42 40]
44 [15 51 43 41]
45 [46 48 17 24]
46 [47 49 45 25]
47 [33 50 46 26]
48 [49 51 16 45]
49 [50 52 48 46]
50 [34 53 49 47]
51 [52 44 15 48]
52 [53 43 51 49]
53 [35 42 52 50]
Рубин , 79 байтов
Попробуйте онлайн!
Печатает представление однонаправленного графа в виде списка вершин справа и ниже каждой вершины, как показано на карте ниже.
источник
Python 2.7, 145
Попробуйте онлайн!
Определяет матрицу смежности
x
как список списков логических значений. Грани считаются смежными с самим собой.p(n)
вычисляет координаты центра n-й грани куба 3x3x3, грани которого имеют ширину 2 единицы. Смежность определяется путем тестирования, если 2 грани имеют квадратное расстояние меньше 5 (смежные грани имеют квадратное расстояние не более 4, несмежные грани имеют квадратное расстояние не менее 6).источник
Древесный уголь , 48 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Генерация всех наборов трехмерных координат в диапазоне
[0..6]
для каждого измерения.Держите только те координаты , которые являются центрами
2x2
квадратов на одной из гранейx=0
,y=0
,z=0
,x=6
,y=6
,z=6
.Для каждой координаты выведите индексы тех координат, расстояние такси которых равно 2.
Вершины нумеруются следующим образом:
источник
Wolfram Language 190 байт
Следующее возвращает все ребра графа в терминах фактических координат (при условии, что каждый мини-куб имеет 2 единицы на ребре, а куб Рубика имеет свою нижнюю левую вершину в начале координат).
Работа по генерации точек на каждом внешнем фасете выполняется функцией
h
. Он должен вызываться 3 раза, чтобы генерировать точки при x = 0, x = 6; у = 0, у = 6; и z = 0, z = 6.Каждая точка фасета, которая является манхэттенским расстоянием в 2 единицы от другого, будет связана с соответствующей точкой.
Мы можем визуально отобразить края графика следующим образом;
a
список ребер графа, представленных ниже стрелкамиНиже показан кубик Рубика, точки на внешних гранях и 8 ребер графа.
Красные точки расположены на гранях при y = 0 и y = 6; синие и серые точки находятся на гранях при x = 6 и x = 0 соответственно; черные точки на гранях при z = 6 и z = 0.
источник
Ржавчина - 278 байт
Попробуйте на play.rust-lang.org
Это большой, но самый маленький код для скомпилированного языка (пока). Создает список смежности. Это очень похоже на ответ Python картонной коробки, но я хотел посмотреть, может ли Quaternions работать.
Шаг 1: Построить 54 кватерниона, каждый из которых представляет один аспект.
Шаг 2: для каждого кватерниона перечислите все остальные кватернионы с квадрантом (он же квадрат расстояния, он же квадрат нормы разности) <= 4.
Кватернионы построены следующим образом: мнимые векторы ijk - это точки на оболочке сетки, от -2, -2, -2 до 2,2,2, шаг 2. Действительная часть w всегда равна -1, 0 или 1, так что грани на противоположных сторонах куба имеют одинаковую действительную часть, но смежные стороны имеют разные действительные части. Действительная часть позволяет различать разные «стороны» куба посредством расчета.
Кватернионная нумерация (псевдоизометрический трехмерный вид куба):
Индексированная нумерация (развернутый куб):
источник
JavaScript (ES6, браузер), 153 байта
Попробуйте онлайн!
Это изменено, чтобы уменьшить 5 байтов, делая такие же точки смежными, т.е.| | A - B | | ≤1 ,
JavaScript (ES6, браузер), 158 байт
Попробуйте онлайн! (имитирует
alert
сconsole.log
)Сопоставляет центр всех 54 граней с трехмерным пространством и вычисляет,0 < | | A - B | | ≤ 1 за каждую пару очков. Вывод всех направленных ребер в виде пар чисел
[a, b]
. Карта вершинисточник