Zählen Sie die Ecken, Kanten und Flächen eines geschnittenen Würfels

9

Ich komme aus diesem Sandkastenpfosten

Dies ist inspiriert von einem Mathe-Test für Achtklässler

Intro

Wir haben einen Würfel mit folgenden Ecken

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)

Dieser Würfel hat eindeutig 8 Ecken, 12 Kanten und 6 Flächen. Wenn wir nun die Ecke G so abschneiden, dass unsere Schnittebene genau durch die Mitte jeder benachbarten ursprünglichen Kante verläuft, fügen wir 2 neue Ecken, 3 neue Kanten und eine neue Fläche hinzu. Bitte genießen Sie dieses handgezeichnete Kunstwerk zur besseren Verdeutlichung

Geben Sie hier die Bildbeschreibung ein

Eingang

Berechnen Sie anhand einer Liste von Ecken (in diesem Beispiel mit AH gekennzeichnet), die abgeschnitten werden, die neue Anzahl von Ecken, Kanten und Flächen.

Sie nehmen die Eingabe in einer beliebigen Form vor, solange sie auf dieselben Ecken reagiert (z. B. können Sie anstelle von AH 1-8 oder 0-7 verwenden, Sie können davon ausgehen, dass es sich um eine Liste handelt, csv, was auch immer).

Sie können davon ausgehen, dass die Liste eindeutig ist (jede Ecke wird höchstens einmal angezeigt), sie kann jedoch leer sein. Die Liste enthält niemals nicht vorhandene Ecken.

Ausgabe

Geben Sie drei Zahlen aus, die der Anzahl der Ecken, Kanten und Flächen entsprechen. Die Ausgabe als Liste ist ausdrücklich zulässig. Nachgestellte Leerzeichen sind zulässig

Beispiele

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

Schließlich ist dies Codegolf, also gewinnt die kürzeste Antwort in Bytes. Bitte unterlassen Sie Standardlücken.

unendlich Null
quelle
2
Interessant ... Wenn Sie also benachbarte Ecken abschneiden, teilen sie sich eine Ecke und eliminieren eine Kante? Dies ist komplexer als es zunächst scheint
Jo King
Da imgur in der Türkei blockiert ist, kann ich das Bild nicht sehen. Können Sie bitte einen alternativen Bildlink senden
Windmill Cookies
@JoKing ja das ist richtig.
Infinitezero
@WindmillCookies Es tut mir leid, das wusste ich nicht. Ich habe jetzt einen anderen Host verwendet.
Infinitezero
2
Darf ich zum Beispiel 0 für A, 1 für C, 2 für B, 3 für D, 4 für E, 5 für G, 6 für F, 7 für H verwenden? Oder soll ich die Bestellung von ABCDEFGH behalten?
tsh

Antworten:

2

Gelee , 23 Bytes

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

Eine monadische Verbindung. Eingabe ist eine Liste von Ecken des Würfels als kartesische Koordinaten (Würfel ausgerichtet mit dem Koordinatensystem). Die Ausgabe ist eine Liste von ganzen Zahlen [faces, corners, edges].

Probieren Sie es online aus!

Wie?

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]

Wenn die Ecken so "geordnet" werden müssen, wie sie in der Frage stehen, funktioniert dies mit Ganzzahlen 0-7 als AH für 25 Bytes: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(Reduziert die Verwendung von XOR, filtert zwei heraus und zählt dann die weniger als fünf).

Jonathan Allan
quelle
1

Holzkohle , 48 45 Bytes

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Verwendet Ziffern 0-7, um die Buchstaben ABDCEFHGim Diagramm darzustellen. Ausgaben in der Reihenfolge Flächen, Ecken, Kanten. Erläuterung:

≔Eθ↨℅ι²η

Nehmen Sie den ASCII-Code jedes Zeichens und konvertieren Sie ihn in Basis 2.

≔⊘№⭆η⭆η

Nehmen Sie das kartesische Produkt aus der Liste der Basis-2-Zahlen mit.

ΣEι↔⁻§λξν1η

XOR die Paare von Basis 2 Zahlen zusammen und summiere die Anzahl von 1 Bits. Zählen Sie, wie viele Paare eine Summe von 1 haben, und teilen Sie diese durch 2. Dies gibt die Anzahl der übereinstimmenden Ecken an.

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

Berechnen und drucken Sie die Anzahl der Flächen, Ecken und Kanten.

Neil
quelle
1

Perl 6 , 59 58 Bytes

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

Probieren Sie es online aus!

Verwendet die Zahlen 0, 7um die Ecken darzustellen. Ich hätte sie wahrscheinlich in die gleiche Reihenfolge wie in der Frage bringen sollen ... oops? Gibt eine Liste in der Reihenfolge aus faces, corners, edges.

Scherzen
quelle