Xác định loại hình khối


17

Giới thiệu:

Tôi là một nhà sưu tầm câu đố uốn lượn. Ở đây bạn có thể thấy bộ sưu tập hiện tại của tôi về câu đố ± 300.

Tôi nghĩ mọi người đều biết khối Rubik thông thường (Cube 3x3x3), đó là khối NxNxN . Ngoài ra còn có Cuboids (câu đố hình khối), xuất hiện dưới nhiều hình thức khác nhau, có lẽ được giải thích tốt hơn bởi SuperAntionioVivaldi ở đây :

  • Các hình khối domino thông thường (như 2x2x3 ; 2x3x3 ; 3x3x4 ; v.v.) - Chúng có dạng NxNx (N + O) hoặc Nx (N + O) x (N + O) , có hai kích thước lẻ và một chẵn, hoặc hai chẵn và lẻ.
  • Shapeshifter Cuboids (như 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; v.v.) - Chúng có dạng NxNx (N + P) , như tên gọi của nó, shapeshifts (theo mọi hướng). Tất cả ba chiều là lẻ hoặc chẵn.
  • Floppy Cuboids (như 1x3x3 ; 2x4x4 ; v.v.) - Chúng có dạng Nx (N + P) x (N + P) , gần giống như Shapeshifters, nhưng được gọi là Floppy Parality.
  • Brick Cuboids (như 2x3x4 ; 3x4x5 ; 2x3x5; v.v.) - Chúng có dạng Nx (N + O) x (N + P), giống như các hình khối Domino thông thường có hai kích thước lẻ và chẵn, hoặc hai chẵn và lẻ; nhưng không có bất kỳ kích thước tương tự.
  • Shapeshifters cuối cùng (như 2x4x6 ; 3x5x7; 2x4x10; v.v.) - Chúng có dạng Nx (N + O) x (N + R) và biến đổi theo bất kỳ hướng nào. Tất cả ba chiều là lẻ hoặc chẵn; nhưng không có bất kỳ kích thước tương tự.

Thử thách:

Đầu vào:

Một số nguyên dương n với các hạn chế sau: 8 <= n <= 125.
n có thể được giải mã duy nhất là tích của ba giá trị (kích thước), trong đó mỗi giá trị nằm trong khoảng từ 2 đến 5.

Lý do tôi đã giới hạn ở mức 2-5 là để ngăn chặn các đầu vào trùng lặp (như 1x2x4 = 82x2x2 = 8), mặc dù có rất nhiều Cuboidsthứ tự thấp hơn / cao hơn ngoài kia. Điều này cũng có nghĩa là không có trường hợp thử nghiệm nào cho Ultimate Shapeshifters.

Các trường hợp đầu ra / kiểm tra:

Đây là tất cả các trường hợp chương trình / chức năng của bạn sẽ hỗ trợ, từ độ dài cạnh 2 đến 5 trong mọi cấu hình ba chiều có thể:

Input   Cuboid/Cube   Type/Output
8       2x2x2         Cube
12      2x2x3         Regular Domino Cuboid
16      2x2x4         Shapeshifter Cuboid
20      2x2x5         Regular Domino Cuboid
18      2x3x3         Regular Domino Cuboid
24      2x3x4         Brick Cuboid
30      2x3x5         Brick Cuboid
32      2x4x4         Floppy Cuboid
40      2x4x5         Brick Cuboid
50      2x5x5         Regular Domino Cuboid
27      3x3x3         Cube
36      3x3x4         Regular Domino Cuboid
45      3x3x5         Shapeshifter Cuboid
48      3x4x4         Regular Domino Cuboid
60      3x4x5         Brick Cuboid
75      3x5x5         Floppy Cuboid
64      4x4x4         Cube
80      4x4x5         Regular Domino Cuboid
100     4x5x5         Regular Domino Cuboid
125     5x5x5         Cube

Quy tắc thử thách:

  • Bất kỳ đầu vào không phải Cube / không phải hình khối nào trong phạm vi 8-125 sẽ dẫn đến "không" là đầu ra.
  • Các định dạng đầu ra là sự lựa chọn của riêng bạn. Tôi nghĩ hợp lý nhất là số nguyên, như 0= 'none'; 1= Khối lập phương; 2= Domino Cuboid thường xuyên; 3= Shapeshifter hình khối; 4= Đĩa mềm hình khối; 5= Gạch hình khối. Bất kỳ định dạng đầu ra nào khác cũng tốt, miễn là bạn chỉ định cái nào bạn đã sử dụng.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm. ( LƯU Ý: Vì tôi không biết liệu có một công thức thông minh cho chuyển đổi đầu vào thành đầu ra hay không, nó được phép mã hóa các câu trả lời dựa trên đầu vào. )
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.


1
Không có khối máy bay trực thăng trong bộ sưu tập của bạn?
GB

@ GB Không. Tôi có một Curvy Copter, Curvy Copter Plus, Curvy Copter III, Curvy Chop Cube, Trực thăng Dodecahedron và Super Truncated Curvy Copter III tùy chỉnh, nhưng không có Cube Cube. :) Nó hơi giống với Curvy Copter, nhưng tôi có thể lấy nó một ngày nào đó.
Kevin Cruijssen

Là đầu vào được sắp xếp? hoặc chúng ta phải sắp xếp bằng tay?
Matthew Roh

@MatthewRoh Đầu vào là một số nguyên duy nhất (nghĩa là 24), vì vậy tôi không biết bạn muốn sắp xếp gì về nó?
Kevin Cruijssen

Câu trả lời:


6

05AB1E , 26 21 byte

None: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5

•S3X@I¨%÷'•5L¦3ãPÙIkè

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

•S3X@I¨%÷'•            # push base-214 compression of the number 123224454212324512210
           5L¦         # push the list [2,3,4,5]
              3ã       # cartesian product with repetion of size 3
                P      # product of each sublist
                 Ù     # remove duplicates
                  Ik   # get the index of input in that list (-1 if non-existant)
                    è  # get the element at this index in the above number

Nơi duy nhất tôi thấy rằng chúng ta có thể lưu byte ở đây là tìm cách tốt hơn để tạo số 123224454212324512210 .

Nó chỉ là 1 lần so với một số nguyên tố, vì vậy một cách tiết kiệm có thể là tìm chỉ mục của số nguyên tố đó và tạo chỉ mục dưới 9 byte.
Tôi không biết hàm pi hoạt động tốt như thế nào đối với các số nguyên tố 21 chữ số nhưng đó có thể là một khả năng.


Thật tuyệt, tôi tò mò về lời giải thích đó để xem công thức / quirk / mẫu nào bạn đã sử dụng để xác định Cube / Cuboid. +1
Kevin Cruijssen 8/2/2017

1
@KevinCruijssen: Tôi có thể lưu một hoặc hai byte. Tôi sẽ thêm lời giải thích sau khi tôi đã thử. Tôi có một thủ tướng tôi muốn tìm thứ tự (nhưng tôi không tìm thấy bất cứ điều gì trực tuyến để giúp tôi với điều đó và tôi đang làm việc nên tôi không có thời gian để tự mình thực hiện điều gì đó :)
Emigna

@Emigna jeebus rùng rợn, đã ktồn tại bao lâu ? !! ??!?!?!?!
Bạch tuộc ma thuật Urn

@carusocomputing Kể từ ngày 30 tháng 12 năm 2015.
Adnan

3

JavaScript (ES6), 97 92 86 byte

Hàm này trước tiên kiểm tra tính hợp lệ của đầu vào, sau đó chọn giá trị chính xác từ bảng tra cứu.

Đáng ngạc nhiên, phần dài nhất là kiểm tra tính hợp lệ (là n có dạng x * y * z với x , yz trong [2,3,4,5] ?). Phải có một cách ngắn hơn để làm điều đó, nhưng tôi không thể tìm ra nó cho đến nay.

n=>'NBBF..CRCC.BRR..SFRRRRR.B..C'[[34707324,0x80000800,4240,262208][n&3]>>n/4&1&&n%29]

Trả về một ký tự:

  • N : Không
  • C : khối
  • R : Domino Cuboid thường xuyên
  • S : Shapeshifter hình khối
  • B : Gạch hình khối
  • F : hình khối mềm

Kiểm tra


1

Ruby, 106 98 96 byte

->n{[[x=25,2421],[15,53],[9,21],[4,1232504350200510002]].any?{|a,b|n%a<1&&x="00#{b}"[n/a]}?x:?0}

Bởi vì, tại sao không, mã hóa cứng.

Theo quy định, 0 = 'không'; 1 = Khối lập phương; 2 = Hình khối domino thông thường; 3 = Hình khối Shapeshifter; 4 = Đĩa mềm hình khối; 5 = Khối gạch


1

Perl 6 , 69 58 byte

{%(unique([X*] (2..5)xx 3)Z=>:32<AM0K21IHN61H5>.comb){$_}}

Sử dụng định dạng đầu ra số nguyên được đề xuất trong mô tả tác vụ, ngoại trừ việc nó trả về giá trị chưa được khởi tạo (Any)thay vì 0trong trường hợp đầu vào không tạo thành khối / khối hợp lệ.

Làm thế nào nó hoạt động

  1. unique([X*] (2..5)xx 3)

    Tạo danh sách 8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125.

  2. :32<AM0K21IHN61H5>.comb

    Tạo danh sách 1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1(từ một cơ sở-32 chữ).

  3. %(   Z=>   )

    Tạo một Hash (bản đồ liên kết) với danh sách đầu tiên là các khóa và danh sách thứ hai là các giá trị.

  4.    {$_}

    Lập chỉ mục Hash với số đầu vào ..


Heh, tôi thấy bây giờ tôi đã sử dụng cách tiếp cận tương tự như câu trả lời 05AB1E của @ Emigna. Nhưng tôi đã nghĩ ra nó một cách độc lập, trung thực! :)
smls

1

Hàng loạt, 163 byte

@set/as=0,c=29948521
@for /l %%i in (2,1,5)do @for /l %%j in (%%i,1,5)do @for /l %%k in (%%j,1,5)do @set/as+=c%%6*!(%%i*%%j*%%k-%1),c/=6,c+=14081593*!c
@echo %s%

Sử dụng định dạng đầu ra được đề xuất. Giải thích: Ý tưởng cơ bản là lặp qua danh sách các hình khối như được định nghĩa trong câu hỏi. Đối với mỗi khối, chúng tôi tính toán để xem liệu khối lượng của nó có phải là số nguyên đầu vào không và nếu có, hãy tính loại khối từ bảng tra cứu.

Bảng tra cứu ban đầu là một chuỗi các chữ cái, nhưng thực hiện thao tác chuỗi trong một forvòng lặp là khó khăn, vì vậy tôi đã chuyển sang các chữ số có thể được trích xuất một cách hợp lý. Đáng buồn là Batch bị giới hạn ở số nguyên 32 bit nên tôi không thể ghép tất cả các chữ số vào một biến duy nhất (ngay cả trong cơ sở 5 bạn chỉ có thể nhận được 13 chữ số), vì vậy thay vào đó tôi chia biến thành hai phần, được mã hóa trong cơ sở 6 cho thuận tiện. 299485212545522321trong cơ sở 6 mã hóa 10 khối nhỏ nhất theo thứ tự ngược lại; khi nó chạy ra khỏi chữ số chúng ta thêm 14081593mà là 1221452321ở cơ sở 6 mã hóa 10 cuboids lớn nhất.

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.