カットされた立方体のコーナー、エッジ、面を数える


9

このサンドボックスの投稿から

これは、中学2年生の数学のテストからヒントを得ています

はじめに

次の角を持つ立方体があります

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などと見なすことができます)

リストは明確であると想定できます(すべてのコーナーが最大で1度表示されます)が、空の場合があります。リストには、存在しないコーナーが含まれることはありません。

出力

コーナー、エッジ、フェースの数に対応する3つの数値を出力します。リストとしての出力は明示的に許可されています。末尾の空白は許可されます

例

{}        ->  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
興味深い...つまり、隣接するコーナーを切り取ることは、それらが1つのコーナーを共有し、1つのエッジを排除することを意味しますか?これは最初よりも複雑です
— Jo King

imgurがトルコでブロックされているため、画像が表示されません。別の画像リンクを送信していただけますか
— Windmill Cookies

@JoKingはい、それは正しいです。
— infinitezero

@WindmillCookiesすみません、それを知りませんでした。現在、別のホストを使用しています。
— infinitezero

2
たとえば、Aに0、Cに1、Bに2、Dに3、Eに4、Gに5、Fに6、Hに7を使用できますか?またはABCDEFGHの順序を維持する必要がありますか?
— tsh 2018年

回答:


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コードを取得し、base 2に変換します。

≔⊘№⭆η⭆η

2を底とする数のリストのデカルト積をそれ自体でとります。

ΣEι↔⁻§λξν1η

基数2の数値のペアをXORし、1ビットの数を合計します。合計が1であるペアの数を数え、それを2で割ります。これにより、一致するコーナーの数がわかります。

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

面、コーナー、エッジの数を計算して印刷します。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.