Hitung sudut, tepi dan wajah kubus potong

9

Datang dari pos kotak pasir ini

Ini terinspirasi dari tes matematika kelas 8

Intro

Kami memiliki kubus dengan sudut-sudut berikut

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)

Kubus ini jelas memiliki 8 sudut, 12 tepi dan 6 wajah. Jika sekarang kita memotong sudut G, sedemikian rupa sehingga bidang potongan kita melewati tepat di tengah-tengah setiap tepi asli yang berdekatan, kita menambahkan 2 sudut baru, 3 tepi baru dan satu wajah baru. Silakan nikmati karya seni yang digambar tangan ini, untuk klarifikasi yang lebih baik

masukkan deskripsi gambar di sini

Memasukkan

Diberikan daftar sudut (dalam contoh ini diidentifikasi oleh AH), yang akan dipotong, menghitung jumlah sudut, tepi dan wajah yang baru.

Anda membuat input dalam bentuk apa pun yang Anda suka, asalkan merespons ke sudut yang sama (misalnya, bukannya AH Anda dapat menggunakan 1-8 atau 0-7, Anda dapat menganggapnya sebagai daftar, csv, apa pun)

Anda dapat menganggap daftar tersebut berbeda (setiap sudut akan muncul paling banyak satu kali), tetapi mungkin kosong. Daftar tidak akan mengandung sudut yang tidak ada.

Keluaran

Keluarkan tiga angka yang sesuai dengan jumlah sudut, tepi dan wajah. Output sebagai daftar diizinkan secara eksplisit. Ruang putih trailing diperbolehkan

Contohnya

{}        ->  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  

Akhirnya, ini adalah codegolf, jadi jawaban terpendek dalam byte menang. Harap jangan menggunakan celah standar.

infinitezero
sumber
2
Menarik ... Jadi memotong sudut yang berdekatan akan berarti mereka berbagi satu sudut, dan menghilangkan satu sisi? Ini lebih kompleks daripada yang terlihat pada awalnya
Jo King
Karena imgur diblokir di Turki, saya tidak bisa melihat gambar. Bisakah Anda mengirim tautan gambar alternatif
Kincir Angin Kincir Angin
@ Menjawab ya itu benar.
infinitezero
@ WindmillCookies Maaf, saya tidak tahu itu. Saya telah menggunakan host yang berbeda sekarang.
infinitezero
2
Misalnya, bolehkah saya menggunakan 0 untuk A, 1 untuk C, 2 untuk B, 3 untuk D, 4 untuk E, 5 untuk G, 6 untuk F, 7 untuk H? Atau haruskah saya menjaga urutan ABCDEFGH?
tsh

Jawaban:

2

Jelly , 23 byte

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

Tautan monadik. Input adalah daftar sudut kubus sebagai koordinat Kartesius (kubus sejajar dengan sistem koordinat). Output adalah daftar bilangan bulat [faces, corners, edges],.

Cobalah online!

Bagaimana?

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]

Jika sudut harus "dipesan" seperti pada pertanyaan maka ini bekerja dengan integer 0-7 sebagai AH selama 25 byte: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(mengurangi penggunaan XOR, menyaring dua, lalu menghitung yang kurang dari lima).

Jonathan Allan
sumber
1

Arang , 48 45 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Menggunakan digit 0-7untuk mewakili huruf-huruf ABDCEFHGdalam diagram. Output dalam urutan menghadap, sudut, tepi. Penjelasan:

≔Eθ↨℅ι²η

Ambil kode ASCII dari setiap karakter dan konversikan ke basis 2.

≔⊘№⭆η⭆η

Bawalah produk kartesian dari daftar nomor-nomor basis 2 dengan sendirinya.

ΣEι↔⁻§λξν1η

XOR pasangan angka dasar 2 bersama-sama dan jumlahkan angka 1 bit. Hitung berapa banyak pasangan memiliki jumlah 1 dan bagi dengan 2. Ini memberikan jumlah sudut yang bertepatan.

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

Hitung dan cetak jumlah wajah, sudut dan tepi.

Neil
sumber
1

Perl 6 , 59 58 byte

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

Cobalah online!

Menggunakan nomor 0untuk 7mewakili sudut. Saya mungkin harus mencocokkan mereka dengan urutan yang sama seperti dalam pertanyaan ... oops? Menampilkan daftar dalam urutan faces, corners, edges.

Jo King
sumber