直方体のタイプを決定する


17

前書き:

私はツイスティパズルコレクターです。ここでは、現在の±300パズルのコレクションを見ることができます。

NxNxNキューブである通常のルービックキューブ(3x3x3キューブ)を知っていると思います。また、立方体(ブロック型パズル)もあります。これらはさまざまな形で提供されますが、おそらくここのSuperAntionioVivaldiでよりよく説明できます

  • 通常のドミノ立方体2x2x3 ; 2x3x3 ; 3x3x4 ;など)-NxNx(N + O)またはNx(N + O)x(N + O)の形式で、2つの奇数次元と偶数、または2つの偶数と奇数。
  • Shapeshifter Cuboids2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ;など)-NxNx(N + P)の形式で提供されます。3つの次元はすべて奇数または偶数です。
  • フロッピー直方体(等1x3x32x4x4、など) -これらはの形で来るのNx(N + P)×(N + P)ほぼシェイプシフターと同じであるが、いわゆるフロッピー平価有します。
  • レンガ立方体2x3x4 ; 3x4x5 ; 2x3x5;など)-Nx(N + O)x(N + P)の形式で提供されます。これは、通常のDomino Cuboidsが2つの奇数次元と偶数または2つの偶数と奇数。ただし、同じディメンションはありません。
  • Ultimate Shapeshifters2x4x6 ; 3x5x7; 2x4x10;など)-Nx (N + O)x(N + R)の形式で提供され、あらゆる方向にシェイプシフトします。3つの次元はすべて奇数または偶数です。ただし、同じディメンションはありません。

チャレンジ:

入力:

次の制限がある正の整数n:8 <= n <= 125。
N一意2〜5包括的である3つの値(大きさ)の積として復号することができます。

2〜5に制限した理由は、多数の低次/高次のCuboid存在するにもかかわらず、重複した入力(1x2x4 = 8およびなど2x2x2 = 8)を防ぐためです。これは、Ultimate Shapeshiftersのテストケースがないことも意味します。

出力/テストケース:

これらは、すべての可能な3次元構成で、エッジの長さ2から5までの範囲で、プログラム/関数がサポートする必要があるすべてのケースです。

Input   Cuboid/Cube   Type/Output
8       2x2x2         Cube
12      2x2x3         Regular Domino Cuboid
16      2x2x4         Shapeshifter Cuboid
20      2x2x5         Regular Domino Cuboid
18      2x3x3         Regular Domino Cuboid
24      2x3x4         Brick Cuboid
30      2x3x5         Brick Cuboid
32      2x4x4         Floppy Cuboid
40      2x4x5         Brick Cuboid
50      2x5x5         Regular Domino Cuboid
27      3x3x3         Cube
36      3x3x4         Regular Domino Cuboid
45      3x3x5         Shapeshifter Cuboid
48      3x4x4         Regular Domino Cuboid
60      3x4x5         Brick Cuboid
75      3x5x5         Floppy Cuboid
64      4x4x4         Cube
80      4x4x5         Regular Domino Cuboid
100     4x5x5         Regular Domino Cuboid
125     5x5x5         Cube

チャレンジルール:

  • 8-125の範囲内の非キューブ/非立方体入力は、出力として「なし」になります。
  • 出力形式は独自の選択です。最も合理的なのは、0= 'none'のような整数です。1=キューブ; 2=通常のDomino Cuboid; 3= Shapeshifter Cuboid; 4=フロッピー立方体; 5=レンガ直方体。使用した形式を指定する限り、他の出力形式でも問題ありません。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターを持つ関数/メソッド、完全なプログラムを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。(注:入力から出力への変換にスマートな式があるかどうかはわかりませんので、入力に基づいて回答をハードコードすることは許可されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。


1
コレクションにヘリコプターキューブはありませんか?
GB

@GBいや。Curvy Copter、Curvy Copter Plus、Curvy Copter III、Curvy Chop Cube、Helicopter Dodecahedron、およびカスタムメイドのSuper Truncated Curvy Copter IIIがありますが、Helicopter Cubeはありません。:) Curvy Copterに少し似すぎていますが、いつか手に入るかもしれません。
ケビンCruijssen

入力はソートされていますか?または手動でソートする必要がありますか?
マシュー盧

@MatthewRoh入力は単一の整数(つまり24)なので、それについて何をソートしたいのかわかりませんか?
ケビンCruijssen

回答:


6

05AB1E26 21バイト

None: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5

•S3X@I¨%÷'•5L¦3ãPÙIkè

オンラインでお試しください! またはテストスイートとして

説明

•S3X@I¨%÷'•            # push base-214 compression of the number 123224454212324512210
           5L¦         # push the list [2,3,4,5]
              3ã       # cartesian product with repetion of size 3
                P      # product of each sublist
                 Ù     # remove duplicates
                  Ik   # get the index of input in that list (-1 if non-existant)
                    è  # get the element at this index in the above number

ここでバイトを節約できると思う唯一の場所は、数値123224454212324512210を生成するより良い方法を見つけることです

それは素数から1つだけ離れているため、可能な素数の1つは、その素数のインデックスを見つけて9バイト未満でインデックスを生成することです。
pi関数が21桁の素数に対してどの程度機能するかはわかりませんが、可能性があります。


ニース、私はあなたがキューブ/立方体を決定するために使用した式/癖/パターンを見るためにその説明に興味があります。+1
ケビンクルイッセン

1
@KevinCruijssen:まだ1、2バイトは節約できるかもしれません。試してから説明を追加します。私は注文を探したいプライムを持っています(しかし、それを手伝ってくれるオンラインは何も見つかりませんでしたし、仕事をしているので、自分で何かを実装する時間はありません:)
Emigna

@emigna jeebus creezy、どれくらいの期間k存在しましたか?!! ??!?!?!?!!
魔法のタコUr

12月30日、2015年以来@carusocomputing
アドナン・

3

JavaScript(ES6)、97 92 86バイト

この関数は、最初に入力の有効性をチェックしてから、ルックアップテーブルから正しい値を選択します。

驚くべきことに、最も長い部分は、妥当性チェックが(あるN形のX * Y * ZXY及びZ[2,3,4,5] ?)。もっと短い方法が必要ですが、これまでのところわかりませんでした。

n=>'NBBF..CRCC.BRR..SFRRRRR.B..C'[[34707324,0x80000800,4240,262208][n&3]>>n/4&1&&n%29]

文字を返します:

  • N:なし
  • C:キューブ
  • R:通常のドミノ立方体
  • S:シェイプシフターキューブイド
  • B:レンガ立方体
  • F:フロッピー立方体

テスト


1

ルビー、106 98 96バイト

->n{[[x=25,2421],[15,53],[9,21],[4,1232504350200510002]].any?{|a,b|n%a<1&&x="00#{b}"[n/a]}?x:?0}

なぜですか、ハードコーディング。

指定されているように、0 = 'none'; 1 =キューブ。2 =通常のドミノ立方体; 3 = Shapeshifter Cuboid; 4 =フロッピー立方体; 5 =レンガ直方体


1

Perl 6の69の 58バイト

{%(unique([X*] (2..5)xx 3)Z=>:32<AM0K21IHN61H5>.comb){$_}}

有効なキューブ/立方体を形成しない入力の場合では(Any)なく、初期化されていない値を返すことを除いて、タスクの説明で提案されている整数出力形式を使用します0

使い方

  1. unique([X*] (2..5)xx 3)

    リストを生成します8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125

  2. :32<AM0K21IHN61H5>.comb

    リストを生成します1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1(base-32リテラルから)。

  3. %(   Z=>   )

    最初のリストをキーとして、2番目のリストを値として、ハッシュ(連想マップ)を生成します。

  4.    {$_}

    入力番号でハッシュにインデックスを付けます。


ええと、@ Emignaの05AB1Eの回答と同じアプローチを使用したことがわかりました。しかし、私は独立して、正直に思いつきました!:)
smls

1

バッチ、163バイト

@set/as=0,c=29948521
@for /l %%i in (2,1,5)do @for /l %%j in (%%i,1,5)do @for /l %%k in (%%j,1,5)do @set/as+=c%%6*!(%%i*%%j*%%k-%1),c/=6,c+=14081593*!c
@echo %s%

推奨される出力形式を使用します。説明:基本的な考え方は、質問で定義されているキューブのリストをループすることです。各キューブについて、そのボリュームが入力整数であるかどうかを計算し、そうであれば、ルックアップテーブルからキューブのタイプを計算します。

元のルックアップテーブルは文字列でしたが、forループ内で文字列操作を行うのは難しいため、算術的に抽出できる数字に切り替えました。悲しいことに、バッチは32ビット整数に制限されているため、すべての数字を単一の変数に収めることができませんでした(ベース5でも13桁しか取得できない)ので、代わりに変数をベース6でエンコードされた2つの部分に分割します便宜上。29948521ある2545522321基地逆順で10枚の最小直方体をコード6。10の直方体をエンコードする基数6 の数字が足りなくなったら追加140815931221452321ます。

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