输出不同因子长方体


14

输出不同因子长方体

今天的任务非常简单:给定一个正整数,输出可通过其因子形成的每个长方体的代表。

说明

长方体的体积是其三个边长的乘积。例如,第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和整数边:[1, 1, 4][1, 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]]

子列表无需排序,只要它们是唯一的即可。

计分

这是代码高尔夫球,因此最短答案以字节为单位。禁止出现标准漏洞。

是一个测试用例生成器

排行榜

这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。

为了确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如:

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

如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

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



Answers:


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)
}                     //

5

Haskell,52个字节

f n=[[a,b,c]|a<-[1..n],b<-[1..a],c<-[1..b],a*b*c==n]

在线尝试!

元组按降序排列。“ 3”似乎是一个很小的数字,写出3个循环的时间比我能想到的任何一般情况都要短。


我喜欢调用返回列表的内容元组的元混淆。
乔纳森·弗雷希


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

视网膜,59字节

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

在线尝试!链接包括测试套件。说明:

.+
*

转换为一元。

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

重复两次,将每行的最后一个数字除以所有可能的因数对。后面的样子是贪婪的和原子的,因此一旦与最后一个数字的前缀匹配,就不会回溯。这将生成三个因素的所有可能排列。

A`_(_+) \1\b

删除因素不按升序排列的行。

_+
$.&

转换为十进制。


2

Pyth,11个字节

fqQ*FT.CSQ3

在线尝试!

        SQ  #              range(1, Q+1)          # Q = input
      .C  3 # combinations(             , 3)
f           # filter(lambda T: vvv, ^^^)
 qQ         # Q == 
   *FT      #      fold(__operator_mul, T) ( = product of all elements)


2

05AB1E,8个字节

Ò3.ŒP€{ê
Ò               # prime factors of the input
 3.Œ            # all 3-element partitions
    P           # take the product of each inner list
     €{         # sort each inner list
       ê        # sort and uniquify the outer list

在线尝试!



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.