Binäre Prime-Chunks


19

Wir suchen nach einer Sequenz

Nehmen Sie die natürlichen Zahlen
1,2,3,4,5,6,7,8,9,10,11,12,13,14...

Konvertiere zu Base-2
1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110...

Verketten Sie die obigen Zahlen
110111001011101111000100110101011110011011110...

Partitioniere diese Zahl in Prime-Chunks
(Chunks mit einer Primzahl von Ziffern). Die
Primzahlen werden in aufsteigender Reihenfolge genommen2,3,5,7,11,13,17...

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

und finde die Summe der Ziffern jedes Brocks

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

Die Sequenz

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

Die Herausforderung

Suchen Sie den nthBegriff der obigen Sequenz

Eingang

Eine ganze Zahl n>0

Testfälle

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

Dies ist kürzeste Antwort in Bytes gewinnt!


2
Verwandte (die ersten drei Schritte sind die gleichen)
Laikoni

4
Abgestimmt, weil es sich zu sehr nach einer Reihe von Herausforderungen anfühlt, die zusammengefügt werden.
Esolanging Fruit

Antworten:


14

Schale , 8 Bytes

Σ!CİpṁḋN

Probieren Sie es online!

Erläuterung

Σ!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

Gelee , 12 Bytes

RÆNµSRBFṁRṪS

Probieren Sie es online!

Wie es funktioniert

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 Bytes

Code

Kann bei großen Zahlen ziemlich langsam werden:

ÅpDOLbJs£`SO

Verwendet die 05AB1E- Kodierung. Probieren Sie es online!

Erläuterung

Å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

Gelee , 16 Bytes

RBFṁ
RÆNSÇṫÆNC$S

Probieren Sie es online!

Erläuterung

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 , 206 200 Byte

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

Probieren Sie es online!

Der Algorithmus versucht auch, Platz zu sparen, indem er iterativ Bits entfernt, während er durch die Primzahlen wechselt. Ich habe das Gefühl, dass die Umwandlung von Dezimalstellen in Bits wahrscheinlich kürzer sein könnte, aber ich konnte keine anderen Alternativen finden.

6 Bytes gespart dank Jonathan French.


1
Ich denke, R unterstützt verkettete Zuweisung; p=j=2ist zwei Bytes kürzer als p=2;j=2.
Jonathan Frech

... was wahrscheinlich auch getan werden kann a=p, um noch zwei Bytes zu sparen.
Jonathan Frech

1
... und - ich weiß nicht warum - es scheint auch zu funktionieren y=1, ersetzt durch y=2, was zu 200 Bytes führt .
Jonathan Frech

Vielen Dank. Das y = 2 ersetzt das Bit für Ziffer 1. Es funktioniert, weil es für n> 1 bei der ersten Iteration weggeschnitten wird und für n = 1 die for-Schleife rückwärts durchläuft, wodurch die Antwort für n = 3 geliefert wird ist immer noch 2 (nicht so schlimm).
NofP

2

JavaScript (ES6), 144 Byte

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")

Ungolfed

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
}

Testfälle



2

JavaScript (ES6), 138 132 123 Bytes

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)``

Testfälle

Probieren Sie es online!

Demo

NB: Hier sind nur "sichere" Testfälle enthalten (funktioniert garantiert unter Chrome, Firefox und Edge). Möglicherweise müssen Sie die Call-Stack-Größe Ihrer Engine erhöhen, um die anderen zu überholen.

Formatiert und kommentiert

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 Bytes

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

Probier es aus

Erweitert:

{  # 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 Bytes

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

erklärt

(                                                         )@: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

Probieren Sie es online!


30 Bytes mit key ( /.):_1({]+//.$$&;<@#:@#\)[:#~p:@i.
Meilen

super schlau. Danke Meilen.
Jonah

0

JavaScript 1+ + substr, 135 Bytes

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,'+'))

Was meinst du mit "4"? Sind Sie sich der Version nicht sicher? Das Erweitern dessen, was Sie im Körper meinen, würde dazu beitragen, diesen Beitrag zu verbessern.
FryAmTheEggman

Ich weiß, es läuft, als JS5 nicht kam, aber nicht so genau, wann
l4m2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.