Output Perbedaan Faktor Kuboid

13

Output Perbedaan Faktor Kuboid

Tugas hari ini sangat sederhana: diberi bilangan bulat positif, menampilkan perwakilan dari setiap kuboid yang dapat dibentuk oleh faktor-faktornya.

Penjelasan

Volume berbentuk kubus adalah produk dari tiga sisi panjangnya. Misalnya, berbentuk kubus volume 4 yang timnya panjang adalah bilangan bulat dapat memiliki sisi [1, 1, 4], [1, 2, 2], [1, 4, 1], [2, 1, 2], [2, 2, 1], atau [4, 1, 1]. Namun, beberapa di antaranya mewakili kuboid yang sama: misalnya [1, 1, 4]dan [4, 1, 1]berbentuk kubus yang sama diputar. Hanya ada dua kuboid berbeda dengan volume 4 dan sisi bilangan bulat: [1, 1, 4]dan [1, 2, 2]. Outputnya bisa berupa representasi kuboid pertama, dan representasi kuboid kedua.

Memasukkan

Program Anda harus mengambil satu bilangan bulat positif 1n231-1 .

Keluaran

Anda harus mengeluarkan semua cuboids yang mungkin dalam daftar atau cara lain yang dapat diterima. Misalnya

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]]

Sub-daftar tidak perlu disortir, asalkan unik.

Mencetak gol

Ini kode golf, jadi jawaban tersingkat dalam byte menang. Celah standar dilarang.

Ini adalah generator test case

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Laksal
sumber

Jawaban:

4

Jelly , 7 byte

œċ3P⁼¥Ƈ

Tautan monadik yang menerima bilangan bulat positif yang menghasilkan daftar 3-daftar bilangan bulat positif.

Cobalah online!

Bagaimana?

œċ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)?
Jonathan Allan
sumber
5

JavaScript (V8) ,  61  60 byte

Mencetak cuboids ke STDOUT.

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

Cobalah online!

Berkomentar

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)
}                     //
Arnauld
sumber
5

Haskell , 52 byte

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

Cobalah online!

Tuple dalam urutan menurun. "3" tampaknya merupakan angka yang cukup kecil yang menuliskan 3 loop itu lebih pendek dari apa pun yang umum yang dapat saya buat.

Tidak
sumber
Saya suka meta kebingungan memanggil tuple konten daftar yang dikembalikan.
Jonathan Frech
5

Python 3.8 (pra-rilis) ,  83  80 byte

lambda n:[[i,j,k]for i in(r:=range(n+1))for j in r[i:]for k in r[j:]if i*j*k==n]

Cobalah online!


... mengalahkan versi dua putaran sebanyak tiga byte:

lambda n:[[i,j,n//i//j]for i in(r:=range(1,n+1))for j in r if(i<=j<=n/i/j)>n%(i*j)]
Jonathan Allan
sumber
4

Jelly , 11 byte

ÆDṗ3Ṣ€QP=¥Ƈ

Cobalah online!

Tautan monadik yang menggunakan bilangan bulat sebagai argumennya dan mengembalikan daftar daftar bilangan bulat.

Penjelasan

Æ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)
Nick Kennedy
sumber
2

Haskell , 67 60 59 byte

Untuk yang diberikan n, ini menghasilkan semua 3-tupel dengan entri di {1,2,...,n}dan menyaring yang valid. Untuk menjamin keunikan, kami mengharuskan tupel diurutkan.

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

Cobalah online!

cacat
sumber
1
Saya pikir tiga-tuple hanya dapat diproduksi dengan benar sambil tersenyum.
Jonathan Frech
: -)
flawr
2

Retina , 59 byte

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

Cobalah online! Tautan termasuk test suite. Penjelasan:

.+
*

Konversikan ke unary.

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

Ulangi dua kali, bagilah angka terakhir pada setiap baris menjadi semua pasangan faktor yang memungkinkan. Tampilan di belakangnya serakah dan atomik, jadi setelah itu cocok dengan awalan nomor terakhir itu tidak akan mundur. Ini menghasilkan semua kemungkinan permutasi dari tiga faktor.

A`_(_+) \1\b

Hapus garis di mana faktor tidak dalam urutan menaik.

_+
$.&

Konversikan ke desimal.

Neil
sumber
2

Pyth , 11 byte

fqQ*FT.CSQ3

Cobalah online!

        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)

ar4093
sumber
2

05AB1E , 8 byte

Ò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

Cobalah online!

Grimmy
sumber
2

C (dentang) , 89 byte

a,b,x;f(n){for(a=n;a;a--)for(b=a;b&&(x=n/a/b)<=b;b--)x*b*a-n||printf("%d,%d,%d ",x,b,a);}

Cobalah online!

Port @Arnauld 👍

Disimpan 1 berkat format output @Jonathan Frech yang lebih baik

AZTECCO
sumber
1
"%d %d %d\n"~> "%d,%d,%d "akan menghemat satu byte.
Jonathan Frech
1

Ikon , 87 byte

procedure f(n)
k:=[]
a:=1to n&b:=1to a&c:=1to b&a*b*c=n&k|||:=[[a,b,c]]&\z
return k
end

Cobalah online!

Tutup ke Python :)

Galen Ivanov
sumber