Compter les coins, les bords et les faces d'un cube coupé

9

Venant de ce post sandbox

Ceci est inspiré d'un test de mathématiques de 8e année

Intro

Nous avons un cube avec les coins suivants

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)

Ce cube a clairement 8 coins, 12 bords et 6 faces. Si nous coupons maintenant le coin G, de sorte que notre plan de coupe passe exactement au milieu de chaque bord d'origine adjacent, nous ajoutons 2 nouveaux coins, 3 nouveaux bords et une nouvelle face. S'il vous plaît profiter de cette œuvre d'art dessinée à la main, pour une meilleure clarification

entrez la description de l'image ici

Contribution

Étant donné une liste de coins (dans cet exemple identifié par AH), qui seront coupés, calculez le nouveau nombre de coins, d'arêtes et de faces.

Vous faites prendre l'entrée sous la forme que vous voulez, tant qu'elle répond aux mêmes coins (par exemple, au lieu de AH, vous pouvez utiliser 1-8 ou 0-7, vous pouvez supposer que c'est une liste, csv, peu importe)

Vous pouvez supposer que la liste est distincte (chaque coin n'apparaîtra qu'une fois), mais elle peut être vide. La liste ne contiendra jamais de coins inexistants.

Production

Sortez trois nombres correspondant au nombre de coins, d'arêtes et de faces. La sortie sous forme de liste est explicitement autorisée. Les espaces de fin sont autorisés

Exemples

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

Enfin, c'est codegolf, donc la réponse la plus courte en octets l'emporte. Veuillez vous abstenir des failles standard.

infinitezero
la source
2
Intéressant ... Donc, couper les coins adjacents signifie qu'ils partagent un coin et éliminent un bord? C'est plus complexe qu'il n'y paraît au premier abord
Jo King
Depuis l'imgur étant bloqué en Turquie, je ne peux pas voir l'image. Pouvez-vous s'il vous plaît envoyer un autre lien d'image
Windmill Cookies
@JoKing oui c'est correct.
infinitezero
@WindmillCookies Je suis désolé, je ne le savais pas. J'ai utilisé un hôte différent maintenant.
infinitezero
2
Par exemple, puis-je utiliser 0 pour A, 1 pour C, 2 pour B, 3 pour D, 4 pour E, 5 pour G, 6 pour F, 7 pour H? Ou dois-je conserver l'ordre de ABCDEFGH?
tsh

Réponses:

2

Gelée , 23 octets

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

Un lien monadique. L'entrée est une liste des coins du cube en coordonnées cartésiennes (cube aligné avec le système de coordonnées). La sortie est une liste de nombres entiers, [faces, corners, edges].

Essayez-le en ligne!

Comment?

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]

Si les coins doivent être "ordonnés" comme ils le sont dans la question, alors cela fonctionne avec les entiers 0-7 comme AH pour 25 octets: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(réduit en utilisant XOR, filtre les deux, puis compte ceux de moins de cinq).

Jonathan Allan
la source
1

Fusain , 48 45 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Utilise des chiffres 0-7pour représenter les lettres ABDCEFHGdu diagramme. Sorties dans l'ordre des faces, coins, bords. Explication:

≔Eθ↨℅ι²η

Prenez le code ASCII de chaque caractère et convertissez-le en base 2.

≔⊘№⭆η⭆η

Prenez le produit cartésien de la liste des nombres de base 2 avec lui-même.

ΣEι↔⁻§λξν1η

XOR les paires de nombres de base 2 ensemble et additionner le nombre de 1 bits. Comptez combien de paires ont une somme de 1 et divisez-la par 2. Cela donne le nombre de coins coïncidents.

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

Calculez et imprimez le nombre de faces, coins et bords.

Neil
la source
1

Perl 6 , 59 58 octets

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

Essayez-le en ligne!

Utilise les chiffres 0pour 7représenter les coins. J'aurais probablement dû les faire correspondre dans le même ordre que dans la question ... oups? Sort une liste dans l'ordre faces, corners, edges.

Jo King
la source