올림픽 반지 순서


18

도전:

인덱스 정수 감안할 때 n, 중 출력 n순서 최대 인덱스를 포함하여이 순서의 '일 항목 또는 출력 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'순서 번째 항목이, 대신 1 인덱스의 0 인덱스로 입력을 할 수 있지만,의 계산이 있음을 염두에 두어야하는 n*6 - 1다음이 될 것 (n+1)*6 - 1(n+1)*5 + n.
  • 길이에 도달하면 첫 번째 줄의 끝에서 두 자리 이상의 단일 숫자를 나눌 수 있으므로 n*5 + n-1두 개 이상의 숫자가있는 숫자는 부분적으로 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-11*5 + 1-1차례이다, 5 - 0 = 5.
Kevin Cruijssen

아니다 n * 5 + n - 1동일 n * 6 - 1?
Brian H.

@BrianH. 당신 말이 맞아요. Martin의 Retina의 답변을 본 후에도 주목했습니다. 이 짧은 공식을 사용하기 위해 챌린지 설명을 편집했습니다.
Kevin Cruijssen

답변:


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는 방금 추가하려고했기 때문입니다. 그러나 어쨌든 대답을 수락하지 않는 것이 좋습니다. ;-)
Outgolfer Erik

@KevinCruijssen 나는 그것이 좋은 atm이 아니지만 서두르는 설명을 추가했습니다 ...
Erik the Outgolfer

나를 위해 충분합니다. 그리고 실제로는 실제로 필요하지는 않지만 도전을 받아들이기를 선호합니다. 누군가가 당신보다 짧은 답변을 게시하는 경우 물론 다시 변경합니다.
케빈 크루이 ssen

@KevinCruijssen 이에 대한 주요 목표는 짧은 답변을 게시 한 후에는 발생하지 않지만 다른 답변을 게시하지 않는 것이 좋습니다. 어쨌든, 당신의 전화.
Outgolfer Erik

5

망막 , 70 68 62 바이트

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

,2,9`.
*
_

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

설명

입력 n을 호출 3하면 예제로 사용하겠습니다 .

.+
10**

10**짧은에 대한 10*$&*_어떤의 문자열 입력을 대체 10N의 밑줄.

.
$.>`

이제 각 밑줄을 밑줄을 포함하여 문자열의 길이로 바꿉니다. 따라서 이것은 단지 1 에서 10n 까지의 숫자가 모두 함께 연결됩니다 ( 10n 은 항상 필요한 길이의 두 줄을 채우기에 충분합니다).

~(`.+
6*$+*

평가! 이 단계와 다음 단계는 다른 프로그램의 소스 코드를 생성 한 다음 연결된 정수 문자열에 대해 실행됩니다.

해당 프로그램을 생성하기 위해이 단계는 먼저 정수를 6n 밑줄로 바꿉니다 ( $+프로그램의 원래 입력 참조).

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

로 그 다음 그 밑줄을 대체 L`.{…}어디에 이다 6N-1 (선 우리가보고있는 길이). 그래서 우리는 정규 표현식을 생성했습니다. 정규 표현식은 수량자가 원래 입력에 따라 다릅니다.

이 프로그램이 평가되면 길이 6n-1의 청크와 일치 하며 그 중 두 개 이상이 있습니다. 예제 입력의 경우 다음 3과 같이 끝납니다.

12345678910111213
14151617181920212
22324252627282930

이제 관련 숫자를 추출하면됩니다.

%,-6`.

먼저, 각 줄 ( %)에서 마지막 5 자리 ( ,-6)를 제외한 모든 숫자를 제거합니다 . 그게 우리에게

11213
20212
82930

드디어:

,2,9`.
*

단항 2의 처음 10 자리 ( 9, 이것은 0부터 시작 )의 다른 모든 숫자 ( )를 확장합니다 . 이들은 올림픽 링 포지션에있는 사람들입니다.

_

그리고 밑줄의 수를 세어 합산하고 결과를 10 진수로 변환합니다.


59 bytes 조금 지저분하다
H.PWiz

@ H.PWiz 입력에 작동하지 않는 것 같습니다 1.
Martin Ender

오, 그래요-7
H.PWiz


3

Japt , 33 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

05AB1E , 22 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 시간 이상 답변이 업데이트되지 않았기 때문에 설명을 요청한다고 생각했습니다. :) 좋은 대답, btw!
Kevin Cruijssen

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

설명을 추가 하시겠습니까?
Kevin Cruijssen

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