Bề mặt của khối 3x3x3 dưới dạng biểu đồ


18

Nhiệm vụ của bạn là tạo một biểu đồ với 54 đỉnh, mỗi đỉnh tương ứng với một khía cạnh trên khối Rubik. Có một cạnh giữa hai đỉnh iff các mặt tương ứng chia sẻ một mặt.

Quy tắc

  • Bạn có thể chọn xuất ra một danh sách kề, ma trận kề, danh sách cạnh hoặc bất kỳ định dạng hợp lý nào để biểu diễn một biểu đồ trong thuật toán. (Một đồ thị trực quan mà con người có thể đọc được thường không phải là định dạng hợp lý trong thuật toán trong hầu hết các trường hợp.)
  • Bạn có thể tạo mọi đỉnh liền kề với chính nó hoặc không có đỉnh nào liền kề với chính nó.
  • Bạn có thể bao gồm cả hai hướng cho mỗi cạnh (đếm một hoặc hai lần cho các vòng tự) hoặc xuất chính xác một lần cho mỗi cạnh, nhưng không trộn lẫn các cách.
  • Bạn có thể đánh số lại các đỉnh, bỏ qua một số số hoặc thậm chí sử dụng nhãn không phải số cho các đỉnh theo bất kỳ cách nào bạn muốn. Bạn cũng nên đăng số nếu không rõ ràng, để người khác có thể kiểm tra câu trả lời của bạn theo những cách dễ dàng hơn.
  • Đây là mã golf. Mã ngắn nhất trong byte thắng.

Ví dụ đầu ra

Đây là cách đánh số các đỉnh được sử dụng trong ví dụ:

          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

Xuất ra dưới dạng danh sách kề (số đỉnh trước mỗi danh sách là tùy chọn):

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]

Câu trả lời:


8

APL (Dyalog Classic) , 34 30 byte

-4 cảm ơn jimmy23013

4≥+/¨|∘.-⍨,(⍳3)∘.⌽7 ¯1∘.,○⍳3 3

Hãy thử trực tuyến!

đưa ra một ma trận kề với mỗi đỉnh liền kề với chính nó

⍳3 3 tạo ra một mảng (0 0)(0 1)(0 2)(1 0)(1 1)(1 2)(2 0)(2 1)(2 2)

nhân tất cả với số thập phân

7 ¯1∘., trả trước 7 hoặc -1 theo tất cả các cách có thể

(⍳3)∘.⌽ xoay ba lần tọa độ bằng 0 1 2 bước theo tất cả các cách có thể

+/¨|∘.-⍨, tính khoảng cách manhattan giữa mỗi cặp

4≥ nó không được lớn hơn 4 cho các khía cạnh lân cận


@ jimmy23013 sử dụng π rất đẹp :) cảm ơn bạn!
ngn

Ma trận 54x54 ... thật ấn tượng
đừng sáng

6

Ruby , 79 byte

54.times{|i|p [(i%6<5?i+1:i+18-i/6%3*7)%54,(i+=i%18<12?6:[18-i%6*7,3].max)%54]}

Hãy thử trực tuyến!

In một đại diện của đồ thị một chiều, như một danh sách các đỉnh ở bên phải và bên dưới mỗi đỉnh như trong bản đồ bên dưới.

 0  1  2  3  4  5   
 6  7  8  9 10 11   
12 13 14 15 16 17   
         18 19 20 21 22 23
         24 25 26 27 28 29
         30 31 32 33 34 35
                  36 37 38 39 40 41
                  42 43 44 45 46 47 
                  48 49 50 51 52 53

4

Con trăn 2.7, 145

def p(n):l=(3-n%2*6,n/6%3*2-2,n/18*2-2);k=n/2%3;return l[k:]+l[:k]
r=range(54)
x=[[sum((x-y)**2for x,y in zip(p(i),p(j)))<5for i in r]for j in r]

Hãy thử trực tuyến!

Xác định một ma trận kề xlà một danh sách các danh sách các giá trị boolean. Các khía cạnh được tính là liền kề với chính họ.

p(n)tính tọa độ tâm của mặt thứ n của khối 3x3x3 có các mặt có 2 đơn vị. Sự điều chỉnh được xác định bằng cách kiểm tra nếu 2 mặt có khoảng cách vuông dưới 5 (các mặt liền kề có khoảng cách vuông nhiều nhất là 4, các mặt không liền kề có khoảng cách vuông ít nhất là 6).


3

Than , 48 byte

F⁷F⁷F⁷⊞υ⟦ικλ⟧≔Φυ⁼Φ﹪ι⁶¬﹪λ²⟦⁰⟧υIEυΦLυ⁼²ΣE§υλ↔⁻ν§ιξ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

F⁷F⁷F⁷⊞υ⟦ικλ⟧

Tạo tất cả các bộ tọa độ 3 chiều trong phạm vi [0..6]cho mỗi thứ nguyên.

≔Φυ⁼Φ﹪ι⁶¬﹪λ²⟦⁰⟧υ

Chỉ giữ lại những tọa độ đó là trung tâm của 2x2hình vuông trên một trong những khuôn mặt x=0, y=0, z=0, x=6, y=6, z=6.

IEυΦLυ⁼²ΣE§υλ↔⁻ν§ιξ

Đối với mỗi tọa độ, in các chỉ số của các tọa độ có khoảng cách taxi là 2.

Các đỉnh được đánh số như sau:

         33 34 35
         21 22 23
          9 10 11
36 24 12  0  1  2 13 25 37 47 46 45
38 26 14  3  4  5 15 27 39 50 49 48
40 28 16  6  7  8 17 29 41 53 52 51
         18 19 20
         30 31 32
         42 43 44

Có tài liệu nào cho than trên web không?
don sáng

@donbright Theo liên kết GitHub trong tiêu đề câu trả lời và nhấp vào Wiki.
Neil

2

Ngôn ngữ Wolfram 190 byte

Sau đây trả về tất cả các cạnh của đồ thị theo tọa độ thực (giả sử mỗi khối lập phương nhỏ là 2 đơn vị ở cạnh và khối Rubik có đỉnh dưới cùng bên trái ở gốc).

t=Table;h[a_,b_,c_]:=t[{x,y,z},{a,1,5,2},{b,1,5,2},{c,0,6,6}];Partition[Sort[a=Cases[DeleteCases[Tuples[Flatten[{h[x,z,y],h[y,z,x],h[x,y,z]},3],{2}],{x_,x_}],x_/;ManhattanDistance@@x==2]],4]

(* output *)
{{{{0,1,1},{0,1,3}},{{0,1,1},{0,3,1}},{{0,1,1},{1,0,1}},{{0,1,1},{1,1,0}}},{{{0,1,3},{0,1,1}},{{0,1,3},{0,1,5}},{{0,1,3},{0,3,3}},{{0,1,3},{1,0,3}}},{{{0,1,5},{0,1,3}},{{0,1,5},{0,3,5}},{{0,1,5},{1,0,5}},{{0,1,5},{1,1,6}}},{{{0,3,1},{0,1,1}},{{0,3,1},{0,3,3}},{{0,3,1},{0,5,1}},{{0,3,1},{1,3,0}}},{{{0,3,3},{0,1,3}},{{0,3,3},{0,3,1}},{{0,3,3},{0,3,5}},{{0,3,3},{0,5,3}}},{{{0,3,5},{0,1,5}},{{0,3,5},{0,3,3}},{{0,3,5},{0,5,5}},{{0,3,5},{1,3,6}}},{{{0,5,1},{0,3,1}},{{0,5,1},{0,5,3}},{{0,5,1},{1,5,0}},{{0,5,1},{1,6,1}}},{{{0,5,3},{0,3,3}},{{0,5,3},{0,5,1}},{{0,5,3},{0,5,5}},{{0,5,3},{1,6,3}}},{{{0,5,5},{0,3,5}},{{0,5,5},{0,5,3}},{{0,5,5},{1,5,6}},{{0,5,5},{1,6,5}}},{{{1,0,1},{0,1,1}},{{1,0,1},{1,0,3}},{{1,0,1},{1,1,0}},{{1,0,1},{3,0,1}}},{{{1,0,3},{0,1,3}},{{1,0,3},{1,0,1}},{{1,0,3},{1,0,5}},{{1,0,3},{3,0,3}}},{{{1,0,5},{0,1,5}},{{1,0,5},{1,0,3}},{{1,0,5},{1,1,6}},{{1,0,5},{3,0,5}}},{{{1,1,0},{0,1,1}},{{1,1,0},{1,0,1}},{{1,1,0},{1,3,0}},{{1,1,0},{3,1,0}}},{{{1,1,6},{0,1,5}},{{1,1,6},{1,0,5}},{{1,1,6},{1,3,6}},{{1,1,6},{3,1,6}}},{{{1,3,0},{0,3,1}},{{1,3,0},{1,1,0}},{{1,3,0},{1,5,0}},{{1,3,0},{3,3,0}}},{{{1,3,6},{0,3,5}},{{1,3,6},{1,1,6}},{{1,3,6},{1,5,6}},{{1,3,6},{3,3,6}}},{{{1,5,0},{0,5,1}},{{1,5,0},{1,3,0}},{{1,5,0},{1,6,1}},{{1,5,0},{3,5,0}}},{{{1,5,6},{0,5,5}},{{1,5,6},{1,3,6}},{{1,5,6},{1,6,5}},{{1,5,6},{3,5,6}}},{{{1,6,1},{0,5,1}},{{1,6,1},{1,5,0}},{{1,6,1},{1,6,3}},{{1,6,1},{3,6,1}}},{{{1,6,3},{0,5,3}},{{1,6,3},{1,6,1}},{{1,6,3},{1,6,5}},{{1,6,3},{3,6,3}}},{{{1,6,5},{0,5,5}},{{1,6,5},{1,5,6}},{{1,6,5},{1,6,3}},{{1,6,5},{3,6,5}}},{{{3,0,1},{1,0,1}},{{3,0,1},{3,0,3}},{{3,0,1},{3,1,0}},{{3,0,1},{5,0,1}}},{{{3,0,3},{1,0,3}},{{3,0,3},{3,0,1}},{{3,0,3},{3,0,5}},{{3,0,3},{5,0,3}}},{{{3,0,5},{1,0,5}},{{3,0,5},{3,0,3}},{{3,0,5},{3,1,6}},{{3,0,5},{5,0,5}}},{{{3,1,0},{1,1,0}},{{3,1,0},{3,0,1}},{{3,1,0},{3,3,0}},{{3,1,0},{5,1,0}}},{{{3,1,6},{1,1,6}},{{3,1,6},{3,0,5}},{{3,1,6},{3,3,6}},{{3,1,6},{5,1,6}}},{{{3,3,0},{1,3,0}},{{3,3,0},{3,1,0}},{{3,3,0},{3,5,0}},{{3,3,0},{5,3,0}}},{{{3,3,6},{1,3,6}},{{3,3,6},{3,1,6}},{{3,3,6},{3,5,6}},{{3,3,6},{5,3,6}}},{{{3,5,0},{1,5,0}},{{3,5,0},{3,3,0}},{{3,5,0},{3,6,1}},{{3,5,0},{5,5,0}}},{{{3,5,6},{1,5,6}},{{3,5,6},{3,3,6}},{{3,5,6},{3,6,5}},{{3,5,6},{5,5,6}}},{{{3,6,1},{1,6,1}},{{3,6,1},{3,5,0}},{{3,6,1},{3,6,3}},{{3,6,1},{5,6,1}}},{{{3,6,3},{1,6,3}},{{3,6,3},{3,6,1}},{{3,6,3},{3,6,5}},{{3,6,3},{5,6,3}}},{{{3,6,5},{1,6,5}},{{3,6,5},{3,5,6}},{{3,6,5},{3,6,3}},{{3,6,5},{5,6,5}}},{{{5,0,1},{3,0,1}},{{5,0,1},{5,0,3}},{{5,0,1},{5,1,0}},{{5,0,1},{6,1,1}}},{{{5,0,3},{3,0,3}},{{5,0,3},{5,0,1}},{{5,0,3},{5,0,5}},{{5,0,3},{6,1,3}}},{{{5,0,5},{3,0,5}},{{5,0,5},{5,0,3}},{{5,0,5},{5,1,6}},{{5,0,5},{6,1,5}}},{{{5,1,0},{3,1,0}},{{5,1,0},{5,0,1}},{{5,1,0},{5,3,0}},{{5,1,0},{6,1,1}}},{{{5,1,6},{3,1,6}},{{5,1,6},{5,0,5}},{{5,1,6},{5,3,6}},{{5,1,6},{6,1,5}}},{{{5,3,0},{3,3,0}},{{5,3,0},{5,1,0}},{{5,3,0},{5,5,0}},{{5,3,0},{6,3,1}}},{{{5,3,6},{3,3,6}},{{5,3,6},{5,1,6}},{{5,3,6},{5,5,6}},{{5,3,6},{6,3,5}}},{{{5,5,0},{3,5,0}},{{5,5,0},{5,3,0}},{{5,5,0},{5,6,1}},{{5,5,0},{6,5,1}}},{{{5,5,6},{3,5,6}},{{5,5,6},{5,3,6}},{{5,5,6},{5,6,5}},{{5,5,6},{6,5,5}}},{{{5,6,1},{3,6,1}},{{5,6,1},{5,5,0}},{{5,6,1},{5,6,3}},{{5,6,1},{6,5,1}}},{{{5,6,3},{3,6,3}},{{5,6,3},{5,6,1}},{{5,6,3},{5,6,5}},{{5,6,3},{6,5,3}}},{{{5,6,5},{3,6,5}},{{5,6,5},{5,5,6}},{{5,6,5},{5,6,3}},{{5,6,5},{6,5,5}}},{{{6,1,1},{5,0,1}},{{6,1,1},{5,1,0}},{{6,1,1},{6,1,3}},{{6,1,1},{6,3,1}}},{{{6,1,3},{5,0,3}},{{6,1,3},{6,1,1}},{{6,1,3},{6,1,5}},{{6,1,3},{6,3,3}}},{{{6,1,5},{5,0,5}},{{6,1,5},{5,1,6}},{{6,1,5},{6,1,3}},{{6,1,5},{6,3,5}}},{{{6,3,1},{5,3,0}},{{6,3,1},{6,1,1}},{{6,3,1},{6,3,3}},{{6,3,1},{6,5,1}}},{{{6,3,3},{6,1,3}},{{6,3,3},{6,3,1}},{{6,3,3},{6,3,5}},{{6,3,3},{6,5,3}}},{{{6,3,5},{5,3,6}},{{6,3,5},{6,1,5}},{{6,3,5},{6,3,3}},{{6,3,5},{6,5,5}}},{{{6,5,1},{5,5,0}},{{6,5,1},{5,6,1}},{{6,5,1},{6,3,1}},{{6,5,1},{6,5,3}}},{{{6,5,3},{5,6,3}},{{6,5,3},{6,3,3}},{{6,5,3},{6,5,1}},{{6,5,3},{6,5,5}}},{{{6,5,5},{5,5,6}},{{6,5,5},{5,6,5}},{{6,5,5},{6,3,5}},{{6,5,5},{6,5,3}}}}

Công việc tạo các điểm trên mỗi khía cạnh bên ngoài được thực hiện bởi hàm , h. Nó phải được gọi 3 lần để tạo các điểm tại x = 0, x = 6; y = 0, y = 6; và z = 0, z = 6.

Mỗi điểm khía cạnh là một khoảng cách Manhattan của 2 đơn vị từ một đơn vị khác sẽ được kết nối với điểm tương ứng.

Chúng ta có thể hiển thị các cạnh đồ thị một cách trực quan bằng cách sau đây; alà danh sách các cạnh đồ thị được biểu diễn dưới đây dưới dạng mũi tên.

Graphics3D[{Arrowheads[.02],Arrow/@a},Boxed->False,Axes-> True]

pic1

Dưới đây cho thấy khối Rubik, các điểm trên các mặt bên ngoài và 8 cạnh đồ thị. pic2

Các chấm đỏ nằm trên các mặt tại y = 0 và y = 6; các chấm màu xanh và xám lần lượt nằm trên các mặt tại x = 6 và x = 0; các chấm đen nằm trên các mặt tại z = 6 và z = 0.


hình ảnh đẹp, đầu mũi tên rất tuyệt
don sáng

1

Rust - 278 byte

fn main(){let mut v=vec![];for x in vec![-2,0,2]{for y in vec![-2,0,2]{for z in vec![-2,2]{v.push([-1,z,x,y]);v.push([0,x,y,z]);v.push([1,x,z,y]);}}}for r in 0..54{print!("\n{} ",r);for s in 0..54{if (0..4).map(|n|v[r][n]-v[s][n]).map(|d|d*d).sum::<i32>()<5{print!("{} ",s)}}}}

Hãy thử chơi.rust-lang.org

Đây là lớn, nhưng mã nhỏ nhất cho một ngôn ngữ được biên dịch (cho đến nay). Nó tạo ra một danh sách kề. Nó rất giống với câu trả lời của con trăn của tông_box nhưng tôi muốn xem liệu Quancyions có thể hoạt động không.

Bước 1: Xây dựng 54 Đệ tứ, mỗi phần thể hiện một khía cạnh duy nhất.

Bước 2: đối với mỗi Quancyion, hãy liệt kê tất cả các Quancyion khác với Quadrance (còn gọi là khoảng cách bình phương, hay còn gọi là bình phương bình phương của sự khác biệt) <= 4.

Đệ tứ được xây dựng như vậy: Các vectơ tưởng tượng ijk là các điểm trên vỏ của lưới, từ -2, -2, -2 đến 2,2,2, bước 2. Phần thực w luôn là -1, 0 hoặc 1, sao cho các mặt ở phía đối diện của khối lập phương có cùng phần thực, nhưng các mặt liền kề có các phần thực khác nhau. Phần thực cho phép phân biệt các 'mặt' khác nhau của khối thông qua tính toán.

Đánh số thứ tư (chế độ xem 3d giả hình của khối lập phương):

   ->i  ^j  \k

                  -2,+2,+2   +0,+2,+2  +2,+2,+2
                  -2,+0,+2   +0,+0,+2  +2,+0,+2
                  -2,-2,+2   +0,-2,+2  +2,-2,+2
                       w=0

   -2,+2,+2       -2 +2 +2   +0 +2 +2   +2 +2 +2     +2,+2,+2
   -2,+0,+2                                          +2,+0,+2
   -2,-2,+2       -2 -2 +2   +0 -2 +2   +2 -2 +2     +2,-2,+2

     -2,+2,+0       -2 +2 +0   +0 +2 +0   +2 +2 +0     +2,+2,+0
     -2,+0,+0                                          +2,+0,+0
     -2,-2,+0       -2 -2 +0   +0 -2 +0   +2 -2 +0     +2,-2,+0

       -2,+2,-2       -2 +2 -2   +0 +2 -2   +2 +2 -2     +2,+2,-2
       -2,+0,-2             w=1                          +2,+0,-2
       -2,-2,-2       -2 -2 -2   +0 -2 -2   +2 -2 -2     +2,-2,-2
           w=-1             w=1                              w=-1

                       -2,+2,-2   +0,+2,-2  +2,+2,-2
                       -2,+0,-2   +0,+0,-2  +2,+0,-2
                       -2,-2,-2   +0,-2,-2  +2,-2,-2
                            w=0

Đánh số được lập chỉ mục (khối lập phương)

                    16 34 52
                    10 28 46
                     4 22 40
         48 30 12   14 32 50  15 33 51
         42 24  6    8 26 44   9 27 45
         36 18  0    2 20 38   3 21 39
                     1 19 37
                     7 25 43
                    13 31 49
                     5 23 41
                    11 29 47
                    17 35 53



1

JavaScript (ES6, Trình duyệt), 153 byte

for(F=n=>(A=[n%9/3|0,n%3]).splice(n/18,0,(n/9&1)*3-.5)&&A,i=0;i<54;i++)for([a,b,c]=F(i),j=0;j<54;Math.hypot(a-d,b-e,c-f)>1||alert([i,j]),j++)[d,e,f]=F(j)

Hãy thử trực tuyến!

||AB||1

JavaScript (ES6, Trình duyệt), 158 byte

for(F=n=>(A=[n%9/3|0,n%3]).splice(n/18,0,(n/9&1)*3-.5)&&A,i=0;i<54;i++)for([a,b,c]=F(i),j=0;j<54;Math.hypot(a-d,b-e,c-f)>1||i-j&&alert([i,j]),j++)[d,e,f]=F(j)

Hãy thử trực tuyến! (mô phỏng alertvới console.log)

0<||AB||1[a, b]

47 50 53
46 49 52
45 48 51
20 23 26 11 14 17 35 32 29  8  5  2 
19 22 25 10 13 16 34 31 28  7  4  1 
18 21 24  9 12 15 33 30 27  6  3  0 
36 39 42
37 40 43
38 41 44

tôi thậm chí còn không biết có Math.hypot
don sáng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.