Çıktı Farklı Faktör Küpleri


14

Çıktı Farklı Faktör Küpleri

Bugünün görevi çok basit: pozitif bir tamsayı verildiğinde, her bir küboidin faktörlerinden bir temsilcisini çıktılayın.

açıklamalar

Bir küboid hacmi, üç yan uzunluğunun ürünüdür. Örneğin, yan uzunluklarının tamsayı yana sahip olabilir hacim 4 kübik [1, 1, 4], [1, 2, 2], [1, 4, 1], [2, 1, 2], [2, 2, 1], ya da [4, 1, 1]. Bununla birlikte, bunlardan bazıları aynı küboidi temsil eder: örneğin [1, 1, 4]ve [4, 1, 1]aynı küboid döndürülmüşlerdir. Hacim 4 ve tamsayı kenarları olan sadece iki ayrı küboid vardır: [1, 1, 4]ve [1, 2, 2]. Çıktı, birinci küboidin herhangi bir temsili ve ikinci küboidin herhangi bir temsili olabilir.

Giriş

Programınız tek bir pozitif tamsayı almalıdır .1n2311

Çıktı

Olası tüm küboidleri bir liste halinde veya kabul edilebilir başka bir şekilde çıkarmanız gerekir. Örneğin

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

Alt listelerin benzersiz oldukları sürece sıralanması gerekmez.

puanlama

Bu kod golf, bayt en kısa cevap kazanır. Standart boşluklar yasaktır.

İşte bir test senaryosu üreticisi

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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



Yanıtlar:


4

Jöle , 7 bayt

œċ3P⁼¥Ƈ

Pozitif tam sayıların 3 listesinin bir listesini veren pozitif bir tamsayıyı kabul eden monadik bir Bağlantı.

Çevrimiçi deneyin!

Nasıl?

œċ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 bayt

Cuboid'leri STDOUT'a yazdırır.

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

Çevrimiçi deneyin!

Yorumlananlar

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 bayt

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

Çevrimiçi deneyin!

Tuples azalan sırada. "3", 3 döngüyü yazmanın genel bir şeyden daha kısa olabileceği kadar küçük bir sayı gibi görünüyor.


Döndürülen listenin içerik gruplarını çağırmanın meta-gizlemesini seviyorum.
Jonathan Frech


4

Jöle , 11 bayt

ÆDṗ3Ṣ€QP=¥Ƈ

Çevrimiçi deneyin!

Bir tamsayıyı argümanı olarak alan ve tamsayıların bir listesini döndüren monadik bir bağlantı.

açıklama

Æ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

Retina , 59 bayt

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

Çevrimiçi deneyin! Bağlantı test paketini içerir. Açıklama:

.+
*

Tekli'ye dönüştür.

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

İki kez tekrarlayarak, her satırdaki son sayıyı olası tüm faktör çiftlerine bölün. Gözetleme açgözlü ve atomiktir, bu nedenle son sayının önekiyle eşleştiğinde geri gitmez. Bu, üç faktörün olası tüm permütasyonlarını üretir.

A`_(_+) \1\b

Faktörlerin artan sırada olmadığı satırları silin.

_+
$.&

Ondalık biçime dönüştür.


2

Pyth , 11 bayt

fqQ*FT.CSQ3

Çevrimiçi deneyin!

        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 bayt

Ò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

Çevrimiçi deneyin!


2

C (clang) , 89 bayt

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

Çevrimiçi deneyin!

@Arnauld 👍 Limanı

@Jonathan Frech daha iyi çıktı biçimi sayesinde 1 tasarruf edildi


1
"%d %d %d\n"~> "%d,%d,%d "bayt tasarrufu sağlar.
Jonathan Frech

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.