出力個別因子の直方体


13

出力個別因子の直方体

今日のタスクは非常に単純です。正の整数を指定すると、その因子によって形成可能な各直方体の代表を出力します。

説明

直方体の体積は、3辺の長さの積です。例えば、側面の長さは整数辺を有することができ、ボリューム4の直方体[1, 1, 4][1, 2, 2][1, 4, 1][2, 1, 2][2, 2, 1]、または[4, 1, 1]。しかし、これらのいくつかは、同じ直方体表す:例えば[1, 1, 4][4, 1, 1]同じ直方体が回転しています。そこボリューム4と整数辺と2つだけ異なる立方体は、次のとおり[1, 1, 4][1, 2, 2]。出力は、最初の直方体の任意の表現、および2番目の直方体の任意の表現にすることができます。

入力

あなたのプログラムは、整数単一の正を取る必要があります1n2311

出力

可能なすべての直方体をリストまたはその他の受け入れ可能な方法で出力する必要があります。例えば

Input  Output
  1    [[1, 1, 1]]
  2    [[1, 1, 2]]
  3    [[1, 1, 3]]
  4    [[1, 1, 4], [1, 2, 2]]
  8    [[1, 1, 8], [1, 2, 4], [2, 2, 2]]
 12    [[1, 1, 12], [1, 2, 6], [1, 3, 4], [2, 2, 3]]
 13    [[1, 1, 13]]
 15    [[1, 1, 15], [1, 3, 5]]
 18    [[1, 1, 18], [1, 2, 9], [1, 3, 6], [2, 3, 3]]
 23    [[1, 1, 23]]
 27    [[1, 1, 27], [1, 3, 9], [3, 3, 3]]
 32    [[1, 1, 32], [1, 2, 16], [1, 4, 8], [2, 2, 8], [2, 4, 4]]
 36    [[1, 1, 36], [1, 2, 18], [1, 3, 12],[1, 4, 9], [1, 6, 6], [2, 2, 9], [2, 3, 6], [3, 3, 4]]

サブリストは、一意である限り、ソートする必要はありません。

得点

これはコードゴルフであるため、バイト単位の最短回答が優先されます。標準的な抜け穴は禁止されています。

これがテストケースジェネレーターです

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language Name, N bytes

N提出のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

# Ruby, <s>104</s> <s>101</s> 96 bytes

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

# Perl, 43 + 2 (-p flag) = 45 bytes

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

# [><>](http://esolangs.org/wiki/Fish), 121 bytes



回答:


4

ゼリー、7 バイト

œċ3P⁼¥Ƈ

正の整数の3つのリストのリストを生成する正の整数を受け入れる単項リンク。

オンラインでお試しください!

どうやって?

œċ3P⁼¥Ƈ - Link: positive integer, N
  3     - literal three
œċ      - all combinations (of [1..N]) of length (3) with replacement
           i.e. [[1,1,1],[1,1,2],...,[1,1,N],[1,2,2],[1,2,3],...,[1,2,N],...,[N,N,N]]
      Ƈ - filter keep those for which:
     ¥  -   last two links as a dyad:
   P    -     product
    ⁼   -     equals (N)?

5

JavaScript(V8)  61  60バイト

直方体をSTDOUTに出力します。

n=>{for(z=n;y=z;z--)for(;(x=n/y/z)<=y;y--)x%1||print(x,y,z)}

オンラインでお試しください!

コメント済み

n => {                // n = input
  for(                // outer loop:
    z = n;            //   start with z = n
    y = z;            //   set y to z; stop if we've reached 0
    z--               //   decrement z after each iteration
  )                   //
    for(              //   inner loop:
      ;               //     no initialization code
      (x = n / y / z) //     set x to n / y / z
      <= y;           //     stop if x > y
      y--             //     decrement y after each iteration
    )                 //
      x % 1 ||        //     unless x is not an integer,
      print(x, y, z)  //     print the cuboid (x, y, z)
}                     //



4

ゼリー、11バイト

ÆDṗ3Ṣ€QP=¥Ƈ

オンラインでお試しください!

引数として整数を取り、整数のリストのリストを返す単項リンク。

説明

ÆD          | Divisors
  ṗ3        | Cartesian power of 3
    Ṣ€      | Sort each list
      Q     | Unique
         ¥Ƈ | Keep only where the following is true (as a dyad, using the original argument as right argument)
       P    | - Product
        =   | - Is equal (to original argument)

2

ハスケル67 60 59バイト

与えられた n、これはのすべての3タプルを生成します。 {12n}有効なものを除外します。一意性を保証するには、タプルをソートする必要があります。

f n=[x|x@[a,b,c]<-mapM id$[1..n]<$":-)",a*b*c==n,a<=b,b<=c]

オンラインでお試しください!


1
3タプルは笑顔でしか適切に作成できないと思います。
ジョナサンフレッチ

: - )
flawr

2

網膜、59バイト

.+
*
2+%L$`(?<=(_+))(?=(\1)*$)
$` _$#2*
A`_(_+) \1\b
_+
$.&

オンラインでお試しください!リンクにはテストスイートが含まれています。説明:

.+
*

単項に変換します。

2+%L$`(?<=(_+))(?=(\1)*$)
$` _$#2*

2回繰り返し、各行の最後の数値を、考えられるすべての因子のペアに分割します。後読みは貪欲でアトミックであるため、最後の番号のプレフィックスに一致すると後戻りしません。これにより、3つの要因のすべての可能な順列が生成されます。

A`_(_+) \1\b

因子が昇順でない行を削除します。

_+
$.&

10進数に変換します。





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