출력 고유 계수 입방 형


14

출력 고유 계수 입방 형

오늘의 과제는 매우 간단합니다. 양의 정수가 주어지면 각 직육면체의 대표 요소를 요인으로 출력합니다.

설명

직육면체의 부피는 3 변의 곱입니다. 예를 들어, 측면 길이이다 정수 측면을 가질 수 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]. 출력은 제 1 직육면체의 임의의 표현 및 제 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]]

하위 목록은 고유 한 경우에만 정렬 할 필요가 없습니다.

채점

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다. 표준 허점은 금지되어 있습니다.

테스트 케이스 생성기는 다음과 같습니다.

리더 보드

다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# 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⁼¥Ƈ

양의 정수를 허용하는 monadic Link는 양의 정수로 구성된 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

자바 스크립트 (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

하스켈 , 52 바이트

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

온라인으로 사용해보십시오!

튜플은 내림차순입니다. "3"은 3 개의 루프를 작성하는 것이 내가 생각할 수있는 일반적인 것보다 더 짧은 작은 숫자 인 것 같습니다.


나는 반환 된 목록의 내용 튜플을 호출하는 메타 난독 화를 좋아합니다.
Jonathan Frech


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

망막 , 59 바이트

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

온라인으로 사용해보십시오! 링크에는 테스트 스위트가 포함되어 있습니다. 설명:

.+
*

단항으로 변환합니다.

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

두 번 반복하여 각 줄의 마지막 숫자를 가능한 모든 요인 쌍으로 나눕니다. lookbehind는 탐욕스럽고 원자 적이므로 마지막 숫자의 접두사와 일치하면 역 추적되지 않습니다. 이것은 세 가지 요소의 가능한 모든 순열을 생성합니다.

A`_(_+) \1\b

요인이 오름차순이 아닌 행을 삭제하십시오.

_+
$.&

십진수로 변환합니다.





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.