Votre tâche consiste à générer un graphique avec 54 sommets, chacun correspondant à une facette sur un cube Rubik. Il y a un bord entre deux sommets si les facettes correspondantes partagent un côté.
Règles
- Vous pouvez choisir de sortir une liste d'adjacence, une matrice d'adjacence, une liste de bords ou tout autre format raisonnable pour représenter un graphique dans un algorithme. (Un graphique visuel lisible par un humain n'est généralement pas un format raisonnable dans un algorithme dans la plupart des cas.)
- Vous pouvez créer soit chaque sommet adjacent à lui-même, soit aucun à côté de lui-même.
- Vous pouvez soit inclure les deux directions pour chaque bord (compter une ou deux fois pour les boucles automatiques), soit produire une seule fois pour chaque bord, mais ne pas mélanger les façons.
- Vous pouvez renuméroter les sommets, ignorer certains nombres ou même utiliser des étiquettes non numériques pour les sommets comme vous le souhaitez. Vous devez également publier la numérotation si elle n'est pas évidente, afin que d'autres puissent vérifier votre réponse de manière plus simple.
- C'est du code-golf. Le code le plus court en octets gagne.
Exemple de sortie
Il s'agit de la numérotation des sommets utilisée dans l'exemple:
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
Sortie sous forme de liste d'adjacence (le numéro de sommet avant chaque liste est facultatif):
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]
Rubis , 79 octets
Essayez-le en ligne!
Imprime une représentation d'un graphique unidirectionnel, sous la forme d'une liste des sommets à droite et en dessous de chaque sommet, comme indiqué dans la carte ci-dessous.
la source
Python 2.7, 145
Essayez-le en ligne!
Définit une matrice d'adjacence
x
comme une liste de listes de valeurs booléennes. Les facettes comptent comme étant adjacentes à elles-mêmes.p(n)
calcule les coordonnées du centre de la nième facette d'un cube 3x3x3 dont les facettes ont 2 unités de diamètre. L'adjacence est déterminée en testant si 2 facettes ont une distance carrée inférieure à 5 (les facettes adjacentes ont une distance carrée au plus 4, les facettes non adjacentes ont une distance carrée au moins 6).la source
Fusain , 48 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Générez tous les ensembles de coordonnées tridimensionnelles dans la plage
[0..6]
pour chaque dimension.Gardez uniquement les coordonnées qui sont des centres de
2x2
carrés sur une des facesx=0
,y=0
,z=0
,x=6
,y=6
,z=6
.Pour chaque coordonnée, imprimez les indices des coordonnées dont la distance taxis est de 2.
Les sommets sont numérotés comme suit:
la source
Langue Wolfram 190 octets
Ce qui suit renvoie toutes les arêtes du graphique en termes de coordonnées réelles (en supposant que chaque mini-cube est de 2 unités à l'arête et que le cube de Rubik a son sommet inférieur gauche à l'origine).
Le travail de génération des points sur chaque facette externe est effectué par la fonction
h
,. Il faut l'appeler 3 fois pour générer les points à x = 0, x = 6; y = 0, y = 6; et z = 0, z = 6.Chaque point de facette qui est à une distance de Manhattan de 2 unités les unes des autres sera connecté au point respectif.
Nous pouvons afficher visuellement les bords du graphique de la manière suivante;
a
est la liste des bords du graphique qui sont représentés ci-dessous sous forme de flèches.Ce qui suit montre le cube de Rubik, les points sur les facettes externes et 8 arêtes de graphique.
Les points rouges sont situés sur les facettes à y = 0 et y = 6; les points bleus et gris sont sur les facettes à x = 6 et x = 0, respectivement; les points noirs sont sur les facettes à z = 6 et z = 0.
la source
Rouille - 278 octets
Essayez sur play.rust-lang.org
C'est gros, mais le plus petit code pour un langage compilé (jusqu'à présent). Il crée une liste d'adjacence. C'est très similaire à la réponse python de cardboard_box mais je voulais voir si les Quaternions pouvaient fonctionner.
Étape 1: Construisez 54 Quaternions, chacun représentant une seule facette.
Étape 2: pour chaque Quaternion, énumérez tous les autres Quaternions avec Quadrance (aka distance quadratique, aka norme quadratique de la différence) <= 4.
Les quaternions sont construits comme suit: Les vecteurs imaginaires ijk sont des points sur la coque d'une grille, de -2, -2, -2 à 2,2,2, étape 2. La partie réelle w est toujours -1, 0 ou 1, de sorte que les facettes des côtés opposés du cube ont la même partie réelle, mais les côtés adjacents ont des parties réelles différentes. La partie réelle permet de distinguer différents «côtés» du cube par le calcul.
Numérotation des quaternions (vue pseudo-isométrique 3D d'un cube):
Numérotation indexée (cube déplié):
la source
JavaScript (ES6, navigateur), 153 octets
Essayez-le en ligne!
JavaScript (ES6, navigateur), 158 octets
Essayez-le en ligne! (simule
alert
avecconsole.log
)[a, b]
la source