이진 프라임 청크


19

시퀀스를 찾고 있습니다

자연수를 가져 가라
1,2,3,4,5,6,7,8,9,10,11,12,13,14...

기본 -2로 변환
1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110...

위의 숫자를 연결
110111001011101111000100110101011110011011110...

파티션 에서이 번호 황금 덩어리를
(숫자의 소수를 포함 덩어리)이
소수가 asceding 순서에서 촬영2,3,5,7,11,13,17...

[11][011][10010][1110111][10001001101][0101111001101][1110...]

각 덩어리의 자릿수를 찾습니다.

Primes 2 3 5 7 11 13 17
Chunks [11][011][10010][1110111][10001001101][0101111001101][1110...]
SumOfDigits 2 2 2 6 5 8

시퀀스

2, 2, 2, 6, 5, 8, 9, 10, 14, 22, 11, 18, 25, 27, 32, 21, 28, 32, 40, 40, 49, 49, 32, 41, 49, 53, 63, 55, 63, 70, 87, 73, 51, 63, 71, 78, 78, 90, 107, 86, 96, 108, 115, 128, 138, 92, 83, 95, 102, 110, 130, 106, 122, 141, 149, 163, 130, 140, 151, 165, 181, 165, 204, 200, 234, 100, 130, 138, 167, 149, 169, 180, 209, 166, 189, 194, 222, 205, 234, 260, 216, 206, 217, 241, 240, 267, 289, 242, 274, 308, 286, 329, 338, 155, 189, 225, 197, 240, 272, 217, 254, 282, 287, 317, 281, 256, 299, 286, 331, 337, 316, 350, 354, 391, 367, 282, 327, 313, 364, 358, 348, 397, 406, 466 ...

도전

nth위 시퀀스 의 항을 찾습니다

입력

정수 n>0

테스트 사례

1->2   
3->2    
6->8    
36->78 
60->165    
160->581     
260->1099    
350->1345

이것은 입니다. 바이트 단위의 빠른 답변이 승리합니다!


2
관련 (처음 세 단계는 동일)
Laikoni

4
이 문제는 서로 뭉친 많은 도전과 같은 느낌이 들기 때문에 하향 조정되었습니다.
Esolanging 과일

답변:


14

껍질 , 8 바이트

Σ!CİpṁḋN

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

설명

Σ!CİpṁḋN
       N   Start with the infinite list of natural numbers.
     ṁḋ    Convert each to its binary representation and join them all together. (A)
   İp      Get the infinite list of primes. (B)
  C        Split (A) into chunks of lengths (B).
 !         Retrieve the nth chunk (where n is the input).
Σ          Sum the bits in this chunk.

6

젤리 , 12 바이트

RÆNµSRBFṁRṪS

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

작동 원리

RÆNµSRBFṁRṪS  Main link. Argument: n

R             Range; yield [1, ..., n].
 ÆN           N-th prime; yield P := [p(1), ..., p(n)].
   µ          Begin a new, monadic chain with argument P.
    S         Take the sum of P, yielding s := p(1) + ... + p(n).
     R        Range; yield [1, ..., s].
      B       Binary; convert all integers from 1 to s to base 2.
       F      Flatten the resulting array.
         R    Range; yield [[1, ..., p(1)], ..., [1, ..., p(n)]].
        ṁ     Mold; reshape the result to the left like the result to the right.
          Ṫ   Tail; take the last chunk.
           S  Take the sum, counting the set digits.

5

05AB1E , 12 바이트

암호

많은 수의 경우 꽤 느려질 수 있습니다.

ÅpDOLbJs£`SO

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명

Åp              # Get a list of the first <input> primes
  DO            # Duplicate and sum the primes
    L           # Create the list [1, .., <sum>]
     bJ         # Convert to binary and join into a single string
       s£       # Get the slices [a[0:2], a[2:2+3], a[2+3:2+3+5], a[2+3+5:2+3+5+7], ...] 
                  corresponding to the list of primes
         `SO    # Get the last one and sum up it's digits



2

젤리 , 16 바이트

RBFṁ
RÆNSÇṫÆNC$S

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

설명

RBFṁ  Helper link. Input: integer k
R     Range, [1, 2, ..., k]
 B    Convert each to a list of its binary digits
  F   Flatten
   ṁ  Shape it to length k

RÆNSÇṫÆNC$S  Main link. Input: integer n
R            Range, [1, 2, ..., n]
 ÆN          Get i'th prime for each
   S         Sum
    Ç        Call helper link
         $   Monadic chain
      ÆN       Get n'th prime
        C      Complement, 1 - n'th prime
     ṫ       Tail, take the last n'th prime digits
          S  Sum

2

R , 206200 바이트

function(n){a=p=j=y=2
for(i in 2:n-1){while(sum(y)<4*a){x=as.double(rev(intToBits(j)))
y=c(y,x[cumsum(x)>0])
j=j+1}
b=1:a
y=y[-b]
z=outer(k<-b+a,p,'%%')
p=c(a<-k[!apply(z<1,1,sum)][1],p)}
sum(y[1:a])}

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

알고리즘은 또한 소수를 순환하면서 비트를 반복적으로 제거하여 공간을 "저장"하려고합니다. 십진수를 비트로 변환하는 것이 더 짧을 수 있다고 생각하지만 다른 대안을 찾을 수는 없습니다.

Jonathan French 덕분에 6 바이트를 절약했습니다.


1
R이 체인 할당을 지원한다고 생각합니다. p=j=2보다 2 바이트 짧습니다 p=2;j=2.
Jonathan Frech

... 아마도 a=p2 바이트를 절약 하여 수행 할 수 있습니다 .
Jonathan Frech

1
... 그리고-이유를 모르겠습니다. 또한 작동 하고 200 바이트y=1 로 대체 된 것 같습니다 . y=2
Jonathan Frech

감사합니다. y = 2는 숫자 1의 비트를 대체합니다. n> 1의 경우 첫 번째 반복에서 제거되고 n = 1의 경우 for 루프가 뒤로 루프되므로 n = 3에 대한 답을 제공합니다. 여전히 2입니다 (행운은 나쁘지 않습니다).
NofP

2

자바 스크립트 (ES6), 144 바이트

n=>eval("s=o=j=0;for(i=p=1;n;d>p&&(n--,s+=p))for(p++,d=2;p%d++;);while(b=Math.log2(++j)+1|0,i<=s)for(x=0;x++<b&i<=s;)o+=i++>s-p&&j<<x&1<<b?1:0")

언 골프

n=>{
    s=o=j=0;
    for(i=p=1;n;d>p&&(n--,s+=p))
        for(p++,d=2;p%d++;);
    while(b=Math.log2(++j)+1|0,i<=s)
        for(x=0;x++<b&i<=s;)
            o+=i++>s-p&&j<<x&1<<b?1:0
    return o
}

테스트 사례



2

자바 스크립트 (ES6) 138 132 123 바이트

N=>(n=k=1,g=s=>N?g((P=n=>n%--x?P(n):x<2)(x=++n)?s[n]?s.slice(--N&&n,n/!N):s+(n--,k++).toString(2):s):s.split`1`.length-1)``

테스트 사례

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

데모

주의 : 여기에는 '안전한'테스트 사례 만 포함됩니다 (Chrome, Firefox 및 Edge에서 작동하도록 보장됨). 다른 엔진을 전달하려면 엔진의 호출 스택 크기를 늘려야 할 수도 있습니다.

형식화 및 의견

N => (                            // given N = index of the expected term
  n = k = 1,                      // n = current prime, k = current natural number
  g = s =>                        // g = recursive function taking s = binary string
    N ?                           //   if we haven't reached the correct chunk yet:
      g(                          //     do a recursive call to g():
        (P = n =>                 //       P() returns: true for prime
          n % --x ? P(n) : x < 2) //                    false for composite
        (x = ++n) ?               //       increment n; if n is prime:
          s[n] ?                  //         if s is long enough:
            s.slice(--N && n,     //           either remove this chunk (if N > 0)
                    n / !N)       //           or truncate it to the correct size (if N = 0)
          :                       //         else:
            s + (n--, k++)        //           append the next natural number to s
                .toString(2)      //           in binary format
        :                         //       else:
          s                       //         just look for the next prime
      )                           //     end of recursive call
    :                             //   else:
      s.split`1`.length - 1       //     return the number of 1's in the last chunk
)``                               // initial call to g() with an empty string

1

펄 6 , 67 바이트

{(1..*).map(|*.base(2).comb).rotor(grep *.is-prime,2..*)[$_-1].sum}

그것을 테스트

넓히는:

{  # bare block lambda with implicit parameter 「$_」

  (

    1 .. *                # Range of all numbers starting with 1

  ).map(

    # WhateverCode lambda
    |                     # Slip each of these values into the outer list individually
      *                   # this is the parameter
      .base(2)            # convert base
      .comb               # split into digits


  ).rotor(                # split into chunks

    grep *.is-prime, 2..* # the sequence of prime numbers


  )[ $_ - 1]              # index into it using 1 based indexing

  .sum                    # find the sum
}

1

파이썬 (2) , 143 (139) 133 바이트

@ErikTheOutgolfer 덕분에 -4 바이트

s='1';i=x=1
exec"s=s[i:];i+=1\nwhile~-all(i%x for x in range(2,i)):i+=1\nexec's+=bin(x)[2:];x+=1;'*i;"*input()
print s[:i].count('1')

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


호환되지 않는 테스트 장치를 제거하여 -2 바이트 물건을 정리하여 또 다른 -2 .
Outgolfer Erik

@EriktheOutgolfer 감사합니다. 여전히 이전 테스트를 다시 추가 할 수있었습니다.
ovs

1

J, 48 바이트

([:+/-@{:{.+/{.[:}:[:(#:@[,])/1+[:i.1++/)@:p:@i.

설명

(                                                         )@:p:@i.  the first n primes, passed to...
       -@{: {.                    ...                               take "nth prime" elements from the tail of...
               +/                                                   sum the first n primes and...
                  {.                                                take that number of elements from...
                     [: }:                                          all but the last element of...   <----------------<
                                          1 + [: i. 1 + +/          sum first n primes, add 1 (so we have enough      |
                                                                    for case n=1) -- make that many natural numbers   |
                           [: (#:@[ , ])/                           reduce them by turning into lists of binary       |
                                                                    digits and catting, however the rightmost number  |
                                                                    won't get reduced, hence the need for ------------^
([: +/                                                              and sum those digits

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


키 ( /.)를 사용하는 30 바이트 :_1({]+//.$$&;<@#:@#\)[:#~p:@i.
마일

슈퍼 영리한. 감사합니다 마일.
요나

0

자바 스크립트 1+ + substr, 135 바이트

for(n=prompt(s=P=0),i=n*n*n*8;--i;)s=i.toString(2)+s;for(p=1;n;e=j?s:--n?P+=p:s.substr(P,p))for(j=p++;p%j--;);eval([].join.call(e,'+'))

"4"는 무슨 뜻인가요? 버전이 확실하지 않습니까? 본문에서 의미를 확장하면이 게시물을 개선하는 데 도움이됩니다.
FryAmTheEggman

JS5가 오지 않았을 때 실행되는 것을 알고 있지만 정확히 언제인지는 확실하지 않습니다.
l4m2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.