计算切块的角,边和面


9

来自此沙盒帖子

这是从八年级学生的数学测验中得到的启发

介绍

我们有一个具有以下角的立方体

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标识),该列表将被切除,计算出新的角,边和面数量。

您可以按照自己喜欢的任何形式进行输入,只要它响应相同的角即可(例如,可以使用1-8或0-7代替AH,可以将其假定为列表,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  

最后,这是代码高尔夫,因此以字节为单位的最短答案将获胜。请避免出现标准漏洞。


2
有趣的是...切除相邻的角将意味着它们共享一个角并消除一条边?这是比它似乎更复杂,在第一
乔金

由于imgur在土耳其被屏蔽,因此无法看到该图像。您能否发送备用图片链接
风车饼干

@JoKing是的,这是正确的。
infinitezero

@WindmillCookies对不起,我不知道。我现在使用了其他主机。
infinitezero

2
例如,我可以使用0表示A,1表示C,2表示B,3表示D,4表示E,5表示G,6表示F,7表示H吗?还是应该保持ABCDEFGH的顺序?
tsh

Answers:


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]

如果必须按照问题中的顺序对角进行“排序”,则可以将25字节的整数0-7作为AH 3R×L+“©®€‘ɓŒc^/€ḟ2<5S;`Żạ使用((使用XOR减少,滤除二进制,然后将小于5的那些计数)。


1

木炭48 45字节

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

在线尝试!链接是详细版本的代码。使用数字0-7表示图中的字母ABDCEFHG。以面,角,边的顺序输出。说明:

≔Eθ↨℅ι²η

取每个字符的ASCII码并将其转换为2。

≔⊘№⭆η⭆η

将基数为2的数字与自己的笛卡尔积。

ΣEι↔⁻§λξν1η

将基数为2的数字对异或,然后对1位的数字求和。计算多少对的总和为1,然后除以2。这给出了重合角的数量。

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

计算并打印面,角和边的数量。



1

Perl 6的59 58个字节

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

在线尝试!

使用这些数字07表示的角落。我可能应该按照问题中的顺序来匹配它们...哎呀?按顺序输出列表faces, corners, edges

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.