Подсчитайте углы, края и грани отрезанного куба.

9

Исходя из этого поста песочницы

Это вдохновлено 8-го класса по математике

вступление

У нас есть куб со следующими углами

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)

Этот куб явно имеет 8 углов, 12 ребер и 6 граней. Если мы теперь обрежем угол G так, что наша плоскость среза проходит точно через середину каждого смежного исходного ребра, мы добавим 2 новых угла, 3 новых ребра и одну новую грань. Пожалуйста, наслаждайтесь этим рисованным произведением искусства, для лучшего прояснения

введите описание изображения здесь

вход

Учитывая список углов (в этом примере обозначенных AH), которые будут обрезаны, вычислите новое количество углов, ребер и граней.

Вы берете входные данные в любой форме, которая вам нравится, при условии, что они реагируют на одни и те же углы (например, вместо AH вы можете использовать 1-8 или 0-7, вы можете считать, что это список, CSV, что угодно)

Можно предположить, что список различен (каждый угол будет отображаться не более одного раза), но он может быть пустым. Список никогда не будет содержать несуществующих углов.

Вывод

Выведите три числа, соответствующие количеству углов, ребер и граней. Вывод в виде списка явно разрешен. Конечные пробелы разрешены

Примеры

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

Наконец, это Codegolf, поэтому выигрывает самый короткий ответ в байтах. Пожалуйста, воздержитесь от стандартных лазеек.

infinitezero
источник
2
Интересно ... Значит, отрезание смежных углов будет означать, что они разделяют один угол и устраняют один край? Это сложнее, чем кажется на первый взгляд
Джо Кинг,
Так как imgur заблокирован в Турции, я не могу видеть изображение. Можете ли вы выслать альтернативную ссылку на изображение
Windmill Cookies
@ Шучу, да, это правильно.
infinitezero
@WindmillCookies Извините, я этого не знал. Я использовал другой хост сейчас.
infinitezero
2
Например, могу ли я использовать 0 для A, 1 для C, 2 для B, 3 для D, 4 для E, 5 для G, 6 для F, 7 для H? Или я должен соблюдать порядок ABCDEFGH?
февраля

Ответы:

2

Желе , 23 байта

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

Монадическая ссылка. Ввод представляет собой список углов куба в виде декартовых координат (куб, выровненный по системе координат). Выход - это список целых чисел [faces, corners, edges].

Попробуйте онлайн!

Как?

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]

Если углы должны быть «упорядочены» так, как они есть в вопросе, то это работает с целыми числами 0-7 как AH для 25 байтов: 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ(уменьшает с помощью XOR, отфильтровывает два, затем считает меньше пяти).

Джонатан Аллан
источник
1

Древесный уголь , 48 45 байт

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

Попробуйте онлайн! Ссылка на подробную версию кода. Использует цифры 0-7для представления букв ABDCEFHGна диаграмме. Выводы в порядке граней, углов, ребер. Объяснение:

≔Eθ↨℅ι²η

Возьмите код ASCII каждого символа и преобразуйте его в базу 2.

≔⊘№⭆η⭆η

Возьмите с собой декартово произведение из списка базовых 2 чисел.

ΣEι↔⁻§λξν1η

XOR пары двоичных чисел 2 вместе и суммировать число 1 бит. Подсчитайте, сколько пар имеют сумму 1, и разделите ее на 2. Это дает количество совпадающих углов.

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

Рассчитайте и распечатайте количество граней, углов и ребер.

Нил
источник
1

Perl 6 , 59 58 байт

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

Попробуйте онлайн!

Использует число , 0чтобы 7представлять углы. Я, вероятно, должен был сопоставить их до того же порядка, что и в вопросе ... упс? Выводит список в порядке faces, corners, edges.

Джо Кинг
источник