ลำดับแหวนโอลิมปิก


18

ท้าทาย:

รับจำนวนเต็มดัชนีnออกรายการn'th ในลำดับนี้หรือส่งออกลำดับถึงและรวมถึงดัชนี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'รี th / ขวาสุดแหวนโอลิมปิกของทั้งสองสาย

หมายเลขแรกในลำดับจะถูกคำนวณดังนี้:

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=125

ตัวเลขที่สองในลำดับจะถูกคำนวณดังนี้:

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=225

ตัวเลขที่สามในลำดับจะถูกคำนวณดังนี้:

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=37

เป็นต้น

กฏท้าทาย:

  • เมื่อคุณส่งออกn'รายการ TH ในลำดับที่คุณจะได้รับอนุญาตให้ใช้การป้อนข้อมูลที่เป็น 0 การจัดทำดัชนีแทน 1 การจัดทำดัชนี แต่เก็บไว้ในใจว่าการคำนวณของn*6 - 1แล้วจะกลายเป็นหรือ(n+1)*6 - 1(n+1)*5 + n
  • ตัวเลขเดี่ยวที่มีตัวเลขมากกว่าหนึ่งหลักสามารถแยกกันได้ที่ท้ายบรรทัดแรกเมื่อเรามีความยาวn*5 + n-1จนเป็นไปได้ว่าตัวเลขที่มี 2 หรือมากกว่านั้นเป็นส่วนที่ต่อท้ายของบรรทัดที่ 1 และบางส่วน ส่วนนำของบรรทัดที่ 2

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

กรณีทดสอบ:

นี่คือ paste-bin ของกรณีทดสอบ 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
Kevin Cruijssen

ไม่n * 5 + n - 1เท่ากับn * 6 - 1หรือ
Brian H.

@BrianH คุณพูดถูกจริงๆ สังเกตเห็นว่าเช่นกันหลังจากที่เห็นคำตอบของจอประสาทตามาร์ติน ฉันได้แก้ไขคำอธิบายการท้าทายเพื่อใช้สูตรที่สั้นกว่านี้
Kevin Cruijssen

คำตอบ:


4

Husk , 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 แปลกเพราะฉันเพิ่งจะเพิ่ม อย่างไรก็ตามฉันไม่แนะนำให้ยอมรับคำตอบอยู่ดี ;-)
Erik the Outgolfer

@KevinCruijssen ฉันได้เพิ่มคำอธิบายแบบเร่งด่วนถึงแม้ว่ามันจะไม่ค่อยดีนัก ...
Erik the Outgolfer

ดีพอสำหรับฉันได้รับการยอมรับ และโดยส่วนตัวฉันชอบยอมรับการท้าทายแม้ว่ามันไม่จำเป็นจริงๆ หากมีคนโพสต์คำตอบสั้นกว่าคุณแน่นอนฉันจะเปลี่ยนอีกครั้ง
Kevin Cruijssen

@KevinCruijssen จุดประสงค์หลักคือไม่ใช่สิ่งที่เกิดขึ้นหลังจากมีการโพสต์คำตอบสั้น ๆ แต่ใครบางคนอาจถูกกีดกันให้โพสต์คำตอบอื่น ๆ ได้เลย อย่างไรก็ตามการโทรของคุณ
Erik the Outgolfer

5

เรติน่า , 70 68 62 ไบต์

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

,2,9`.
*
_

ลองออนไลน์!

คำอธิบาย

ลองเรียกอินพุตnและเราจะใช้3เป็นตัวอย่าง

.+
10**

10**สั้นสำหรับ10*$&*_ซึ่งแทนที่การป้อนข้อมูลด้วยสตริงของ10Nขีด

.
$.>`

ตอนนี้เราแทนที่ขีดล่างแต่ละอันด้วยความยาวของสตริงจนถึงและรวมถึงขีดล่างนั้น ดังนั้นนี่จะส่งผลให้มีจำนวนตั้งแต่1ถึง10nทั้งหมดที่ต่อกัน ( 10nนั้นเพียงพอที่จะเติมสองบรรทัดตามความยาวที่ต้องการ)

~(`.+
6*$+*

Eval! ขั้นตอนนี้และขั้นตอนต่อไปจะสร้างซอร์สโค้ดของโปรแกรมอื่นซึ่งจะทำงานกับสตริงของจำนวนเต็มที่ต่อกัน

ในการสร้างโปรแกรมนั้นขั้นตอนนี้จะแทนที่จำนวนเต็มด้วยสตริงที่มีเครื่องหมายขีดล่าง6n ( $+อ้างอิงถึงอินพุตดั้งเดิมของโปรแกรม)

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

จากนั้นแทนที่ขีดล่างเหล่านั้นด้วยL`.{…}ซึ่งคือ6n-1 (ความยาวของบรรทัดที่เรากำลังดูอยู่) ดังนั้นเราจึงสร้าง regex ซึ่ง quantifier นั้นขึ้นอยู่กับอินพุตต้นฉบับ

เมื่อโปรแกรมนี้ถูก eval'ed มันจะจับคู่กับความยาว6n-1ซึ่งจะมีอย่างน้อยสองตัว สำหรับอินพุตตัวอย่างของ3เราเราลงท้ายด้วย:

12345678910111213
14151617181920212
22324252627282930

ตอนนี้เราแค่ต้องแยกตัวเลขที่เกี่ยวข้อง

%,-6`.

อันดับแรกในแต่ละบรรทัด ( %) เราลบทั้งหมดยกเว้นตัวเลขห้าหลักสุดท้าย ( ,-6) นั่นทำให้เรา

11213
20212
82930

สุดท้าย:

,2,9`.
*

เราขยายทุกหลักอื่น ๆ ( 2) ในสิบแรก ( 9นี่คือ 0 ตาม) ในเอก สิ่งเหล่านั้นเกิดขึ้นเป็นตำแหน่งในตำแหน่งของ Olympic Rings

_

และเรานับจำนวนผลลัพธ์ที่ขีดล่างเพื่อหาผลรวมและแปลงผลลัพธ์เป็นทศนิยม


59 bytesค่อนข้างยุ่งเล็กน้อย
H.PWiz

@ H.PWiz 1ดูเหมือนจะไม่ทำงานสำหรับการป้อนข้อมูล
Martin Ender

โอ้ใช่ว่าจะเป็น-7
H.PWiz


3

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

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: แน่นอน ฉันตั้งใจจะลองเล่นกอล์ฟเพิ่มอีกนิดหน่อยก่อนที่จะเพิ่มคำอธิบาย แต่ฉันไม่ได้มีเวลาเลยจริงๆที่นี่ :)
Emigna

ขอบคุณ! และฉันรู้ว่าคนส่วนใหญ่ชอบเล่นกอล์ฟมากที่สุดก่อนที่จะเพิ่มคำอธิบาย แต่เนื่องจากไม่มีการปรับปรุงคำตอบของคุณใน 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

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.