Kesilmiş bir küpün köşelerini, kenarlarını ve yüzlerini sayın


9

Bu sanal alan gönderisinden geliyor

Bu 8. sınıf matematik testinden esinlenmiştir.

giriş

Aşağıdaki köşelere sahip bir küpümüz var

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)

Bu küpün 8 köşesi, 12 kenarı ve 6 yüzü vardır. Şimdi G köşesini kesersek, kesim düzlemimiz her bitişik orijinal kenarın tam ortasından geçecek şekilde 2 yeni köşe, 3 yeni kenar ve bir yeni yüz ekleriz. Daha iyi açıklama için lütfen bu elle çizilmiş sanat eserinin tadını çıkarın

resim açıklamasını buraya girin

Giriş

Kesilecek olan bir köşe listesi (AH tarafından tanımlanan bu örnekte) verildiğinde, yeni köşe, kenar ve yüz sayısını hesaplayın.

Girdiyi aynı köşelere yanıt verdiği sürece istediğiniz herhangi bir biçimde alırsınız (örneğin AH yerine 1-8 veya 0-7 kullanabilirsiniz, bir liste olduğunu varsayabilirsiniz, csv, ne olursa olsun)

Listenin farklı olduğunu varsayabilirsiniz (her köşe en fazla bir kez görünecektir), ancak boş olabilir. Liste asla mevcut olmayan köşeleri içermeyecektir.

Çıktı

Köşelerin, kenarların ve yüzlerin sayısına karşılık gelen üç sayı girin. Liste olarak çıktıya açıkça izin verilir. Sondaki boşluklara izin verilir

Örnekler

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

Son olarak, bu kodgolf, bu nedenle bayttaki en kısa cevap kazanır. Lütfen standart boşluklardan kaçının.


2
İlginç ... Yani bitişik köşelerin kesilmesi, bir köşeyi paylaşmaları ve bir kenarı ortadan kaldırmaları anlamına mı geliyor? Bu başlangıçta göründüğünden daha karmaşık
Jo King

Türkiye’de imgur engellendiği için resmi göremiyorum. Alternatif bir görüntü bağlantı göndermek misiniz
Yeldeğirmeni Çerezler

@ Evet evet bu doğru.
infinitezero

@WindmillCookies Üzgünüm, bunu bilmiyordum. Şimdi farklı bir sunucu kullandım.
infinitezero

2
Örneğin, A için 0, C için 1, B için 2, D için 3, E için 4, G için 5, F için 6, H için 7 kullanabilir miyim? Yoksa ABCDEFGH'nin sırasını mı korumalıyım?
tsh

Yanıtlar:


2

Jöle , 23 bayt

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

Monadik bir Bağlantı. Girdi, Kartezyen koordinatlar (küpün koordinat sistemiyle hizalanmış) olarak küpün köşelerinin bir listesidir. Çıktı, tamsayıların bir listesidir [faces, corners, edges].

Çevrimiçi deneyin!

Nasıl?

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]

Köşelerin söz konusu gibi "sıralanması" gerekiyorsa, bu 25 bayt için AH olarak 0-7 tamsayılarıyla çalışır: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(XOR kullanımını azaltır, ikiyi filtreler, sonra beşten az olanları sayar).


1

Kömür , 48 45 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Diyagramdaki 0-7harfleri temsil etmek için rakam kullanır ABDCEFHG. Sırayla çıktılar, köşeler, kenarlar. Açıklama:

≔Eθ↨℅ι²η

Her karakterin ASCII kodunu alın ve taban 2'ye dönüştürün.

≔⊘№⭆η⭆η

Baz 2 numaraları listesinin kartezyen ürününü yanınıza alın.

ΣEι↔⁻§λξν1η

XOR taban 2 çiftlerini bir araya getirin ve 1 bit sayısını toplayın. Kaç çiftin toplam 1'e sahip olduğunu sayın ve bunu 2'ye bölün. Bu, çakışan köşelerin sayısını verir.

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

Yüz, köşe ve kenar sayısını hesaplayın ve yazdırın.



1

Perl 6 , 59 58 bayt

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

Çevrimiçi deneyin!

Köşeleri temsil 0etmek 7için sayıları kullanır . Muhtemelen onları sorudakiyle aynı sıraya göre eşleştirmeliydim ... ayy? Bir listeyi sırayla çıkarır faces, corners, edges.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.