Ausgabe von Distinct Factor Cuboids

13

Ausgabe von Distinct Factor Cuboids

Die heutige Aufgabe ist sehr einfach: Geben Sie bei einer positiven ganzen Zahl einen Repräsentanten jedes Quaders aus, der durch seine Faktoren formbar ist.

Erklärungen

Das Volumen eines Quaders ist das Produkt seiner drei Seitenlängen. Zum Beispiel kann ein quader von Band 4 , deren Seitenlängen ganze Zahlen sind , können Seiten haben [1, 1, 4], [1, 2, 2], [1, 4, 1], [2, 1, 2], [2, 2, 1], oder [4, 1, 1]. Einige davon stellen jedoch den gleichen Quader dar: z. B. [1, 1, 4]und [4, 1, 1]sind der gleiche Quader gedreht. Es gibt nur zwei verschiedene Quader mit Volumen 4 und ganzzahligen Seiten: [1, 1, 4]und [1, 2, 2]. Die Ausgabe kann eine beliebige Darstellung des ersten Quaders und eine beliebige Darstellung des zweiten Quaders sein.

Eingang

Ihr Programm muss eine einzelne positive ganze Zahl 1n231-1 annehmen .

Ausgabe

Sie müssen alle möglichen Quader in einer Liste oder auf eine andere akzeptable Weise ausgeben. Z.B

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

Unterlisten müssen nicht sortiert werden, solange sie eindeutig sind.

Wertung

Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes. Standardlücken sind verboten.

Hier ist ein Testfallgenerator

Bestenlisten

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

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

Lyxal
quelle

Antworten:

4

Gelee , 7 Bytes

œċ3P⁼¥Ƈ

Ein monadischer Link, der eine positive Ganzzahl akzeptiert, die eine Liste von 3 Listen positiver Ganzzahlen ergibt.

Probieren Sie es online!

Wie?

œċ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
quelle
5

JavaScript (V8) ,  61 bis  60 Byte

Druckt die Quader nach STDOUT.

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

Probieren Sie es online!

Kommentiert

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
quelle
5

Haskell , 52 Bytes

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

Probieren Sie es online!

Die Tupel sind absteigend sortiert. "3" scheint eine ausreichend kleine Zahl zu sein, bei der das Ausschreiben der 3 Schleifen kürzer war als alles, was mir allgemein einfiel.

xnor
quelle
Ich mag die Meta-Verschleierung des Aufrufs der Content-Tupel der zurückgegebenen Liste.
Jonathan Frech
5

Python 3.8 (Vorabversion) ,  83 bis  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]

Probieren Sie es online!


... eine Zwei-Schleifen-Version um drei Bytes schlagen:

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
quelle
4

Gelee , 11 Bytes

ÆDṗ3Ṣ€QP=¥Ƈ

Probieren Sie es online!

Ein monadischer Link, der eine ganze Zahl als Argument verwendet und eine Liste mit ganzen Zahlen zurückgibt.

Erläuterung

Æ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
quelle
2

Haskell , 67 60 59 Bytes

n{1,2,,n}

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

Probieren Sie es online!

Fehler
quelle
1
Ich denke, drei Tupel können nur mit einem Smiley richtig produziert werden.
Jonathan Frech
: -)
flawr
2

Netzhaut , 59 Bytes

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

Probieren Sie es online! Link enthält Testsuite. Erläuterung:

.+
*

In Unary konvertieren.

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

Durch zweimaliges Wiederholen teilen Sie die letzte Zahl in jeder Zeile in alle möglichen Faktorenpaare. Der Lookbehind ist gierig und atomar. Wenn er mit dem Präfix der letzten Zahl übereinstimmt, wird er nicht zurückverfolgt. Dies erzeugt alle möglichen Permutationen von drei Faktoren.

A`_(_+) \1\b

Löschen Sie Zeilen, in denen die Faktoren nicht aufsteigend sortiert sind.

_+
$.&

In Dezimalzahl konvertieren.

Neil
quelle
2

Pyth , 11 Bytes

fqQ*FT.CSQ3

Probieren Sie es 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
quelle
2

05AB1E , 8 Bytes

Ò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

Probieren Sie es online!

Grimmig
quelle
2

C (clang) 89 Bytes

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

Probieren Sie es online!

Hafen von @Arnauld 👍

1 dank @Jonathan Frech besseres Ausgabeformat gespeichert

AZTECCO
quelle
1
"%d %d %d\n"~> "%d,%d,%d "würde ein Byte speichern.
Jonathan Frech
1

Icon , 87 Bytes

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

Probieren Sie es online!

In der Nähe von Python :)

Galen Ivanov
quelle