Sua tarefa é gerar um gráfico com 54 vértices, cada um corresponde a uma faceta no cubo de Rubik. Há uma aresta entre dois vértices se as facetas correspondentes compartilham um lado.
Regras
- Você pode optar por gerar uma lista de adjacências, matriz de adjacências, lista de arestas ou qualquer formato razoável para representar um gráfico em um algoritmo. (Um gráfico visual legível por um ser humano geralmente não é um formato razoável em um algoritmo na maioria dos casos.)
- Você pode criar cada vértice adjacente a ele ou nenhum adjacente a ele.
- Você pode incluir ambas as direções para cada aresta (contar uma ou duas vezes para auto-loops) ou produzir exatamente uma vez para cada aresta, mas não misturar as maneiras.
- Você pode renumerar os vértices, pular alguns números ou até usar rótulos que não sejam números para os vértices da maneira que desejar. Você também deve postar a numeração, se não for óbvio, para que outras pessoas possam verificar sua resposta de maneiras mais fáceis.
- Isso é código-golfe. O menor código em bytes vence.
Saída de exemplo
Esta é a numeração de vértices usados no exemplo:
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
Saída como uma lista de adjacência (o número do vértice antes de cada lista é opcional):
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]
fonte
Ruby , 79 bytes
Experimente online!
Imprime uma representação de um gráfico unidirecional, como uma lista dos vértices à direita e abaixo de cada vértice, conforme mostrado no mapa abaixo.
fonte
Python 2.7, 145
Experimente online!
Define uma matriz de adjacência
x
como uma lista de listas de valores booleanos. As facetas contam como adjacentes a si mesmas.p(n)
calcula as coordenadas do centro da n-ésima faceta de um cubo 3x3x3 cujas facetas têm 2 unidades de diâmetro. A adjacência é determinada testando se 2 facetas têm uma distância quadrada abaixo de 5 (facetas adjacentes têm distância quadrada no máximo 4, facetas não adjacentes têm distância quadrada pelo menos 6).fonte
Carvão , 48 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Gere todos os conjuntos de coordenadas tridimensionais no intervalo
[0..6]
para cada dimensão.Mantenha apenas as coordenadas que são centros de
2x2
quadrados em uma das facesx=0
,y=0
,z=0
,x=6
,y=6
,z=6
.Para cada coordenada, imprima os índices dessas coordenadas cuja distância do táxi é 2.
Os vértices são numerados da seguinte maneira:
fonte
Wolfram Language 190 bytes
A seguir, retorna todas as arestas do gráfico em termos das coordenadas reais (assumindo que cada minicubo esteja com 2 unidades na aresta e o cubo de Rubik tenha seu vértice inferior esquerdo na origem).
O trabalho de gerar os pontos em cada faceta externa é realizado pela função
h
,. Ele deve ser chamado 3 vezes para gerar os pontos em x = 0, x = 6; y = 0, y = 6; e z = 0, z = 6.Cada ponto da faceta que está a uma distância de Manhattan de 2 unidades de outro será conectado ao respectivo ponto.
Podemos exibir as arestas do gráfico visualmente da seguinte forma;
a
é a lista de arestas do gráfico que são representadas abaixo como setas.A seguir, mostramos o cubo de Rubik, os pontos nas facetas externas e as 8 arestas do gráfico.
Pontos vermelhos estão localizados nas facetas em y = 0 e y = 6; pontos azuis e cinza estão nas facetas em x = 6 ex = 0, respectivamente; pontos pretos estão nas facetas em z = 6 e z = 0.
fonte
Ferrugem - 278 bytes
Experimente em play.rust-lang.org
É grande, mas o menor código para uma linguagem compilada (até agora). Ele cria uma lista de adjacência. É muito parecido com a resposta python do postcard_box, mas eu queria ver se o Quaternions poderia funcionar.
Etapa 1: Construa 54 Quaternions, cada um representando uma única faceta.
Etapa 2: para cada Quaternion, liste todos os outros Quaternions com Quadrance (também conhecida como distância ao quadrado, ou norma ao quadrado da diferença) <= 4.
Os quaternions são construídos da seguinte maneira: os vetores imaginários ijk são pontos na casca de uma grade, de -2, -2, -2 a 2,2,2, etapa 2. A parte real w é sempre -1, 0 ou 1, de modo que facetas em lados opostos do cubo tenham a mesma parte real, mas os lados adjacentes tenham diferentes partes reais. A parte real permite distinguir diferentes 'lados' do cubo através do cálculo.
Numeração de quaternário (vista 3d pseudo-isométrica de um cubo):
Numeração indexada (cubo desdobrado):
fonte
JavaScript (ES6, Navegador), 153 bytes
Experimente online!
JavaScript (ES6, Navegador), 158 bytes
Experimente online!(simula
alert
comconsole.log
)[a, b]
fonte