Вихідні кубоїди з різним фактором


14

Вихідні кубоїди з різним фактором

Сьогоднішнє завдання дуже просте: задавши додатне ціле число, виведіть представника кожної кубоїдної форми, формульованої її факторами.

Пояснення

Об'єм кубоїди - це добуток трьох її бічних довжин. Так , наприклад, паралелепіпед обсягу 4, бічні довжини представляють собою цілі числа можуть мати боку [1, 1, 4], [1, 2, 2], [1, 4, 1], [2, 1, 2], [2, 2, 1], або [4, 1, 1]. Однак деякі з них являють собою ту саму кубоїдну клітку: наприклад, [1, 1, 4]та [4, 1, 1]ж кубоїдна поверхня. Є лише дві чіткі кубоїди об'ємом 4 і цілими сторонами: [1, 1, 4]і [1, 2, 2]. Виходом може бути будь-яке представлення першої кубоїди і будь-яке представлення другої кубоїди.

Вхідні дані

Ваша програма повинна приймати єдине додатне ціле число .1n2311

Вихідні дані

Вам потрібно буде вивести всі можливі кубоїди у списку чи будь-яким іншим прийнятним способом. Напр

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

Підсписи не потрібно сортувати, до тих пір, поки вони унікальні.

Оцінка балів

Це код гольфу, тому найкоротша відповідь у байтах виграє. Стандартні лазівки заборонені.

Ось генератор тестових випадків

Табло лідерів

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

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

Якщо ви хочете включити у свій заголовок декілька чисел (наприклад, тому що ваш показник становить суму двох файлів або ви хочете окремо перерахувати штрафні санкції для перекладача), переконайтесь, що фактичний бал є останнім номером у заголовку:

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

Ви також можете зробити ім'я мови посиланням, яке потім з’явиться у фрагменті таблиць лідерів:

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



Відповіді:


4

Желе , 7 байт

œċ3P⁼¥Ƈ

Монадічна посилання, що приймає додатне ціле число, яке дає список 3-х списків натуральних чисел.

Спробуйте в Інтернеті!

Як?

œċ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 байт

Друкує кубоїди до STDOUT.

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

Спробуйте в Інтернеті!

Прокоментував

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 байти

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

Спробуйте в Інтернеті!

Кортежі розташовані у порядку зменшення. Здається, що "3" є досить малим числом, що виписування 3-х циклів було коротшим, ніж усе, що я міг придумати.


Мені подобається метафумування виклику кортежів змісту повернутого списку.
Джонатан


4

Желе , 11 байт

ÆDṗ3Ṣ€QP=¥Ƈ

Спробуйте в Інтернеті!

Монадична посилання, яка бере аргумент цілого числа і повертає список списків цілих чисел.

Пояснення

Æ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 байт

Для даного це створює всі 3 кортежі із записами у та фільтрує дійсні. Щоб гарантувати унікальність, ми вимагаємо, щоб кортежі були відсортовані.n{1,2,,n}

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

Спробуйте в Інтернеті!


1
Я думаю, що трійки можуть бути належним чином вироблені лише смайликом.
Джонатан

: -)
flawr

2

Сітківка , 59 байт

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

Спробуйте в Інтернеті! Посилання включає тестовий набір. Пояснення:

.+
*

Перетворити в одинарне.

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

Повторившись двічі, розділіть останнє число в кожному рядку на всі його можливі пари факторів. Позаду виглядає жадібний та атомний, тому щойно він відповідатиме префіксу останнього числа, він не повернеться. Це породжує всі можливі перестановки трьох факторів.

A`_(_+) \1\b

Видаліть рядки, де фактори не у порядку зростання.

_+
$.&

Перетворити в десятковий.





Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.