奥运五环序列


18

挑战:

给定一个索引整数n,或者输出n此序列中的'th项,或者输出直到index并包括index的序列n

25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19

这个序列如何运作?

注意:在此说明中,索引n是1索引的。
把数字1通过x上长度的两条线n*6 - 1,其中x依赖于当前迭代和所使用的号码的长度,然后求和的数字n“日/最右边的奥林匹克这两条线的环。

序列中的第一个数字计算如下:

The length of the lines are 5 (because 1*6 - 1 = 5):
12345
67891(0)

Then leave the digits in an Olympic Rings pattern:
1 3 5
 7 9

And sum them:
1+3+5+7+9 = 25

因此n=1结果25

序列中的第二个数字计算如下:

The length of the lines are 11 (because 2*6 - 1 = 11):
12345678910
11121314151(6)

Then leave the digits in the second/right-most Olympic Rings pattern:
      7 9 0 
       4 5

And sum them:
7+9+0+4+5 = 25

因此n=2结果25

序列中的第三个数字计算如下:

The length of the lines are 17 (because 3*6 - 1 = 17):
12345678910111213
14151617181920212(2)

Then leave the digits in the third/right-most Olympic Rings pattern:
            1 2 3
             0 1

And sum them:
1+2+3+0+1 = 7

因此n=3结果7

等等

挑战规则:

  • 当您输出n序列中的'th项时,您可以将输入作为0索引而不是1索引,但是请记住,的计算n*6 - 1将变为(n+1)*6 - 1(n+1)*5 + n
  • 当我们达到长度时n*5 + n-1,可以在第一行的末尾拆分一个以上位数的单个数字,因此,具有2个或更多位数的数字可能部分地位于行1的尾部,而部分地是第2行的前导部分

通用规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于您的答案,因此您可以使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。
  • 默认漏洞是禁止的。
  • 如果可能的话,请添加一个带有测试代码的链接。
  • 另外,如有必要,请添加说明。

测试用例:

这是1-1000个测试用例的粘贴框,因此可以随意选择其中的一个。

其他一些更高的测试用例:

1010:   24
1011:   24
2500:   19
5000:   23
7500:   8
10000:  8
100000: 25

1*5 + 1-1 = 5?不是1*5 + 5 - 1 = 9吗?
NieDzejkob

@NieDzejkob不,n=1所以n*5 + n-1变成1*5 + 1-1,它依次是5 - 0 = 5
凯文·克鲁伊森

n * 5 + n - 1等于n * 6 - 1
布赖恩H.18年

@BrianH。您说得对,的确如此。在看到马丁的视网膜答案后也注意到这一点。我已经编辑了挑战说明以使用这个较短的公式。
凯文·克鲁伊森

Answers:


4

外壳,16字节

ΣĊ2ṁ↑_5↑2CṁdN←*6

在线尝试!

-3个字节,感谢H.PWiz

(冲)说明:

ΣĊ2ṁ↑_5↑2CṁdN←*6⁰
Σ                 Sum
 Ċ2                Drop every second element
   ṁ↑_5             Map "take last 5 elements", then concatenate
       ↑2            Take first 2 elements
         C            Cut x into sublists of length y
          ṁdN          [1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,...] (x)
             ←         Decrement (y)
              *6        Multiply with 6
                ⁰        First argument

@KevinCruijssen Weird,因为我只想添加一个。但是,我不建议您接受答案。;-)
暴民埃里克(Erik the Outgolfer)

@KevinCruijssen我添加了一个详尽的解释,尽管它不是很好的atm ...
Outgolfer的Erik,18年

对我来说足够好了,被接受了。我个人更愿意接受挑战,即使确实没有必要。如果有人偶然发布了比您短的答案,我当然会再次更改它。
凯文·克鲁伊森

@KevinCruijssen反对的主要目的不是发布简短答案后发生的事情,但是可能根本不鼓励有人发布另一个答案。无论如何,您的电话。
Erik the Outgolfer

5

视网膜70 68 62字节

.+
10**
.
$.>`
~(`.+
6*$+*
)`.(.+)
L`.{$.1}
%,-6`.

,2,9`.
*
_

在线尝试!

说明

让我们将输入n3称为示例。

.+
10**

10**缩写10*$&*_,用10n下划线字符串替换输入。

.
$.>`

现在,我们将每个下划线替换为字符串的长度,直到并包括下划线。因此,这只会导致从110n的数字全部串联在一起(10n总是足以填满所需长度的两行)。

~(`.+
6*$+*

评估!此阶段和下一阶段将生成另一个程序的源代码,然后针对该串联的整数字符串运行该程序。

要生成该程序,此阶段首先用6n下划线字符串替换整数($+指程序的原始输入)。

)`.(.+)
L`.{$.1}

然后将这些下划线替换为L`.{…},其中6n-1(我们正在查看的行的长度)。因此,我们生成了一个正则表达式,其量词取决于原始输入。

评估此程序后,它将匹配长度为6n-1的块,其中至少会有两个。对于示例输入3,我们最终得到:

12345678910111213
14151617181920212
22324252627282930

现在我们只需要提取相关的数字。

%,-6`.

首先,在每行(%)上,我们删除除最后五位数字(,-6)以外的所有数字。那给了我们

11213
20212
82930

最后:

,2,9`.
*

我们在一元2前十个数字中扩展其他数字()(9基于0的数字)。这些碰巧是那些在奥运五环上的人。

_

然后我们计算下划线的数量,将它们加起来并将结果转换为十进制。


59字节虽然有点混乱
H.PWiz

@ H.PWiz似乎对输入无效1
马丁·恩德

哦,是的,这将是-7
H.PWiz


3

Japt33 32 30 29 28 27字节

哦,这不漂亮!

输出第n个1索引的项。

*6É
*2 õ ¬òU mt5n)¬¬ë2 ¯5 x

尝试一下


说明

                         :Implicit input of integer U           :e.g., 3
*6É    
*6                       :Input times 6                         :18
  É                      :Subtract 1                            :17
   \n                    :Assign the above to variable U

*2 õ ¬òU mt5n)¬¬ë2 ¯5 x
*2 õ                     :[1,U*2]                               :[1,2,3,...,33,34]
     ¬                   :Join to a string                      :"123...3334"
      òU                 :Partitions of length U                :["123...13","1415...212","22324...30","31323334"]
         m               :Map
          t5n)           :  Get last 5 characters               :["11213","20212","82930","23334"]
              ¬          :Join to a string                      :"11213202128293023334"
               ¬         :Split to an array                     :["1","1","2","1","3","2","0","2","1","2","8","2","9","3","0"],["2","3","3","3","4"]]
                ë2       :Get every second element              :["1","2","3","0","1","8","9","0","3","3"]
                   ¯5    :Get first 5 elements                  :["1","2","3","0","1"]
                      x  :Reduce by addition                    :7
                         :Implicit output of result


2

Python 3中,129个 123字节

p=lambda r,x='',i=1:sum(map(int,str(x[6*r-2]+x[6*r-4]+x[6*r-6]+x[12*r-4]+x[12*r-6])))if len(x)>12*r-2else p(r,x+str(i),i+1)

在线试用

虽然这几乎是一团糟,但可以。


2

05AB1E22 21 20字节

6*<xLJsô2£íε5£}SāÉÏO

在线尝试!

说明

6*<                    # push input*6-1
   xL                  # leave it on the stack while pushing [1 ... 12*input-2]
     J                 # join the numbers to a single string
      sô               # split the string into pieces of size input*6-1
        2£             # take the first 2 such pieces
          í            # reverse each string
           ε5£}        # take the first 5 chars of each
               S       # split to a single list of digits
                ā      # push range [1 ... len(list)]
                 ÉÏ    # keep only the numbers in the list of digits which are odd in this
                   O   # sum

替代21字节方法

6*<©·LJƵYS24S®-ì®-(èO

@KevinCruijssen:好的。在添加说明之前,我打算尝试打些高尔夫球,但是我还没来得及说出来,所以这里是:)
Emigna

谢谢!而且我知道大多数人都喜欢在添加解释之前尽可能先打高尔夫球,但是由于15个小时以来您的答案没有更新,所以我认为我只是想解释一下。:)好答案,顺便说一句!
凯文·克鲁伊森

2

果冻,19字节

×6’µḤD€Ẏsḣ2ṫ€-4Ẏm2S

在线尝试!

×6’µḤD€Ẏsḣ2ṫ€-4Ẏm2S Arguments: n (1-indexed)
×6                  Multiply by 6
  ’                 Decrement
   µ                Call that value N and start a new chain with argument N
    Ḥ               Double
      €             Create an inclusive range from 1 to 2N and call this link on it
     D               Get the decimal digits of each integer in the range
       Ẏ            Concatenate the lists of digits
        s           Split into length-N chunks
         ḣ2         Get the first two elements
            €-4     Map this link over the length-2 list with right argument -4
           ṫ         Get elements from this index onwards (supports negative indices too)
               Ẏ    Concatenate the two length-5 lists into one length-10 list
                m2  Take every second element starting from the first
                  S Sum

您介意添加解释吗?
凯文·克鲁伊森

@KevinCruijssen当然可以,但我通常会应要求提供,否则我会专注于回答其他挑战,做其他事情或睡觉:P
暴民埃里克(Erik the Outgolfer)




1

爪哇8,138个 111 109字节

n->{String s="";int r=0,i=1;for(n=n*6-1;i<3*n;s+=i++);for(i=5;i>0;r+=s.charAt(n+n*(i%2^1)-i--)-48);return r;}

我当然必须回答自己的挑战。:)
我在挑战说明中丢失了用于创建测试结果的初始代码,所以我才重新开始。

说明:

在线尝试。

n->{                               // Method with integer as both parameter and return-type
  String s="";                     //  Temp String
  int r=0,                         //  Result-sum, starting at 0
      i=1;                         //  Index integer, starting at 1
  for(n=n*6-1;                     //  Replace the input with `n*6-1`
      i<3*n;                       //  Loop from 1 up to 3*n (exclusive)
      s+=i++);                     //   And append the temp-String with `i`
  for(i=5;i>0;                     //  Loop from 5 down to 0 (exclusive)
    r+=                            //   Add to the result-sum:
       s.charAt(               )-48);
                                   //    The character at index X, converted to a number,
                n+n*(i%2^1)-i--    //    with X being `n-i` (i=odd) or `n+n-i` (i=even)
  return r;}                       //  Return the result-sum
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.