완벽한 정사각형을 구성하는 시퀀스에서 수집


10

무한 시퀀스 인 시퀀스 OEIS A033581이 주어지면, n 번째 항 (0- 인덱싱)은 닫힌 형태 공식 6 × n 2로 주어진다 .

당신의 임무는 코드에서 코드를 작성하는 것인데,이 코드는 서브 세트의 합이 완벽한 제곱이되도록 시퀀스에서 N 개의 첫 번째 숫자 세트의 모든 서브 세트를 출력합니다.

규칙

  • 정수 N는 입력으로 제공됩니다.
  • 합계에 이미 사용 된 숫자는 재사용 할 수 없습니다. (즉, 각 숫자는 각 서브 세트에 최대 한 번만 나타날 수 있음)
  • 사용 된 숫자는 비 연속적 일 수 있습니다.
  • 가장 작은 크기의 코드가 승리합니다.

주어진 순서는 {0,6,24,54,96, ..., 15000}입니다.

필수 서브 세트 중 하나는 {6,24,294}입니다.

6+24+294 = 324 = 18^2

주어진 범위에서 가능한 모든 길이의 모든 세트를 찾아야합니다.


3
좋은 첫 게시물! 예제와 테스트 사례를 추가 할 수도 있습니다. 나중에 참조 할 수 있도록 아이디어를
시험해

이것은 N이 주어진 A033581을 계산하도록 요구합니까? 아니면 이것을 올바르게 이해하고 있지 않습니까?
ATaco

@ATaco 시퀀스처럼 (1,9,35,39 ...) 1 + 9 + 39 = 49 완벽한 정사각형 (3 개의 숫자를 사용함), 35 + 1 = 36의 또 다른 완벽한 정사각형이지만 2 개의 숫자를 사용합니다. 따라서 {1,35}가 필수 세트입니다.
prog_SAHIL

3
@prog_SAHIL 게시물에 예제로 몇 가지를 추가하면 도움이 될 것입니다 :)
Οurous

답변:


3

05AB1E , 10 바이트

ݨn6*æʒOŲ

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

어떻게?

ݨn6 * æʒOŲ || 전체 프로그램. 입력 N을 호출합니다.

Ý || 0부터 시작하는 포함 범위. [0, N] ∩ ℤ을 누릅니다.
 ¨ || 마지막 요소를 제거하십시오.
  n || 정사각형 (요소 별)
   6 * || 6을 곱하십시오.
     æ || 파워 셋.
      ʒ || 다음을 충족하는 필터를 유지하십시오.
       O || --- | 그들의 합은 ...
        Ų || --- | ... 완벽한 광장입니까?

3

하스켈 , 114 (104) 103 86 바이트

f n=[x|x<-concat<$>mapM(\x->[[],[x*x*6]])[0..n-1],sum x==[y^2|y<-[0..],y^2>=sum x]!!0]

LaikoniØrjan Johansen 에게 골프를 보내 주셔서 감사합니다 ! :)

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

약간 더 읽기 쉬운 버전 :

--  OEIS A033581
ns=map((*6).(^2))[0..]

-- returns all subsets of a list (including the empty subset)
subsets :: [a] -> [[a]]
subsets[]=[[]]
subsets(x:y)=subsets y++map(x:)(subsets y)

-- returns True if the element is present in a sorted list
t#(x:xs)|t>x=t#xs|1<2=t==x

-- the function that returns the square subsets
f :: Int -> [[Int]]
f n = filter (\l->sum l#(map(^2)[0..])) $ subsets (take n ns)

@Laikoni 매우 독창적입니다! 감사!
Cristian Lupascu

@Laikoni 맞아! 감사!
Cristian Lupascu


2

Pyth , 12 바이트

Mr. Xcoder 덕분에 -2 바이트

fsI@sT2ym*6*

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

2 바이트가 추가로 제거하기 위해 추가해야 []하고 [0],하지만 그들은 나에게 유효 출력처럼 보인다!


Explanataion

    fsI@sT2ym*6*
    f                  filter
           y           the listified powerset of
            m*6*ddQ    the listified sequence {0,6,24,...,$input-th result}
        sT             where the sum of the sub-list
     sI@  2            is invariant over int parsing after square rooting

12 바이트 : fsI@sT2ym*6*.
Mr. Xcoder

그것이 내가 찾고 있던 광장 점검 골프입니다!
Dave

2

클린 , 145 ... 97 바이트

import StdEnv
@n=[[]:[[6*i^2:b]\\i<-[0..n-1],b<- @i]]
f=filter((\e=or[i^2==e\\i<-[0..e]])o sum)o@

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

도우미 함수 @를 사용하여 n각 항을 [[],[6*n^2],...]각 항과 [[],[6*(n-1)*2],...]재귀 적으로 그리고 역순 으로 연결 하여 항으로 설정되는 검정력을 생성합니다 .

f그런 다음 부분 함수 는 다음과 같이 구성됩니다 (여기서 구성을 ->나타냄 o).
apply @ -> take the elements where -> the sum -> is a square

불행히도 우선 순위 규칙은 인라인으로 사용될 때 대괄호가 필요하기 때문에 를 건너 뛰고 f=부분 함수 리터럴을 제공 할 수 없습니다 .


1
Bah Haskell의 답변을 훔쳐 야하는 트릭이 있습니다 ... : P
Ørjan Johansen



1

자바 스크립트 (ES7), 107 바이트

n=>[...Array(n)].reduce((a,_,x)=>[...a,...a.map(y=>[6*x*x,...y])],[[]]).filter(a=>eval(a.join`+`)**.5%1==0)

데모

댓글

n =>                      // n = input
  [...Array(n)]           // generate a n-entry array
  .reduce((a, _, x) =>    // for each entry at index x:
    [                     //   update the main array a[] by:
      ...a,               //     concatenating the previous values with
      ...a.map(           //     new values built from the original ones
        y =>              //     where in each subarray y:
          [ 6 * x * x,    //       we insert a new element 6x² before
            ...y       ]  //       the original elements
      )                   //     end of map()
    ],                    //   end of array update
    [[]]                  //   start with an array containing an empty array
  )                       // end of reduce()
  .filter(a =>            // filter the results by keeping only elements for which:
    eval(a.join`+`) ** .5 //   the square root of the sum
    % 1 == 0              //   gives an integer
  )                       // end of filter()

0

Japt , 15 바이트

ò_²*6Ãà k_x ¬u1

시도 해봐


설명

0에서 입력 ( ò) 까지의 정수 배열을 생성하고 각각 함수 ( _ Ã)를 제곱하여 제곱 ( ²) 및 6 ( *6)으로 곱합니다 . 해당 배열 (모든 조합을 가져 오기 à) 및 반환 truthy 자들을 (제거 k하는 기능 (통과 할 때) _자신의 요소를 (추가) x), 광장 결과 (의 루트 도착 ¬)과 개조하는 일에 의해 ( u1)

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