Tugas Anda adalah untuk menghasilkan grafik dengan 54 simpul, masing-masing sesuai dengan segi pada kubus Rubik. Ada tepi antara dua simpul jika sisi yang sesuai berbagi sisi.
Aturan
- Anda dapat memilih untuk menampilkan daftar adjacency, matriks adjacency, daftar tepi, atau format apa pun yang masuk akal untuk mewakili grafik dalam suatu algoritma. (Grafik visual yang dapat dibaca oleh manusia umumnya bukan format yang masuk akal dalam suatu algoritma dalam kebanyakan kasus.)
- Anda dapat membuat setiap simpul berdekatan dengan dirinya sendiri, atau tidak ada yang berdekatan dengan dirinya sendiri.
- Anda dapat memasukkan kedua arah untuk setiap sisi (hitung satu atau dua kali untuk putaran sendiri), atau hasilkan tepat satu kali untuk setiap sisi, tetapi tidak mencampur cara.
- Anda dapat memberi nomor baru pada simpul, melewati beberapa angka, atau bahkan menggunakan label non-angka untuk simpul dengan cara apa pun yang Anda inginkan. Anda juga harus memposting penomoran jika tidak jelas, sehingga orang lain dapat memeriksa jawaban Anda dengan cara yang lebih mudah.
- Ini adalah kode-golf. Kode terpendek dalam byte menang.
Contoh output
Ini adalah penomoran simpul yang digunakan dalam contoh:
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
Output sebagai daftar adjacency (nomor vertex sebelum setiap daftar adalah opsional):
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]
sumber
Ruby , 79 byte
Cobalah online!
Mencetak representasi grafik searah, sebagai daftar simpul di sebelah kanan dan di bawah setiap simpul seperti yang ditunjukkan pada peta di bawah ini.
sumber
Python 2.7, 145
Cobalah online!
Menentukan matriks kedekatan
x
sebagai daftar daftar nilai boolean. Aspek dianggap berdampingan dengan diri mereka sendiri.p(n)
menghitung koordinat pusat segi ke-3 dari kubus 3x3x3 yang memiliki 2 unit. Adjacency ditentukan dengan menguji apakah 2 faset memiliki jarak kuadrat di bawah 5 (faset yang berdekatan memiliki jarak kuadrat paling banyak 4, faset yang tidak berdekatan memiliki jarak kuadrat setidaknya 6).sumber
Arang , 48 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Hasilkan semua set koordinat 3 dimensi dalam rentang
[0..6]
untuk setiap dimensi.Jauhkan hanya mereka koordinat yang merupakan pusat
2x2
kotak pada salah satu wajahx=0
,y=0
,z=0
,x=6
,y=6
,z=6
.Untuk setiap koordinat, cetak indeks koordinat tersebut yang jarak taksinya 2.
Simpul diberi nomor sebagai berikut:
sumber
Bahasa Wolfram 190 byte
Berikut ini mengembalikan semua tepi grafik dalam hal koordinat aktual (dengan asumsi masing-masing mini-cube adalah 2 unit di tepi dan kubus Rubik memiliki simpul kiri bawah pada titik asal).
Pekerjaan menghasilkan poin pada setiap sisi eksternal dilakukan oleh fungsi
h
,. Itu harus dipanggil 3 kali untuk menghasilkan titik pada x = 0, x = 6; y = 0, y = 6; dan z = 0, z = 6.Setiap titik segi yang berjarak Manhattan 2 unit dari yang lain akan terhubung ke titik masing-masing.
Kami dapat menampilkan tepi grafik secara visual dengan mengikuti;
a
adalah daftar tepi grafik yang direpresentasikan di bawah ini sebagai panah.Berikut ini menunjukkan kubus Rubik, titik-titik pada aspek eksternal, dan 8 tepi grafik.
Titik-titik merah terletak pada aspek di y = 0 dan y = 6; titik-titik biru dan abu-abu berada pada faset pada x = 6 dan x = 0, masing-masing; titik-titik hitam berada pada faset pada z = 6 dan z = 0.
sumber
Karat - 278 byte
Coba di play.rust-lang.org
Ini besar, tetapi kode terkecil untuk bahasa yang dikompilasi (sejauh ini). Ini membuat daftar adjacency. Sangat mirip dengan jawaban python cardboard_box tapi saya ingin melihat apakah Quaternions bisa bekerja.
Langkah 1: Bangun 54 Kuarter, masing-masing mewakili satu sisi.
Langkah 2: untuk setiap Quaternion, daftarkan semua Quaternion lain dengan Quadrance (alias kuadrat jarak, alias kuadrat norma perbedaan) <= 4.
Quaternions dibangun seperti ini: Vektor imajiner ijk adalah titik-titik pada cangkang kisi, dari -2, -2, -2 hingga 2,2,2, langkah 2. Bagian nyata w selalu -1, 0, atau 1, sehingga sisi-sisi pada sisi yang berlawanan dari kubus memiliki bagian nyata yang sama, tetapi sisi yang berdekatan memiliki bagian nyata yang berbeda. Bagian yang sebenarnya memungkinkan membedakan 'sisi' kubus yang berbeda melalui perhitungan.
Penomoran Quaternion (tampilan 3d kubus isometrik semu):
Penomoran berindeks (kubus dilipat):
sumber
JavaScript (ES6, Browser), 153 byte
Cobalah online!
JavaScript (ES6, Browser), 158 byte
Cobalah online! (disimulasikan
alert
denganconsole.log
)[a, b]
sumber