컷 큐브의 모서리, 모서리 및면을 세십시오.


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 개의 새 모서리 및 1 개의 새면이 추가됩니다. 더 나은 설명을 위해이 손으로 그린 ​​예술 작품을 즐기십시오

여기에 이미지 설명을 입력하십시오

입력

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이므로 바이트 단위의 최단 답변이 이깁니다. 표준 허점을 삼가십시오.


2
흥미 롭다 ... 그래서 인접한 코너를 잘라 내면 하나의 코너를 공유하고 하나의 에지를 제거한다는 의미입니까? 이것은 처음에 보이는 것보다 더 복잡합니다
Jo King

터키에서 imgur가 차단되었으므로 이미지를 볼 수 없습니다. 당신은 대체 이미지 링크를 보내 주시기 바랍니다 수
풍차 쿠키

@ JoKing 네 맞습니다.
infinitezero

@WindmillCookies 죄송합니다. 몰랐습니다. 다른 호스트를 사용했습니다.
infinitezero

2
예를 들어 A에 0, C에 1, B에 2, D에 4, E에 5, G에 6, F에 7, H에 7을 사용할 수 있습니까? 아니면 ABCDEFGH의 순서를 유지해야합니까?
tsh

답변:


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을 사용하여 감소시키고 2를 필터링 한 다음 5 미만으로 계산).


1

, 48 45 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 숫자 0-7를 사용 ABDCEFHG하여 다이어그램 의 문자를 나타냅니다 . 순서면, 모서리, 모서리로 출력합니다. 설명:

≔Eθ↨℅ι²η

각 문자의 ASCII 코드를 가져 와서 밑이 2로 변환하십시오.

≔⊘№⭆η⭆η

기본 2 숫자 목록의 데카르트 곱을 그 자체로 가져옵니다.

ΣEι↔⁻§λξν1η

기본 2 개의 숫자 쌍을 XOR하고 1 비트 수를 합산하십시오. 합이 1 인 쌍의 수를 세고이를 2로 나눕니다. 그러면 일치하는 모서리 수가 나타납니다.

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

면, 모서리 및 모서리 수를 계산하고 인쇄하십시오.



1

펄 6 , 59 58 바이트

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

온라인으로 사용해보십시오!

숫자 0를 사용하여 7모서리를 나타냅니다. 아마도 질문에서와 같은 순서로 일치시켜야했을 것입니다 ... 죄송합니다? 순서대로 목록을 출력합니다 faces, corners, edges.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.