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



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)?

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

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.


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

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)

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!


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.


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)


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!


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.