Twoim zadaniem jest wygenerowanie wykresu z 54 wierzchołkami, z których każdy odpowiada aspektowi na kostce Rubika. Pomiędzy dwoma wierzchołkami znajduje się krawędź, jeśli odpowiednie fasety mają wspólny bok.
Zasady
- Możesz zdecydować się na wydrukowanie listy sąsiedztwa, macierzy sąsiedztwa, listy krawędzi lub dowolnego rozsądnego formatu do przedstawienia wykresu w algorytmie. (Graficzny wykres czytelny dla człowieka zazwyczaj nie jest rozsądnym formatem w algorytmie w większości przypadków).
- Możesz ustawić każdy wierzchołek przylegający do siebie lub żaden przylegający do siebie.
- Możesz albo uwzględnić oba kierunki dla każdej krawędzi (policzyć jeden lub dwa razy dla pętli własnych), albo wypisywać dokładnie jeden raz dla każdej krawędzi, ale nie mieszaj różnych sposobów.
- Możesz przenumerować wierzchołki, pominąć niektóre liczby, a nawet użyć etykiet numerycznych dla wierzchołków w dowolny sposób. Powinieneś również opublikować numerację, jeśli nie jest to oczywiste, aby inni mogli sprawdzić twoją odpowiedź w łatwiejszy sposób.
- To jest golf golfowy. Najkrótszy kod w bajtach wygrywa.
Przykładowe dane wyjściowe
Oto numeracja wierzchołków użytych w przykładzie:
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
Dane wyjściowe jako lista sąsiadów (numer wierzchołka przed każdą listą jest opcjonalny):
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]
źródło
Rubinowy , 79 bajtów
Wypróbuj online!
Drukuje reprezentację wykresu jednokierunkowego jako listę wierzchołków po prawej i poniżej każdego wierzchołka, jak pokazano na poniższej mapie.
źródło
Python 2.7, 145
Wypróbuj online!
Definiuje macierz przylegania
x
jako listę list wartości boolowskich. Aspekty liczą się jako przylegające do siebie.p(n)
oblicza współrzędne środka n-tego aspektu sześcianu 3x3x3, którego aspekty mają szerokość 2 jednostek. Adiacyję określa się, sprawdzając, czy 2 aspekty mają odległość kwadratową poniżej 5 (sąsiednie aspekty mają odległość kwadratową co najwyżej 4, a sąsiednie aspekty mają odległość kwadratową co najmniej 6).źródło
Węgiel drzewny , 48 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wygeneruj wszystkie zestawy trójwymiarowych współrzędnych w zakresie
[0..6]
dla każdego wymiaru.Zachować tylko te współrzędne, które są ośrodkami
2x2
kwadratów na jednej z powierzchnix=0
,y=0
,z=0
,x=6
,y=6
,z=6
.Dla każdej współrzędnej wydrukuj indeksy tych współrzędnych, których odległość od taksówki wynosi 2.
Wierzchołki są ponumerowane w następujący sposób:
źródło
Język Wolfram 190 bajtów
Poniższe zwraca wszystkie krawędzie wykresu pod względem rzeczywistych współrzędnych (zakładając, że każdy mini-sześcian ma 2 jednostki na krawędzi, a sześcian Rubika ma dolny lewy wierzchołek u początku).
Prace generowania punktów na każdym aspekcie zewnętrznym odbywa się poprzez funkcji
h
. Należy go wywołać 3 razy, aby wygenerować punkty przy x = 0, x = 6; y = 0, y = 6; i z = 0, z = 6.Każdy punkt ścianki, który jest odległością 2 jednostek na Manhattanie, zostanie połączony z odpowiednim punktem.
Możemy wyświetlić krawędzie wykresu wizualnie w następujący sposób;
a
to lista krawędzi wykresu, które są przedstawione poniżej jako strzałki.Poniżej pokazano sześcian Rubika, punkty na zewnętrznych ściankach i 8 krawędzi wykresu.
Czerwone kropki znajdują się na ściankach przy y = 0 i y = 6; niebieskie i szare kropki znajdują się na aspektach odpowiednio przy x = 6 i x = 0; czarne kropki są na aspektach przy z = 6 i z = 0.
źródło
Rdza - 278 bajtów
Spróbuj na play.rust-lang.org
Jest to duży, ale najmniejszy kod dla skompilowanego języka (jak dotąd). Tworzy listę przylegania. Jest bardzo podobny do odpowiedzi pytona karton_box, ale chciałem sprawdzić, czy Quaternions może działać.
Krok 1: Zbuduj 54 czwartorzędy, z których każdy reprezentuje jeden aspekt.
Krok 2: dla każdej ćwiartki wypisz wszystkie pozostałe ćwiartki z kwadrantem (inaczej kwadratowa odległość, inaczej kwadratowa norma różnicy) <= 4.
Czwartorzędy są zbudowane w ten sposób: urojone wektory ijk są punktami na powłoce siatki, od -2, -2, -2 do 2,2,2, krok 2. Rzeczywista część w to zawsze -1, 0 lub 1, tak że ścianki po przeciwnych stronach sześcianu mają tę samą rzeczywistą część, ale sąsiednie boki mają różne rzeczywiste części. Rzeczywista część umożliwia rozróżnienie różnych „boków” sześcianu poprzez obliczenia.
Numeracja czwartorzędu (pseudo-izometryczny widok 3D sześcianu):
Indeksowana numeracja (rozłożona kostka):
źródło
JavaScript (ES6, przeglądarka), 153 bajty
Wypróbuj online!
Jest to modyfikowane w celu zmniejszenia 5 bajtów poprzez utworzenie tych samych punktów obok siebie, tj| | A - B | | ≤1 .
JavaScript (ES6, przeglądarka), 158 bajtów
Wypróbuj online! (symuluje
alert
zconsole.log
)Odwzorowuje środek wszystkich 54 aspektów na przestrzeń 3-d i oblicza, czy0 < | | A - B | | ≤ 1 za każdą parę punktów. Wysyła wszystkie skierowane krawędzie jako pary liczb
[a, b]
. Mapa wierzchołków toźródło