นับมุมมุมและใบหน้าของคิวบ์ตัด


9

มาจากโพสต์แซนด์บ็อกซ์นี้

นี่คือแรงบันดาลใจจากการทดสอบคณิตศาสตร์นักเรียนระดับประถมที่ 8

Intro

เรามีลูกบาศก์ที่มีมุมต่อไปนี้

A(0, 0, 0)
B(1, 0, 0)
C(1, 1, 0)
D(0, 1, 0)
E(0, 0, 1)
F(1, 0, 1)
G(1, 1, 1)
H(0, 1, 1)

คิวบ์นี้มีมุมที่ชัดเจน 8, 12 ขอบและ 6 ใบหน้าอย่างชัดเจน หากตอนนี้เราตัดมุม G ออกไปดังนั้นระนาบการตัดของเราจะผ่านตรงกลางของขอบเดิมที่อยู่ติดกันเราเพิ่มมุมใหม่ 2 มุมขอบใหม่ 3 อันและใบหน้าใหม่หนึ่งอัน โปรดเพลิดเพลินไปกับผลงานศิลปะที่วาดด้วยมือเพื่อความกระจ่างชัดยิ่งขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

อินพุต

รับรายการมุม (ในตัวอย่างนี้ระบุโดย AH) ที่จะถูกตัดออกคำนวณจำนวนมุมขอบและใบหน้าใหม่

คุณป้อนข้อมูลในรูปแบบที่คุณต้องการตราบใดที่มันตอบสนองต่อมุมเดียวกัน (เช่นแทน AH คุณสามารถใช้ 1-8 หรือ 0-7 คุณสามารถถือว่ามันเป็นรายการ csv อะไรก็ได้)

คุณสามารถสันนิษฐานได้ว่ารายการนั้นมีความแตกต่าง (ทุกมุมจะปรากฏขึ้นครั้งเดียว) แต่อาจจะว่างเปล่า รายการจะไม่มีมุมที่ไม่มีอยู่

เอาท์พุต

เอาต์พุตสามตัวเลขที่สอดคล้องกับจำนวนมุมขอบและใบหน้า เอาต์พุตเป็นรายการได้รับอนุญาตอย่างชัดเจน อนุญาตให้ใช้ช่องว่างต่อท้าย

ตัวอย่าง

{}        ->  8, 12,  6 (empty list)  
{A}       -> 10, 15,  7  
{A,C}     -> 12, 18,  8   
{A,C,F}   -> 14, 21,  9  
{A,B,C}   -> 12, 19,  9  
{A,B,C,D} -> 12, 20, 10  

ในที่สุดนี้คือ codegolf ดังนั้นคำตอบที่สั้นที่สุดในไบต์ชนะ โปรดหลีกเลี่ยงช่องโหว่มาตรฐาน


2
ที่น่าสนใจ ... ดังนั้นการตัดมุมที่อยู่ติดกันจะหมายความว่าพวกเขาแบ่งปันมุมหนึ่งและกำจัดหนึ่งขอบ นี่ซับซ้อนกว่าที่คิดไว้ในตอนแรก
โจคิง

ตั้งแต่ img ถูกบล็อกในตุรกีฉันไม่เห็นภาพเลย คุณช่วยกรุณาส่งลิงค์รูปภาพสำรอง
Windmill Cookies

@ โจกิ้งใช่ที่ถูกต้อง
infinitezero

@ WindmillCookies ฉันขอโทษฉันไม่รู้ ฉันใช้โฮสต์อื่นแล้ว
infinitezero

2
ตัวอย่างเช่นฉันอาจใช้ 0 สำหรับ A, 1 สำหรับ C, 2 สำหรับ B, 3 สำหรับ D, 4 สำหรับ E, 5 สำหรับ G, 6 สำหรับ F, 7 สำหรับ H? หรือฉันควรรักษาคำสั่งของ ABCDEFGH
tsh

คำตอบ:


2

เยลลี่ 23 ไบต์

3R×L+“©®€‘ɓŒcn/€§ċ1;`Żạ

ลิงค์ monadic อินพุตคือรายการของมุมของคิวบ์ตามพิกัดคาร์ทีเซียน (คิวบ์ที่สอดคล้องกับระบบพิกัด) [faces, corners, edges]เอาท์พุทคือรายการของจำนวนเต็มให้

ลองออนไลน์!

อย่างไร?

3R×L+“©®€‘ɓŒcn/€§ċ1;`Żạ - Link: list of lists, C          e.g. [[0,1,1],[1,1,0],[1,1,1],[0,0,0]] -- this could represent "FHGA"
3R                      - range of 3                           [1,2,3]
   L                    - length of C                          4
  ×                     - multiply                             [4,8,12]
     “©®€‘              - list of code-page indices            [6,8,12]
    +                   - add                                  [10,16,24]
          ɓ             - start a new dyadic chain, f(C,X) where X is the above result
           Œc           - pairs of C                           [[[0,1,1],[1,1,0]],[[0,1,1],[1,1,1]],[[0,1,1],[0,0,0]],[[1,1,0],[1,1,1]],[[1,1,0],[0,0,0]],[[1,1,1],[0,0,0]]]
              /€        - reduce €ach with:
             n          -   (vectorising) not equal?           [[1,0,1],[1,0,0],[0,1,1],[0,0,1],[1,1,0],[1,1,1]]
                §       - sum each                             [2,1,2,1,2,3]
                 ċ1     - count ones                           2
                   ;`   - concatenate with itself              [2,2]
                     Ż  - prepend a zero                       [0,2,2]
                      ạ - absolute difference with X           [10,14,22]

หากมุมต้อง "สั่งซื้อ" ตามที่เป็นอยู่ในคำถามแล้วสิ่งนี้จะทำงานกับจำนวนเต็ม 0-7 เป็น AH สำหรับ 25 ไบต์: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(ลดการใช้ XOR ให้กรองสองครั้งแล้วนับจำนวนน้อยกว่าห้า)


1

ถ่าน , 48 45 ไบต์

≔Eθ↨℅ι²η≔⊘№⭆η⭆ηΣEι↔⁻§λξν1ηIE⟦⁶⁻⁸η⁻¹²η⟧⁺ι×⊕κLθ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ใช้ตัวเลข0-7เพื่อแสดงตัวอักษรABDCEFHGในไดอะแกรม ส่งออกตามลำดับใบหน้ามุมขอบ คำอธิบาย:

≔Eθ↨℅ι²η

ใช้รหัส ASCII ของตัวละครแต่ละตัวและแปลงเป็นฐาน 2

≔⊘№⭆η⭆η

นำผลิตภัณฑ์คาร์ทีเซียนของรายการหมายเลขฐาน 2 ด้วยตัวเอง

ΣEι↔⁻§λξν1η

แฮคเกอร์คู่ของตัวเลขฐาน 2 เข้าด้วยกันและรวมจำนวน 1 บิต นับจำนวนคู่ที่มีผลรวมของ 1 และหารด้วย 2 นี่จะให้จำนวนมุมที่บังเอิญ

IE⟦⁶⁻⁸η⁻¹²η⟧⁺ι×⊕κLθ

คำนวณและพิมพ์จำนวนใบหน้ามุมและขอบ



1

Perl 6 , 59 58 ไบต์

{6+@_,|((2,3 X*4+@_)X-(@_ X~@_)∩~<<ords "% 286
>C/")}

ลองออนไลน์!

ใช้ตัวเลข0ในการ7ที่จะเป็นตัวแทนมุม ฉันน่าจะจับคู่พวกเขาให้ตรงกับคำสั่งเดียวกันในคำถาม ... โอ๊ะโอ? faces, corners, edgesขาออกรายการในการสั่งซื้อ

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