オリンピックリングシーケンス


18

チャレンジ:

インデックス整数を指定するとnnこのシーケンスの 'th番目のアイテムを出力するか、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から始まります。長さの2行に
数字1を入力xしますn*6 - 1。ここxで、現在の反復と使用する数字の長さに依存し、nそれら2行の'右/右端のオリンピックリングの数字を合計します。

シーケンスの最初の数は次のように計算されます。

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

シーケンスの2番目の数は、次のように計算されます。

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

シーケンスの3番目の数は、次のように計算されます。

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シーケンスの '番目の項目を出力するとき、入力は1インデックスではなく0インデックスとして許可されますが、の計算はor にn*6 - 1なることに注意してください。(n+1)*6 - 1(n+1)*5 + n
  • length n*5 + n-1に達すると、1桁以上の単一の数字を最初の行の最後で分割できるため、2桁以上の数字の一部が1行目の末尾部分であり、一部が行2の先頭部分。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを備えた関数/メソッドを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース:

テストケース1〜1,000の貼り付けビンは次のとおりです。お好きなものを自由に選択してください。

いくつかの追加のより高いテストケース:

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.

@BrianH。あなたは正しい、それは確かです。マーティンの網膜の答えを見た後も同様に気づいた。この短い式を使用するようにチャレンジの説明を編集しました。
ケビンクルーッセン

回答:


4

、16バイト

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

オンラインでお試しください!

H.PWizのおかげで-3バイト。

(急ぎ)説明:

ΣĊ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、追加するつもりだったから。しかし、とにかく答えを受け入れることはお勧めしません。;-)
アウトゴルファーのエリック

それは非常に良い気圧ではありませんが、@KevinCruijssen私は...、急いでアップの説明を追加しました
エリックOutgolfer

私にとっては十分で、受け入れられました。そして個人的には、実際にそれは本当に必要ではありませんが、挑戦を受け入れることを好みます。誰かがあなたより短い回答を投稿した場合、もちろん再度変更します。
ケビンクルーッセン

@KevinCruijssenこれに対する主な目的は、短い回答が投稿された後に起こることではありませんが、誰かが別の回答を投稿することを思いとどまるかもしれません。とにかく、あなたの電話。
エリックアウトゴルファー

5

網膜70 68 62バイト

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

,2,9`.
*
_

オンラインでお試しください!

説明

入力nを呼び出して3、例として使用します。

.+
10**

10**以下のために短い10*$&*_の文字列で入力を置き換えた10Nのアンダースコア。

.
$.>`

ここで、各アンダースコアを、そのアンダースコアまでの文字列の長さに置き換えます。数この結果だけだから110Nはすべて一緒に連結(10nが常に必要な長さの2本のラインを埋めるのに十分です)。

~(`.+
6*$+*

評価!この段階と次の段階では、別のプログラムのソースコードが生成され、連結された整数の文字列に対して実行されます。

そのプログラムを生成するために、このステージは最初に整数を6nアンダースコアの文字列に置き換えます($+プログラムの元の入力を参照します)。

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

次に、それらの下線をL`.{…}に置き換えます。ここで、6n-1(探している行の長さ)です。したがって、量指定子が元の入力に依存する正規表現を生成しました。

このプログラムが評価されると、長さが6n-1のチャンクに一致しますが、そのうちの少なくとも2つが存在します。入力例3では、次のようになります。

12345678910111213
14151617181920212
22324252627282930

ここで、関連する数字を抽出するだけです。

%,-6`.

まず、各行(%)で、最後の5桁以外のすべて()を削除します,-6。それは私たちに与えます

11213
20212
82930

最後に:

,2,9`.
*

単項2の最初の10 桁(9、これは0から始まる)で1 桁おきに()展開します。それらはたまたまオリンピックリングのポジションにいるものです。

_

そして、結果のアンダースコアの数をカウントし、それらを合計して結果を10進数に変換します。


59バイトビット厄介かかわら
H.PWiz

@ H.PWizは入力に対して機能しないようです1
マーティンエンダー

そうそう、それは次のようになります-7
H.PWiz


3

Japt33 32 30 29 28 27バイト

ああ、これはきれいではありません!

1番目のインデックスが付いたn番目の用語を出力します。

*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

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:もちろん。説明を加える前にもう少しゴルフをしようと思っていましたが、時間がなかったので、ここにあります:)
エミグナ

ありがとう!そして、ほとんどの人は説明を追加する前にできる限りゴルフを好むことを知っていますが、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

説明を追加してもいいですか?
ケビンCruijssen

確か@KevinCruijssenが、私は通常、そうでない場合、私は、他の課題に答える他のものをやったり寝に焦点を当て、リクエストに応じてそれを行う:P
Outgolferエリック




1

Java 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.