กำหนดประเภทของทรงลูกบาศก์


17

บทนำ:

ฉันเป็นนักสะสมจิ๊กซอร์ ที่นี่คุณสามารถดูคอลเล็กชั่นปัจจุบันของฉันของปริศนา± 300

ฉันคิดว่าทุกคนรู้ Cube ของ Rubik ปกติ (3x3x3 Cube) ซึ่งเป็นCube NxNxN นอกจากนี้ยังมี Cuboids (ปริศนารูปบล็อค) ซึ่งมาในรูปแบบที่แตกต่างกันอาจอธิบายได้ดีกว่าโดย SuperAntionioVivaldi ที่นี่ :

  • ปกติ Cuboids Domino (เช่น2x2x3 ; 2x3x3 ; 3x3x4 ; ฯลฯ ) - พวกเขามาในรูปแบบของNxNx (N + O)หรือNx (N + O) x (N + O)ซึ่งมีทั้งสองมิติแปลกและ คู่หรือสองคู่และคี่
  • Shapeshifter Cuboids (เช่น2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; ฯลฯ ) - พวกเขามาในรูปแบบของNxNx (N + P)ซึ่งเป็นชื่อที่แนะนำ shapeshifts (ในทุกทิศทาง) ทั้งสามมิติมีทั้งแบบคี่หรือคู่
  • Floppy Cuboids (เช่น1x3x3 ; 2x4x4 ; ฯลฯ ) - พวกเขามาในรูปของNx (N + P) x (N + P)ซึ่งเกือบจะเหมือนกับ Shapeshifters แต่มี Floppy Parities
  • Brick Cuboids (เช่น2x3x4 ; 3x4x5 ; 2x3x5; ฯลฯ ) - พวกเขามาในรูปแบบของ Nx (N + O) x (N + P) ซึ่งเหมือนกับ Cuboids Domino ปกติมีสองขนาดคี่และคู่ หรือสองเท่าและคี่; แต่ไม่มีมิติเดียวกัน
  • Ultimate Shapeshifters (เช่น2x4x6 ; 3x5x7; 2x4x10; ฯลฯ ) - พวกเขามาในรูปของNx (N + O) x (N + R)และ shapeshift ในทิศทางใด ๆ ทั้งสามมิติมีทั้งแบบคี่หรือคู่ แต่ไม่มีมิติเดียวกัน

ท้าทาย:

การป้อนข้อมูล:

จำนวนเต็มบวกn ที่มีข้อ จำกัด ดังต่อไปนี้: 8 <= n <= 125.
nสามารถถอดรหัสได้โดยไม่ซ้ำกันเนื่องจากผลิตภัณฑ์มีค่าสามค่า (มิติ) ซึ่งแต่ละค่าอยู่ระหว่าง 2 ถึง 5

เหตุผลที่ฉัน จำกัด ไว้ที่ 2-5 คือเพื่อป้องกันอินพุตที่ซ้ำกัน (เช่น1x2x4 = 8และ2x2x2 = 8) แม้ว่าจะมีคิวบอยด์ที่ต่ำกว่า / สูงกว่าจำนวนมากออกมาที่นั่น นี่ก็หมายความว่าไม่มีกรณีทดสอบสำหรับ Ultimate Shapeshifters

เอาต์พุต / กรณีทดสอบ:

นี่คือกรณีทั้งหมดที่โปรแกรม / ฟังก์ชั่นของคุณควรรองรับตั้งแต่ความยาวขอบ 2 ถึง 5 ในการกำหนดค่าสามมิติที่เป็นไปได้:

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

กฏท้าทาย:

  • อินพุตที่ไม่ใช่คิวบ์ / ที่ไม่ใช่ทรงลูกบาศก์ภายในช่วง 8-125 ควรส่งผลให้ 'ไม่มี' เป็นเอาต์พุต
  • รูปแบบผลลัพธ์เป็นตัวเลือกของคุณเอง ฉันคิดว่าสิ่งที่สมเหตุสมผลที่สุดคือจำนวนเต็มเช่น0= 'none'; 1= Cube; 2= ปกติ Domino Cuboid; 3= Shapeshifter Cuboid; 4= ฟลอปปี้ทรงลูกบาศก์; 5= Brick Cuboid รูปแบบเอาต์พุตอื่น ๆ ก็ใช้ได้เช่นกันตราบใดที่คุณระบุว่าคุณใช้รูปแบบใด

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชัน / เมธอดพร้อมพารามิเตอร์ที่เหมาะสมโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม ( หมายเหตุ: เนื่องจากฉันไม่รู้ว่ามีสูตรสมาร์ทสำหรับการแปลงอินพุทเป็นเอาท์พุทหรือไม่จึงอนุญาตให้ hardcode คำตอบจากอินพุต )
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น


1
ไม่มีคอลเลกชันเฮลิคอปเตอร์ของคุณอยู่ใช่ไหม?
GB

@GB ไม่ ฉันมีคอปเตอร์ Curvy, Curvy Copter Plus, Curvy Copter III, Curvy Chop Cube, เฮลิคอปเตอร์ Dodecahedron และ Super Truncated Curvy Copter III ที่กำหนดเอง แต่ไม่มีคิวบ์เฮลิคอปเตอร์ :) มันคล้ายกับ Curvy Copter นิดหน่อย แต่ฉันอาจเอาไปสักวันก็ได้
Kevin Cruijssen

อินพุตถูกเรียงลำดับหรือไม่? หรือเราต้องเรียงลำดับด้วยตนเอง?
Matthew Roh

@MatthewRoh อินพุตเป็นจำนวนเต็มเดียว (เช่น24) ดังนั้นฉันจึงไม่รู้ว่าคุณต้องการเรียงลำดับอะไร
Kevin Cruijssen

คำตอบ:


6

05AB1E , 26 21 ไบต์

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

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

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

•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

เพียงวางผมเห็นว่าเราสามารถประหยัดไบต์ที่นี่คือการหาวิธีที่ดีกว่าในการสร้างจำนวน123224454212324512210

มันเป็นเพียง 1 จากนายกรัฐมนตรีดังนั้นการบันทึกหนึ่งที่เป็นไปได้คือการค้นหาดัชนีของนายกและสร้างดัชนีในน้อยกว่า 9 ไบต์
ฉันไม่ทราบว่าฟังก์ชั่น pi นั้นทำงานได้ดีเพียงใดในช่วงเวลา 21 หลัก แต่นั่นอาจเป็นไปได้


ดีฉันอยากรู้อยากเห็นสำหรับคำอธิบายนั้นเพื่อดูว่าสูตร / การเล่นโวหาร / รูปแบบที่คุณใช้ในการกำหนด Cube / Cuboid +1
Kevin Cruijssen

1
@KevinCruijssen: ฉันอาจจะสามารถบันทึกไบต์หรือสองยัง ฉันจะเพิ่มคำอธิบายหลังจากลองทำดู ฉันมีนายกที่ฉันต้องการค้นหาคำสั่งของ (แต่ฉันไม่ได้พบอะไรออนไลน์ที่จะช่วยฉันด้วยและฉันที่ทำงานดังนั้นฉันไม่มีเวลาที่จะใช้บางสิ่งบางอย่างด้วยตัวเอง :)
Emigna

@Emigna jeebus น่าขนลุกนานแค่ไหนแล้วk? !! ??!?!?!?!
Magic Octopus Urn

@carusocomputing ตั้งแต่วันที่ 30 ธันวาคม 2558
Adnan

3

JavaScript (ES6), 97 92 86 ไบต์

ฟังก์ชันนี้ตรวจสอบความถูกต้องของอินพุตก่อนจากนั้นเลือกค่าที่ถูกต้องจากตารางการค้นหา

น่าแปลกที่ส่วนที่ยาวที่สุดคือการตรวจสอบความถูกต้อง (คือnของรูปแบบx * y * zด้วยx , yและzใน[2,3,4,5] ?) ต้องมีวิธีที่สั้นกว่าในการทำมัน แต่ฉันไม่สามารถหาคำตอบได้

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

ส่งคืนอักขระ:

  • N : ไม่มี
  • C : คิวบ์
  • R : Domino Cuboid ปกติ
  • S : Shapeshifter Cuboid
  • B : Brick Cuboid
  • F : ฟลอปปี้ Cuboid

ทดสอบ


1

Ruby, 106 98 96 ไบต์

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

เพราะทำไมไม่ hardcoding

ตามที่ระบุ 0 = 'none'; 1 = Cube; 2 = ปกติ Domino Cuboid; 3 = นักเปลี่ยนรูปทรงลูกบาศก์; 4 = ฟลอปปี้ทรงลูกบาศก์; 5 = Brick Cuboid


1

Perl 6 , 69 58 ไบต์

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

ใช้รูปแบบเอาต์พุตจำนวนเต็มที่แนะนำในคำอธิบายภารกิจยกเว้นว่าจะส่งคืนค่าไม่กำหนดค่าเริ่มต้น(Any)แทน0ในกรณีของอินพุตที่ไม่ได้สร้างคิวบ์ / ลูกบาศก์ที่ถูกต้อง

มันทำงานอย่างไร

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

    8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125สร้างรายการ

  2. :32<AM0K21IHN61H5>.comb

    สร้างรายการ1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1(จากฐาน 32 ตัวอักษร)

  3. %(   Z=>   )

    สร้าง Hash (เชื่อมโยงแผนที่) ด้วยรายการแรกเป็นปุ่มและรายการที่สองเป็นค่า

  4.    {$_}

    สร้างดัชนี Hash ด้วยหมายเลขอินพุต


เฮ้ฉันเห็นแล้วว่าฉันใช้วิธีเดียวกันกับคำตอบ 05AB1E ของ @ Emigna แต่ฉันมากับมันอย่างอิสระซื่อสัตย์! :)
smls

1

แบตช์ 163 ไบต์

@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%

ใช้รูปแบบเอาต์พุตที่แนะนำ คำอธิบาย: แนวคิดพื้นฐานคือการวนลูปผ่านรายการคิวบ์ตามที่กำหนดไว้ในคำถาม สำหรับแต่ละคิวบ์เราคำนวณเพื่อดูว่าปริมาณของมันคือจำนวนเต็มอินพุทหรือไม่และถ้าใช่ให้คำนวณประเภทของคิวบ์จากตารางการค้นหา

ตารางการค้นหาดั้งเดิมเป็นสตริงของตัวอักษร แต่การจัดการสตริงในforลูปนั้นยุ่งยากดังนั้นฉันจึงเปลี่ยนเป็นตัวเลขที่สามารถแยกทางคณิตศาสตร์ได้ Sadly Batch จำกัด จำนวนเต็ม 32- บิตดังนั้นฉันไม่สามารถใส่ตัวเลขทั้งหมดให้เป็นตัวแปรเดียว (แม้ในฐาน 5 คุณจะได้รับ 13 หลักเท่านั้น) ดังนั้นแทนที่จะแยกตัวแปรออกเป็นสองส่วนเข้ารหัสในฐาน 6 เพื่อความสะดวก. 29948521อยู่2545522321ในฐาน 6 ซึ่งเข้ารหัส 10 ลูกบาศก์เล็กที่สุดในลำดับย้อนกลับ; เมื่อมันหมดหลักเราเพิ่ม14081593ซึ่งอยู่1221452321ในฐาน 6 เข้ารหัสที่ใหญ่ที่สุด 10 cuboids

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.