Xây dựng kim tự tháp này


21

Kim tự tháp của bạn

Kim tự tháp tôi muốn bạn xây dựng được làm hoàn toàn bằng hình khối. Nó có 24 lớp và lớp thứ N từ trên xuống chứa N 2 khối được sắp xếp theo hình vuông N by N. Kim tự tháp trông như thế này:

Kim tự tháp

Để xây dựng kim tự tháp, bạn sẽ cần một nguồn cung cấp hình khối. Bạn được cung cấp 4900 hình khối được sắp xếp trong một hình vuông 70 x 70 trông như thế này:

Hình vuông

(Được rồi, tôi thừa nhận rằng hình ảnh của hình vuông là hoàn toàn không cần thiết.)

Vì 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , bạn có chính xác số khối chính xác để xây dựng kim tự tháp. Tất cả bạn phải làm là cho tôi biết mỗi khối nên đi đâu.

Nhiệm vụ của bạn

Bạn nên chọn một đồ trang trí tùy ý giữa các hình khối trong hình vuông và hình khối trong hình chóp. (Sẽ thật tuyệt nếu câu trả lời của bạn cho biết trong số 4900! Đồ trang sức khác nhau mà bạn đang sử dụng.)

Sau đó, viết một hàm hoặc chương trình thực hiện như sau:

  • Cho vị trí của một hình khối trong hình vuông 70 x 70 (như một cặp tọa độ (X,Y)),
  • Xuất vị trí của nó trong kim tự tháp (dưới dạng ba tọa độ (A,B,C)).

Các tọa độ đầu vào và đầu ra đều có thể là 0-index hoặc 1-index. Giả sử 1 chỉ mục, đầu vào của bạn (X,Y)sẽ là một cặp số nguyên trong khoảng từ 1 đến 70. Đầu ra của bạn (A,B,C)sẽ là một bộ ba số nguyên; Aphải là lớp đếm từ trên cùng (từ 1 đến 24) và (B,C)phải là tọa độ của khối đó trong lớp đó (giữa 1 và A).

Ví dụ:

  • khối lập phương trên cùng của kim tự tháp có tọa độ (1,1,1).
  • Bốn góc của các cơ sở của kim tự tháp có tọa độ (24,1,1), (24,1,24), (24,24,1), và (24,24,24).
  • Nếu bạn quyết định đặt các góc của hình vuông ở các góc của hình chóp, thì trên đầu vào, (70,1)bạn có thể đưa ra đầu ra (24,24,1).

Bạn có thể cho rằng bạn sẽ chỉ được cung cấp tọa độ hợp lệ (X,Y)làm đầu vào. Độ chính xác hoàn toàn được xác định theo quy tắc sau: hai đầu vào hợp lệ khác nhau phải luôn cung cấp hai giá trị hợp lệ khác nhau.

Đây là : mã ngắn nhất sẽ thắng.

Câu trả lời:


7

Thạch , 15 14 byte

24p;€$€Ẏ
ḅ70ị¢

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

Điều này khá đơn giản: chúng tôi xây dựng danh sách tọa độ của các hình khối trong kim tự tháp như một danh sách thực tế. Sau đó, tất cả những gì chúng ta cần làm là chuyển các tọa độ đầu vào trong hình vuông thành một chỉ mục trong danh sách, đây là việc nhỏ cần thực hiện thông qua chuyển đổi cơ sở.

Đệ trình này hoạt động như một chương trình đầy đủ (lấy tọa độ [x, y]thông qua đối số dòng lệnh đầu tiên và xuất ra đầu ra tiêu chuẩn), hoặc như một hàm, được đặt tên ngầm 2Ŀ.

Giải trình

Xây dựng danh sách

Chúng tôi bắt đầu với số 24, được hiểu là một phạm vi từ 1 đến 24, bao gồm (vì chúng tôi đang cố gắng sử dụng nó như thể nó là một danh sách). Sau đó, chúng tôi lặp đi lặp lại trên nó; đó là những gì cuối cùng trong chương trình làm. Đối với mỗi phần tử n của danh sách:

  • Chúng tôi xây dựng danh sách các cặp x , y trong đó mỗi phần tử đến từ 1 .. n ; pxây dựng một danh sách các cặp được đưa ra hai bộ phần tử và vì chỉ có một giá trị có sẵn ở đây ( n ), nên nó được sử dụng hoàn toàn cho cả hai bộ, do đó cả hai đều trở thành một danh sách từ 1 .. n .
  • Chúng tôi nối thêm n (một lần nữa, giá trị duy nhất chúng tôi có sẵn) cho từng thành phần của danh sách ( ;€).
  • Để làm cho lần thứ hai áp dụng cả hai thao tác này cho mỗi n (nghĩa là tạo một vòng lặp chứa hai hướng dẫn), chúng tôi sử dụng $để nhóm hai hướng dẫn thành một.

Cuối cùng, chúng tôi sử dụng để làm phẳng danh sách theo một giai đoạn, để có được một danh sách chỉ đơn giản chứa tất cả các tọa độ theo thứ tự. Nó bắt đầu như thế này:

[1, 1, 1], [1, 1, 2], [1, 2, 2], [2, 1, 2], [2, 2, 2], [1, 1, 3], [1, , 2, 3], [1, 3, 3], [2, 1, 3], [2, 2, 3], [2, 3, 3], [3, 1, 3], [3, 2 , 3], [3, 3, 3], [1, 1, 4], [1, 2, 4], [1, 3, 4], [1, 4, 4], [2, 1, 4 [2, 2, 4], [2, 3, 4], [2, 4, 4], [3, 1, 4], [3, 2, 4], [3, 3, 4], [3, 4, 4], [4, 1, 4], [4, 2, 4], [4, 3, 4], [4, 4, 4], Trà

và kết thúc bằng [24, 24, 24].

Lập chỉ mục danh sách

Chúng tôi bắt đầu bằng cách chuyển đổi tọa độ đầu vào thành một số bằng cách giải thích chúng là số nguyên 70 cơ sở: ḅ70. Điều này mang lại cho chúng tôi một giá trị trong phạm vi 71 đến 4970; tất cả những giá trị này là mod độc đáo 4900. chỉ số vào danh sách modulo độ dài của danh sách, vì vậy [1, 1]sẽ cho chúng ta những yếu tố lần thứ 71, [1, 2]các yếu tố thứ 72, tất cả các con đường lên để [70, 70]mang đến cho chúng ta những yếu tố thứ 70 (tức là yếu tố trước khi câu trả lời cho [1, 1]). Cuối cùng, chúng ta chỉ cần ¢cho chúng ta biết danh sách nào cần lập chỉ mục (trong trường hợp này, đó là danh sách được chỉ định bởi dòng trước đó, đó là những gì ¢, chạy dòng trước không có đối số).



6

PHP, 75 82 78 byte

Chỉ số 0 :

đặt P = X * 70 + Y sau đó giảm P xuống A 2 trong khi đi xuống lớp chính xác. A-1; P / A; P% A - xong.

(đảo ngược: trong khi tăng A lên đúng lớp: P = P + A 2 thì P = P + A * B + C -> X = P / 70, Y = P% 70)

for($p=$argv[1]*70+$argv[2];$p>=++$a**2;$p-=$a**2);echo$a-1,_,$p/$a|0,_,$p%$a;

Chạy với php -nr '<code>' <X> <Y>; in A_B_C.

1 chỉ mục, 82 byte :

for($p=$argv[1]*70+$argv[2]-71;$p>++$a**2;$p-=$a**2);echo$a,_,$p/$a+1|0,_,$p%$a+1;

1
Bạn không nên đặt P thành X * 70 + Y chứ?
Misha Lavrov

4

Python, 80 73 72 byte

Lần gửi đầu tiên, đừng quá gay gắt q:

Chỉ số 0

lambda x,y:[(a-1,b//a,b%a)for a in range(25)for b in range(a*a)][70*x+y]

Tạo một danh sách có độ dài 4900 với tất cả các tọa độ hình chóp và trả về một mục nhập danh sách khác nhau cho mỗi đầu vào.

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


Chào mừng đến với trang web và bài viết đầu tiên tốt đẹp! Có rất nhiều người chơi gôn Python sẵn sàng thử giải pháp của bạn ở đây và tôi hy vọng bạn thích PPCG!
caird coinheringaahing

Bạn có thể rút ngắn a**2để a*atiết kiệm một byte.
Luke

Wow, đó là một đơn giản. Cảm ơn.
PattuX


3

C 89 , 87 , 82 , 71 byte

Lấy giải pháp Python của xnor và xóa dòng ngắt

p(x,y){for(x=-70*y-x,y=1;x<0;x+=++y*y);printf("%d %d %d",~-y,x/y,x%y);}

Chỉ số 0

z;p(x,y){for(x+=y*70+1,y=z=0;z<x;z+=++y*y);z-=x;printf("%d %d %d\n",y-1,z/y,z%y);}

1 chỉ mục

z;p(x,y){for(x+=~-y*70,y=z=1;z<x;z+=++y*y);z-=x-y;printf("%d %d %d\n",y,z/y,z%y+1);}

Tôi nghĩ rằng nó phải là z / y + 1 trong phiên bản 1 chỉ mục.
Tít

@Titus Tôi không hiểu tại sao, nó phù hợp với câu hỏi của OP
PrincePolka

2

Hàng loạt, 103 byte

@set/an=%1*70+%2,i=0
:l
@set/an-=i*i,j=i,i+=1,k=n%%i,l=n/i
@if %l% geq %i% goto l
@echo %j% %k% %l%

Chỉ số 0. Hoạt động thông qua mỗi lớp bắt đầu từ đầu.


2

J, 37 byte

-4 byte nhờ FrownyFrog

(a:-.~,(<:,&.>{@;~&i.)"0 i.25){~70&#.

Dịch khá đơn giản phương pháp Jelly sang J. Sử dụng lập chỉ mục 0. Hình vuông kim tự tháp trên cùng là đầu tiên. Góc dưới bên phải của căn cứ là cuối cùng.

Phần lớn mã được soạn sẵn để tạo danh sách ba chỉ mục dưới dạng hằng số. Tìm phần tử chính xác trong danh sách đó dựa trên đầu vào 2 phần tử chỉ đơn giản là vấn đề dịch từ cơ sở 70 với70&#.

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


(#~~:&a:)->a:-.~
FrownyFrog

@FrownyFrog Cảm ơn. Như thường xảy ra với tôi trong J, tôi đã sử dụng thủ thuật đó trước đây và quên nó trong trường hợp này. Btw, bạn có thể quan tâm đến câu hỏi này , được lấy cảm hứng từ vấn đề này.
Giô-na

1

Husk , 13 byte

!foEG▲π3Π4B70

Hãy thử trực tuyến! Các chỉ số bắt đầu từ 1.

Giải trình

Giống như một số câu trả lời khác, tôi xây dựng danh sách đầy đủ các tọa độ kim tự tháp và chỉ cần lập chỉ mục vào nó. Tôi làm điều này bằng cách liệt kê tất cả các bộ ba [A,B,C]trong đó các số nằm trong khoảng từ 1 đến 24 (được biểu thị bằng 4! Để lưu một byte) và giữ các số đó A >= max(B,C).

!foEG▲π3Π4B70  Implicit input: a list of two numbers.
          B70  Interpret in base 70.
!              Modular index into the following list:
        Π4      Factorial of 4: 24
      π3        Take range and 3-fold Cartesian power: [[1,1,1],[1,1,2],..,[24,24,24]]
 f              Filter by
  oE            all values are equal
    G▲          in cumulative reduce by maximum.
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.