사이의 확률로 짝수 자릿수의 순환 순서


13

다음 순서를 고려하십시오.

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

짝수는 0 부터 시작하여 길이가 증가하는 런으로 그룹화됩니다. 그것들은 주기적으로 배열되어 8 에 도달 할 때까지 오름차순으로 정렬 된 다음 0 에서 다시 순환 됨을 의미합니다 . 1 은 짝수의 런을 구분하고 시퀀스도 시작합니다. 이 순서가 어떻게 형성되는지 시각화 해 봅시다 :

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

허용되는 입력 및 출력 방법 :

  • 입력 으로 정수 N 을 받고이 시퀀스 의 N 번째 항을 출력합니다 .

  • 정수 N 을 입력으로 받아이 시퀀스 의 첫 번째 N 항을 출력합니다 .

  • 순서를 무기한으로 인쇄하십시오.

처음 두 방법에 대해 0 또는 1 인덱싱을 선택할 수 있습니다.

표준 입력 및 출력 방법 을 사용하면서 모든 프로그래밍 언어로 경쟁 할 수 있습니다 . 표준 허점 은 금지되어 있습니다. 이것은 이므로 각 언어에서 가장 짧은 코드가 승리합니다.


이 도전은 샌드 박스 되었습니다 .
Mr. Xcoder

답변:



7

젤리 , 10 바이트

5ḶḤṁR€1pFḣ

시퀀스 의 처음 n 개 항목을 반환합니다 .

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

작동 원리

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... 그거 아닌가요 Double?
Mr. Xcoder

4
그것은 단지 니모닉입니다. H이다 이등분 때문에, 이다 unhalve . ÆA이다 아크 코사인 때문에, ÆẠ이다 unarccosine .
Dennis

6

껍질 , 12 11 10 바이트

ṁ:1CN¢mDŀ5

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

시퀀스를 무기한으로 인쇄합니다.

또는

J1CΘN¢mDŀ5

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

설명

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

대체 솔루션 :

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

"prepend default element" 도 ...ΘCN...있기 때문에 Θ정수리스트의 경우 0을,리스트리스트의 경우 빈리스트를 추가 할 수 있습니다.




2

APL, 25 바이트

n 번째 항을 반환합니다.

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

설명

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 바이트

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

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

이것은 tradfn (인 트라 itional F unctio N ) 하나 개의 인자를 고려 k하여 제 복귀 k시퀀스의 항목.

함수의 오류를 지적한 @GalenIvanov에게 감사합니다. 3 바이트 동안 @ Adám에게 감사합니다.

작동 방식 :

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.

아래에있는 Dfn( D irect F unctio N )과 같은 도전 모두 친절 @ 아담 제공을 해결하는 암묵 기능.


나는 암묵적인 설명에 관심이 있습니다. 감사!
Galen Ivanov

@GalenIvanov 오늘 나중에 추가하겠습니다.
J. Sallé

3 개의 함수가 잘못된 답을 산출한다는 것을 알았습니다. 하위 시퀀스는 항상 1부터 0부터 시작합니다. 이전 하위 시퀀스의 마지막 짝수부터 계속해야합니다.
Galen Ivanov

@GalenIvanov 당신이 맞아요. 오늘 문제를 해결하고 설명을 추가 할 수 있는지 살펴 보겠습니다.
J. Sallé

1

자바 스크립트 (ES6), 62 54 52 바이트

시퀀스 의 N 번째 항을 0- 인덱스로 반환합니다 .

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

데모


1

C (gcc), 84 바이트

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

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

f()공백으로 구분하여 시퀀스를 무한대로 인쇄 하는 함수 ( )입니다.

i 현재 짝수 실행의 길이입니다.

j 현재 짝수 실행의 색인입니다.

(2*j+++i*i-i)%10 ((j + Tr (i)) % 5) * 2에 해당하는 i 및 j (및 증분 j)로 올바른 짝수를 제공합니다. 여기서 Tr (x)는 x 번째 삼각수 (짝수입니다) 현재 실행되기 전에 인쇄 된 숫자;



1

자바 8, 96 바이트

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;}

각 줄을 새 줄에 무한정 인쇄합니다.

설명:

여기에서 시도하십시오.

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

배치, 85 바이트

@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

시퀀스의 N 번째 항을 출력합니다. 다음 삼각형 숫자를 계산하여 작동합니다.



1

J , 46 42 40 바이트

Cole 덕분에 -6 바이트

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

이 시퀀스의 첫 번째 N 항을 출력합니다.

작동 방식 :

10|[:+:i. -길이 N의 0 2 4 6 8 0 2 4의 목록을 생성합니다. 단순히 0에서 시작하는 정수 목록의 두 배로 된 항목의 mod 10을 가져옵니다.

[:;[:#:&.>2^i. -위 목록을 잘라 내기위한 비트 마스크를 생성합니다.

(1은 시작을 의미합니다) : 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ... 2는 연속적인 음이 아닌 정수의 거듭 제곱을 구하고 2 진수로 변환하고 두 목록의 길이가 동일하도록 첫 N 개의 항목 만 가져옵니다.

;@(1,&.><;.1) -짝수 자릿수 목록을 1과 0의 맵에 따라 하위 목록으로 분할하고 잘라 내고 하위 목록을 1에 추가하고 결과 목록을 평평하게 만듭니다.

]{. -추가 된 1로 인해 목록에서 추가 번호를 제거하여 처음 N 개 항목 만 가져옵니다.

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


1
42 바이트 : {.({.[:;[:#:&.>2^i.);@(1,&.><;.1)(10|2*i.). 내가 한 변경 사항은 후크를 사용하고 포크의 올바른 타인을 리팩터링하여 포크 작동 방식을 활용하는 것이 었습니다. 나는 2^i.트릭을 좋아한다 . 나는 지금 포크의 왼쪽 타인에서 일하려고합니다.
Cole

@cole 감사합니다, 나는 포크를 더 잘 사용하는 법을 배워야합니다. 분명히 포크 2 * i. 뚜껑이있는 후크 [: + : i보다 낫습니다.
Galen Ivanov

1
오른쪽 타인에 파렌을 떨어 뜨릴 수도 있습니다 (10|2*i.).->10|2*i.
cole








0

자바 스크립트, 45 바이트

1 색인 :

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

0 인덱스 :

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



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