二进制素块


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

将此数字划分Prime-Chunk
(包含数字的质数的块)质数
按升序排列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 '17

4
投票不足,因为这感觉就像一堆挑战混在一起。
Esolanging Fruit

Answers:


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

R206200字节

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

在线尝试!

该算法还尝试通过在素数循环时反复删除位来“节省”空间。我觉得从十进制到位的转换可能会更短,但是我找不到其他替代方法。

节省了6个字节,感谢Jonathan French。


1
我认为R支持链式分配。p=j=2比短2个字节p=2;j=2
乔纳森·弗雷奇

...这可能也可以完成a=p,另存两个字节。
乔纳森·弗雷希

1
......嗯-我不知道为什么-它似乎也工作y=1,以替换y=2,导致200个字节
乔纳森·弗雷希

谢谢。y = 2替换数字1的位。之所以起作用,是因为对于n> 1,在第一次迭代时将其修剪掉,对于n = 1,for循环向后循环,因此提供了n = 3的答案。仍然是2(不是那么倒霉)。
NofP

2

JavaScript(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

的JavaScript(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

Perl 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

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.
英里

超级聪明。感谢英里。
约拿(Jonah)

0

JavaScript 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.