偶数的循环序列,介于


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索引。

使用标准输入和输出方法时,您可以在任何编程语言中竞争。禁止出现标准漏洞。这是,因此每种语言中最短的代码将获胜。


这个挑战已经沙盒化了
Xcoder先生17年

Answers:



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吗?
Xcoder先生17年

4
这只是一个助记符。H减半,所以unhalveÆA反余弦值,所以ÆẠunarccosine
丹尼斯,

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.

我们也可以这样做...ΘCN...,因为Θ“ prepend default element”确实存在,它为整数列表添加了零,为列表列表添加了空列表。




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(TRAD itional ˚F unctio Ñ)带一个参数k和返回第一k序列的项目。

感谢@GalenIvanov指出函数中的错误。感谢@Adám提供了3个字节。

怎么运行的:

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.

下面是一个Dfnd I整流器˚F unctio Ñ)和隐性功能也解决了挑战,既麻烦由@亚当提供。

  • Dfn:{⍵⍴1,∊1,⍨¨j⍴¨(+\¯1+j←⍳⍵)⌽¨⊂0,2×⍳4} 在线试用!
  • 默契:⊢⍴1,∘∊1,⍨¨⍳⍴¨(⊂0,2×⍳4)⌽⍨¨(+\¯1+⍳) 在线尝试!

我对默认隐性武器的解释很感兴趣。谢谢!
Galen Ivanov

@GalenIvanov今天晚些时候再添加一个。
J.Sallé17年

我注意到这3个函数产生错误的答案-子序列始终从0开始于1之后-它们应该从前一个子序列的最后一个偶数位继续。
Galen Ivanov

@GalenIvanov你是对的。我将看看是否可以修复它,并在今天添加说明。
J.Sallé17年

1

JavaScript(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 给定i和j(并增加j),给出正确的偶数,等效于((j + Tr(i))%5)* 2,其中Tr(x)是第x个三角数(即偶数当前偶数运行之前已打印的数字;



1

Java 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

J46 42 40字节

-6个字节,感谢科尔

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

输出此序列的前N个项。

怎么运行的:

10|[:+:i. -生成长度为N的列表0 2 4 6 8 0 2 4 ...它只是从10开始的整数列表的double项的mod 10。

[:;[:#:&.>2^i. -生成位掩码以剪切上面的列表。

(1表示开始):1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 ... ...将2取为连续非负整数的幂,将其转换为二进制,然后将其展平列表,并且只接受前N个项目,因此两个列表的长度相同。

;@(1,&.><;.1) -根据1和0的映射将偶数位列表拆分(剪切)成子列表,将子列表附加到1,最后展平结果列表

]{. -仅采用前N个项目,由于添加了1,因此摆脱了列表中的其他数字。

在线尝试!


1
42个字节:{.({.[:;[:#:&.>2^i.);@(1,&.><;.1)(10|2*i.)。我所做的更改是使用钩子并重构叉子的正确齿,以利用叉子的工作方式。我喜欢这个2^i.把戏。我正在尝试在叉子的左齿上工作。
科尔

@cole谢谢,我需要学习更好地使用fork。显然是前叉2 * i。比带帽钩[:+:i。
加伦·伊凡诺夫

1
您也可以将括号放在正确的齿上(10|2*i.)->10|2*i.
cole

1

Common Lisp,74个字节

(do((b 1(1+ b))(k -2))(())(print 1)(dotimes(m b)(print(mod(incf k 2)10))))

在线尝试!

无限期打印序列。








0

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



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.