Cuenta las esquinas, bordes y caras de un cubo cortado

9

Viniendo de esta publicación de sandbox

Esto está inspirado en una prueba de matemáticas de 8º grado

Introducción

Tenemos un cubo con las siguientes esquinas.

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)

Este cubo claramente tiene 8 esquinas, 12 bordes y 6 caras. Si ahora cortamos la esquina G, de modo que nuestro plano de corte pase exactamente por el medio de cada borde original adyacente, agregaremos 2 esquinas nuevas, 3 bordes nuevos y una cara nueva. Disfruta de esta obra de arte dibujada a mano, para una mejor aclaración

ingrese la descripción de la imagen aquí

Entrada

Dada una lista de esquinas (en este ejemplo identificado por AH), que se cortará, calcule el nuevo número de esquinas, aristas y caras.

Puede tomar la entrada en cualquier forma que desee, siempre que responda a las mismas esquinas (por ejemplo, en lugar de AH puede usar 1-8 o 0-7, puede suponer que es una lista, csv, lo que sea)

Puede suponer que la lista es distinta (cada esquina aparecerá una vez como máximo), pero puede estar vacía. La lista nunca contendrá esquinas no existentes.

Salida

Salida de tres números correspondientes a la cantidad de esquinas, aristas y caras. La salida como una lista está explícitamente permitida. Se permiten espacios en blanco al final

Ejemplos

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

Finalmente, esto es codegolf, por lo que gana la respuesta más corta en bytes. Abstenerse de las lagunas estándar.

infinitezero
fuente
2
Interesante ... ¿Entonces cortar las esquinas adyacentes significará que comparten una esquina y eliminan un borde? Esto es más complejo de lo que parece al principio
Jo King el
Dado que Imgur está bloqueado en Turquía, no puedo ver la imagen. ¿Pueden enviar un enlace de imagen alternativa
Windmill Cookies
@JoKing sí, eso es correcto.
infinitezero
@WindmillCookies Lo siento, no lo sabía. He usado un host diferente ahora.
infinitezero
2
Por ejemplo, ¿puedo usar 0 para A, 1 para C, 2 para B, 3 para D, 4 para E, 5 para G, 6 para F, 7 para H? ¿O debo mantener el orden de ABCDEFGH?
tsh

Respuestas:

2

Jalea , 23 bytes

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

Un enlace monádico. La entrada es una lista de esquinas del cubo como coordenadas cartesianas (cubo alineado con el sistema de coordenadas). La salida es una lista de números enteros, [faces, corners, edges].

Pruébalo en línea!

¿Cómo?

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 las esquinas deben ser "ordenadas" como están en la pregunta, entonces esto funciona con enteros 0-7 como AH para 25 bytes: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(reduce el uso de XOR, filtra dos, luego cuenta esos menos de cinco).

Jonathan Allan
fuente
1

Carbón , 48 45 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Utiliza dígitos 0-7para representar las letras ABDCEFHGen el diagrama. Salidas en el orden caras, esquinas, aristas. Explicación:

≔Eθ↨℅ι²η

Tome el código ASCII de cada carácter y conviértalo en base 2.

≔⊘№⭆η⭆η

Tome el producto cartesiano de la lista de números base 2 consigo mismo.

ΣEι↔⁻§λξν1η

XOR los pares de números de base 2 juntos y suman el número de 1 bits. Cuente cuántos pares tienen una suma de 1 y divídalo entre 2. Esto da el número de esquinas coincidentes.

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

Calcule e imprima el número de caras, esquinas y aristas.

Neil
fuente
1

Perl 6 , 59 58 bytes

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

Pruébalo en línea!

Utiliza los números 0para 7representar las esquinas. Probablemente debería haberlos igualado en el mismo orden que en la pregunta ... ¿Ups? Emite una lista en el orden faces, corners, edges.

Jo King
fuente