Die zyklische Folge von geraden Ziffern mit dazwischen liegenden Gewinnchancen


13

Betrachten Sie die folgende Reihenfolge:

1, 0, 1, 2, 4, 1, 6, 8, 0, 1, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 0, 1, ...

Die geraden Ziffern beginnen bei 0 und sind in Läufe mit zunehmender Länge gruppiert. Sie sind zyklisch angeordnet, dh, sie werden in aufsteigender Reihenfolge sortiert, bis 8 erreicht ist, und dann von 0 zurückgespult . 1 trennt die Abläufe von geraden Ziffern und startet auch die Sequenz. Stellen wir uns vor, wie diese Sequenz gebildet wird:

                 1, 0, 1, 2, 4, 1, 6, 8, 0, 1, 2, 4, 6, 8, 1, 0, 2, 4, 6, 8, 1,  ...

                    -     ----     -------     ----------     -------------
run length:         1      2          3            4                5            ...
position of 1:   X     X        X           X              X                 X   ...
even sequence:      0,    2, 4,    6, 8, 0,    2, 4, 6, 8,    0, 2, 4, 6, 8      ...

Akzeptable Eingabe- und Ausgabemethoden:

  • Empfangen Sie eine Ganzzahl N als Eingabe und geben Sie den N- ten Term dieser Sequenz aus.

  • Empfangen Sie eine Ganzzahl N als Eingabe und geben Sie die ersten N Terme dieser Sequenz aus.

  • Drucken Sie die Sequenz auf unbestimmte Zeit.

Sie können für die ersten beiden Methoden zwischen 0- und 1-Indizierung wählen.

Sie können in jeder Programmiersprache mit den Standard-Eingabe- und Ausgabemethoden konkurrieren . Standardlücken sind verboten. Das ist , also gewinnt der kürzeste Code in jeder Sprache.


Diese Herausforderung wurde mit einem Sandkasten bewältigt .
Mr. Xcoder

Antworten:



7

Gelee , 10 Bytes

5ḶḤṁR€1pFḣ

Gibt die ersten n Elemente der Sequenz zurück.

Probieren Sie es online!

Wie es funktioniert

5ḶḤṁR€1pFḣ  Main libk. Argument: n

5           Set the return value to 5.
 Ḷ          Unlength; yield [0, 1, 2, 3, 4].
  Ḥ         Unhalve; yield [0, 2, 4, 6, 8].
    R€      Range each; yield [[1], [1, 2], [1, 2, 3], ..., [1, ..., n]].
   ṁ        Mold; in the result to the left, replace [1] with [0], [1, 2] with
            [2, 4], [1, 2, 3] with [6, 8, 0], and so forth.
      1p    Take the Cartesian product of [1] and the result.
        F   Flatten the result.
         ḣ  Head; take the first n items of the result.

2
ಠ_ಠ Unhalve... Ist das nicht einfach Double?
Herr Xcoder

4
Es ist nur eine Gedächtnisstütze. Hist halbiert , ist also nicht halbiert . ÆAist Arccosin , so ÆẠist Unarccosin .
Dennis

6

Schale , 12 11 10 Bytes

ṁ:1CN¢mDŀ5

Probieren Sie es online!

Druckt die Sequenz auf unbestimmte Zeit.

Alternative:

J1CΘN¢mDŀ5

Probieren Sie es online!

Erläuterung

        ŀ5   Start from [0, 1, 2, 3, 4]
      mD     Double each value to get [0, 2, 4, 6, 8]
     ¢       Repeat this list indefinitely, [0, 2, 4, 6, 8, 0, 2, ...]
   CN        Cut it into chunks of increasing lengths, 
             [[0], [2, 4], [6, 8, 0], ...]
ṁ:1          Prepend 1 to each sublist and concate the resulting lists.

Für die alternative Lösung:

     ¢mDŀ5   Again, get [0, 2, 4, 6, 8, 0, 2, ...].
  CΘN        This time we prepend a zero to the natural numbers, which
             prepends an empty list to the resulting chunks.
J1           Join all the sublists with 1.

Wir könnten auch tun ...ΘCN..., weil Θ"Standardelement voranstellen", das eine Null für Listen von ganzen Zahlen und eine leere Liste für Listen von Listen voranstellt.




2

APL, 25 Bytes

Gibt den n-ten Ausdruck zurück.

1,(⌽n↑⌽(+/⍳n←⎕)⍴0,2×⍳4),1

Erläuterung

n←⎕     Prompts for screen input of integer
+/⍳      Creates a vector of integers of 1 to n and sums
⍴0,2×⍳4  Creates a vector by replicating 0 2 4 6 8 to the length of sum
⌽n↑⌽   Rotates the vector, selects first n elements and rotates result
        (selects last n elements}    
1,...,1 Concatenates 1s in front and behind result

2

APL (Dyalog Unicode) , 52 59 56 Bytes

rc k
r←~n0
:For j :In k
n+←j-1
r,←1,⍨jn0,2×⍳4
:End
rkr

Probieren Sie es online!

Dies ist ein tradfn ( einf itional f unctio n ) ein Argument nimmt , kund die ersten wiederkehrenden kElemente der Sequenz.

Vielen Dank an @GalenIvanov für den Hinweis auf einen Fehler in der Funktion. Vielen Dank an @ Adám für 3 Bytes.

Wie es funktioniert:

rc k              The function c takes the argument k and results in r
r n1 0            Initializing the variables r and n, and setting them to 1 and 0, respectively.
:For j :In k      For loop. k yields [1, 2, 3, ..., k], and j is the control variable.
n+←j-1             Accumulates j-1 into n, so it follows the progression (0, 1, 3, 6, 10, 15...)
r,←1,⍨jn0,2×⍳4   This line is explained below.
:End               Ends the loop
rkr              return the first k items of r.
                    actually reshapes the vector r to the shape of k;
                   since k is a scalar,  reshapes r to a vector with k items.
            2×⍳4   APL is 1-indexed by default, so this yields the vector 2 4 6 8
          0,       Prepend a 0 to it. We now have 0 2 4 6 8
        n         Rotate the vector n times to the left.
      j           Reshape it to have j items, which cycles the vector.
   1,⍨             Append a 1, then
r,←                Append everything to r.

Unten sind ein Dfn( d irect f unctio n ) und eine stillschweigende Funktion auch , dass die Herausforderung lösen, sowohl freundlicherweise von @ Adám vorgesehen.

  • Dfn: Online ausprobieren {⍵⍴1,∊1,⍨¨j⍴¨(+\¯1+j←⍳⍵)⌽¨⊂0,2×⍳4} !
  • Tacit: ⊢⍴1,∘∊1,⍨¨⍳⍴¨(⊂0,2×⍳4)⌽⍨¨(+\¯1+⍳) Probieren Sie es online!

Ich interessiere mich für die Erklärung der stillschweigenden Vesrion. Vielen Dank!
Galen Ivanov

@GalenIvanov Ich werde heute später eine hinzufügen.
J. Sallé,

Mir ist aufgefallen, dass die 3 Funktionen falsche Antworten liefern - die Untersequenzen beginnen immer bei 0 nach 1 - sie sollten ab der letzten geraden Stelle der vorherigen Untersequenz fortgesetzt werden.
Galen Ivanov

@GalenIvanov Du hast recht. Ich werde sehen, ob ich das Problem beheben und die Erklärungen heute hinzufügen kann.
J. Sallé

1

JavaScript (ES6), 62 54 52 Bytes

Gibt den N- ten Term der Sequenz mit dem Index 0 zurück.

n=>(g=e=>n--?g(e+=k++<l?2:k=!++l):k<l?e%10:1)(k=l=0)

Demo


1

C (gcc) 84 Bytes

i;j;f(){for(i=1;;i++){printf("%d ",1);for(j=0;j<i;)printf("%d ",(2*j+++i*i-i)%10);}}

Probieren Sie es online!

Eine Funktion ( f()), die die Sequenz unendlich ausgibt, getrennt durch Leerzeichen.

i ist die Länge des aktuellen geraden Laufs.

j ist der Index im aktuellen geraden Lauf

(2*j+++i*i-i)%10 gibt die richtige gerade Zahl an, wenn i und j (und die Schritte j) gegeben sind, die ((j + Tr (i))% 5) * 2 entspricht, wobei Tr (x) die x-te dreieckige Zahl ist (die die Zahl der geraden Zahlen ist) Zahlen, die vor dem aktuellen geraden Lauf gedruckt wurden;



1

Java 8, 96 Bytes

v->{for(int i=0,j=-2,k;;i++,System.out.println(1))for(k=0;k++<i;System.out.println(j%=10))j+=2;}

Druckt auf unbestimmte Zeit jede Nummer in einer neuen Zeile.

Erläuterung:

Probieren Sie es hier aus.

v->{                               // Method with empty unused parameter and no return-type
  for(int i=0,                     //  Index integer, starting at 1
          j=-2,                    //  Even index integer, starting at -2
          k;                       //  Inner index integer
      ;                            //  Loop (1) indefinitely
                                   //    After every iteration:
       i++,                        //     Increase index `i` by 1
       System.out.println(1))      //     And print a 1
    for(k=0;                       //   Reset index `k` to 0
        k++<i;                     //   Inner loop (2) from 0 to `i`
                                   //     After every iteration:
       System.out.println(j%=10))  //      Set `j` to `j` modulo-10, and print it
      j+=2;                        //    Increase `j` by 2
                                   //   End of inner loop (2) (implicit / single-line body)
                                   //  End of loop (1) (implicit / single-line body)
}                                  // End of method

1

Batch, 85 Bytes

@set/an=%2+1,t=n*-~n/2
@if %t% lss %1 %0 %1 %n%
@cmd/cset/a(%1-n)%%5*2*!!(t-=%1)+!t

Gibt den N-ten Term der Sequenz aus. Arbeitet durch Berechnung der nächsten Dreieckszahl.



1

J , 46 42 40 Bytes

-6 bytes dank cole

{.({.[:;[:#:&.>2^i.);@(1,&.><;.1)10|2*i.

Gibt die ersten N Terme dieser Sequenz aus.

Wie es funktioniert:

10|[:+:i. - erzeugt eine Liste der Länge N von 0 2 4 6 8 0 2 4 ... Es werden einfach mod 10 der verdoppelten Elemente einer Liste von Ganzzahlen ab 0 verwendet.

[:;[:#:&.>2^i. - erzeugt eine Bitmaske zum Ausschneiden der obigen Liste.

(1 bedeutet Start): 1 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 ... Findet 2 zur Potenz der aufeinanderfolgenden nicht negativen ganzen Zahlen, wandelt sie in Binärzahlen um, verflacht die list und nimmt nur die ersten N Items, so dass die Länge der beiden Listen gleich ist.

;@(1,&.><;.1) - Teilt (schneidet) die Liste der geraden Ziffern in Unterlisten entsprechend der Zuordnung von Einsen und Nullen, fügt die Unterliste an 1 an und glättet schließlich die resultierende Liste

]{. - Nimmt nur die ersten N Elemente und entfernt die zusätzlichen Nummern in der Liste aufgrund der hinzugefügten Einsen.

Probieren Sie es online!


1
42 Bytes {.({.[:;[:#:&.>2^i.);@(1,&.><;.1)(10|2*i.). Die Änderungen, die ich vorgenommen habe, bestanden darin, Haken zu verwenden und den rechten Zinken der Gabel umzugestalten, um die Funktionsweise der Gabeln zu nutzen. Ich mag den 2^i.Trick. Ich versuche jetzt, am linken Gabelzinken zu arbeiten.
Cole

@cole Danke, ich muss lernen, Gabeln besser zu benutzen. Anscheinend ist die Gabel 2 * i. ist besser als der Haken mit der Kappe [: +: i.
Galen Ivanov

1
Sie können die Eltern auch auf die rechte Seite legen (10|2*i.)->10|2*i.
cole




0

Proton , 55 Bytes

i=0 j=-2while1{for k:0..i print(j=(j+2)%10)print(1)i++}

Probieren Sie es online!

Druckt die Sequenz auf unbestimmte Zeit


ಠ_ಠ Was ist das, neue Syntax? : p i=0 j=-2while1{...
Mr. Xcoder

@ Mr.Xcoder: P -2whileist genau wie Python und while1liegt daran, dass ich Identifikatoren erstellt habe, die kein Schlüsselwort gefolgt von einer Zahl sein können
HyperNeutrino




0

JavaScript, 45 Bytes

1 indiziert:

f=(x,t=0,p=0)=>p<x?f(x-1,t+1,p+t):x-p?x%5*2:1

0 indiziert:

g=(x,p=0)=>p<x?g(x-1,p?++t+p:t=1):x-p?x%5*2:1



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.