Prostopadłościany o charakterystyce wyjściowej


14

Prostopadłościany o charakterystyce wyjściowej

Dzisiejsze zadanie jest bardzo proste: biorąc pod uwagę dodatnią liczbę całkowitą, wypisuje reprezentant każdego prostopadłościanu formowalnego przez jego czynniki.

Objaśnienia

Objętość prostopadłościanu jest iloczynem jego trzech długości boków. Na przykład, sześcienna tom 4, których długości boków są liczbami całkowitymi może mieć boki [1, 1, 4], [1, 2, 2], [1, 4, 1], [2, 1, 2], [2, 2, 1], i [4, 1, 1]. Jednak niektóre z nich reprezentują ten sam prostopadłościan: np. [1, 1, 4]I [4, 1, 1]są obrócone o tę samą prostopadłościan. Istnieją tylko dwie wyraźne prostopadłościany o objętości 4 i bokach całkowitych: [1, 1, 4]i [1, 2, 2]. Wyjściem może być dowolna reprezentacja pierwszego prostopadłościanu i dowolna reprezentacja drugiego prostopadłościanu.

Wejście

Twój program musi przyjąć jedną dodatnią liczbę całkowitą .1n2)31-1

Wynik

Musisz wyprowadzić wszystkie możliwe prostopadłościany w formie listy lub w inny dopuszczalny sposób. Na przykład

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

Podlisty nie muszą być sortowane, o ile są unikalne.

Punktacja

To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki są zabronione.

Oto generator przypadków testowych

Liderów

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

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



Odpowiedzi:


4

Galaretka , 7 bajtów

œċ3P⁼¥Ƈ

Monadyczny link akceptujący dodatnią liczbę całkowitą, która daje listę 3-list dodatnich liczb całkowitych.

Wypróbuj online!

W jaki sposób?

œċ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 bajtów

Drukuje prostopadłościany do STDOUT.

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

Wypróbuj online!

Skomentował

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 bajty

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

Wypróbuj online!

Krotki są w kolejności malejącej. „3” wydaje się być wystarczająco małą liczbą, aby napisanie 3 pętli było krótsze niż cokolwiek innego, co mogłem wymyślić.


Podoba mi się meta-zaciemnianie wywołania krotek zawartości zwracanej listy.
Jonathan Frech,


4

Galaretka , 11 bajtów

ÆDṗ3Ṣ€QP=¥Ƈ

Wypróbuj online!

Monadyczny link przyjmujący za argument liczbę całkowitą i zwracający listę list liczb całkowitych.

Wyjaśnienie

Æ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

Siatkówka , 59 bajtów

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

Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:

.+
*

Konwertuj na unary.

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

Powtarzając dwa razy, podziel ostatnią liczbę w każdej linii na wszystkie możliwe pary czynników. Wygląd jest chciwy i atomowy, więc po dopasowaniu prefiksu ostatniego numeru nie będzie się cofał. To generuje wszystkie możliwe kombinacje trzech czynników.

A`_(_+) \1\b

Usuń wiersze, w których czynniki nie są w porządku rosnącym.

_+
$.&

Konwertuj na dziesiętny.


2

Pyth , 11 bajtów

fqQ*FT.CSQ3

Wypróbuj 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 bajtów

Ò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

Wypróbuj online!



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.