Policz rogi, krawędzie i ściany wyciętego sześcianu

9

Pochodzący z tego postu w piaskownicy

Jest to inspirowane testem matematycznym 8 klas

Wprowadzenie

Mamy sześcian z następującymi narożnikami

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)

Ten sześcian ma wyraźnie 8 rogów, 12 krawędzi i 6 ścian. Jeśli odetniemy teraz narożnik G, tak że nasza płaszczyzna cięcia przechodzi dokładnie przez środek każdej sąsiedniej oryginalnej krawędzi, dodajemy 2 nowe rogi, 3 nowe krawędzie i jedną nową ścianę. Proszę cieszyć się tym ręcznie rysowanym dziełem sztuki dla lepszego wyjaśnienia

wprowadź opis zdjęcia tutaj

Wejście

Biorąc pod uwagę listę narożników (w tym przykładzie oznaczoną przez AH), które zostaną obcięte, oblicz nową liczbę narożników, krawędzi i ścian.

Wprowadzasz dane wejściowe w dowolnej formie, pod warunkiem, że odpowiadają one tym samym rogom (np. Zamiast AH możesz użyć 1-8 lub 0-7, możesz założyć, że jest to lista, csv, cokolwiek)

Możesz założyć, że lista jest odrębna (każdy róg pojawi się najwyżej raz), ale może być pusta. Lista nigdy nie będzie zawierać nieistniejących narożników.

Wynik

Wyprowadź trzy liczby odpowiadające liczbie narożników, krawędzi i ścian. Wyjście jako lista jest wyraźnie dozwolone. Końcowe białe znaki są dozwolone

Przykłady

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

Wreszcie jest to codegolf, więc wygrywa najkrótsza odpowiedź w bajtach. Powstrzymaj się od standardowych luk.

infinitezero
źródło
2
Ciekawe ... Czy więc odcięcie sąsiednich narożników będzie oznaczało, że dzielą jeden róg i eliminują jedną krawędź? Jest to bardziej skomplikowane, niż się wydaje
Jo King
Ponieważ imgur jest blokowany w Turcji, nie widzę obrazu. Czy możesz przesłać alternatywny link do zdjęcia
Windmill Cookies
@JoKing tak, to prawda.
infinitezero,
@WindmillCookies Przepraszam, nie wiedziałem o tym. Użyłem teraz innego hosta.
infinitezero,
2
Na przykład, czy mogę użyć 0 dla A, 1 dla C, 2 dla B, 3 dla D, 4 dla E, 5 dla G, 6 dla F, 7 dla H? Czy powinienem zachować kolejność ABCDEFGH?
tsh

Odpowiedzi:

2

Galaretka , 23 bajty

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

Monadyczny link. Dane wejściowe to lista narożników sześcianu jako współrzędnych kartezjańskich (sześcian wyrównany z układem współrzędnych). Wyjście jest lista liczb całkowitych [faces, corners, edges].

Wypróbuj online!

W jaki sposób?

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]

Jeśli rogi muszą być „uporządkowane”, tak jak są w pytaniu, działa to z liczbami całkowitymi 0–7 jako AH dla 25 bajtów: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(zmniejsza za pomocą XOR, odfiltrowuje dwa, a następnie zlicza mniej niż pięć).

Jonathan Allan
źródło
1

Węgiel drzewny , 48 45 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wykorzystuje cyfry 0-7do reprezentowania liter ABDCEFHGna schemacie. Dane wyjściowe w kolejności ścian, narożników, krawędzi. Wyjaśnienie:

≔Eθ↨℅ι²η

Weź kod ASCII każdego znaku i przekonwertuj go na bazę 2.

≔⊘№⭆η⭆η

Weź ze sobą kartezjański produkt z listy liczb podstawowych 2.

ΣEι↔⁻§λξν1η

XOR pary liczb podstawowych 2 razem i zsumuj liczbę 1 bitów. Policz, ile par ma sumę 1 i podziel ją przez 2. Daje to liczbę przypadkowych narożników.

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

Oblicz i wydrukuj liczbę ścian, narożników i krawędzi.

Neil
źródło
1

Perl 6 , 59 58 bajtów

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

Wypróbuj online!

Wykorzystuje numery 0do 7reprezentowania rogach. Prawdopodobnie powinienem był dopasować je do tej samej kolejności, co w pytaniu ... Ups? Wyświetla listę w kolejności faces, corners, edges.

Jo King
źródło