ลำดับอัศวินติดอยู่


10

บทนำ

แรงบันดาลใจจากวิดีโอล่าสุดมากติดอัศวิน - Numberphile , ฉันมากับความท้าทาย

ลำดับอัศวินขังอยู่เป็นลำดับจำนวนเต็ม จำกัด ของระยะเวลาในปี 2016 ตั้งแต่วันที่ 1 และมีกฎการก่อสร้างต่อไปนี้:

  1. เขียนเกลียวจำนวนในลักษณะดังต่อไปนี้:
17 16 15 14 13 ...
18  5  4  3 12 ...
19  6  1  2 11 ...
20  7  8  9 10 ...
21 22 23 24 25 ...
  1. วางอัศวินในวันที่ 1
  2. ย้ายอัศวินไปยังกริดด้วยหมายเลขที่เล็กที่สุดที่สามารถไปได้ซึ่งไม่เคยมีการเยี่ยมชมมาก่อนตามกฎของหมากรุก (เช่น 2 หน่วยในแนวตั้งและ 1 หน่วยในแนวนอนหรือในทางกลับกัน)
  3. ทำซ้ำจนกว่าอัศวินจะติด

นี่คือสามขั้นตอนแรก:

ขั้นตอนที่ 1

 17  [16]  15  [14]  13 
[18]   5    4    3  [12]
 19    6  < 1>   2   11 
[20]   7    8    9  [10]
 21  [22]  23  [24]  25 

การเคลื่อนไหวที่เป็นไปได้คือ 10, 12, 14, 16, 18, 20, 22, 24 ซึ่งน้อยที่สุดคือ 10 ดังนั้นเทอมที่สองคือ 10

ขั้นตอนที่ 2

  4  [ 3]  12  [29]  54
( 1)   2   11   28  [53] 
  8    9  <10>  27   52 
[23]  24   25   26  [51] 
 46  [47]  48  [49]  50 

การเคลื่อนไหวที่เป็นไปได้คือ1 , 3, 23, 29, 47, 49, 51, 53, ซึ่งน้อยที่สุดคือ 3 ดังนั้นเทอมที่สามคือ 3

ขั้นตอนที่ 3

 35  [34]  33  [32]  31 
[16]  15   14   13  [30] 
  5    4  < 3>  12   29 
[ 6] ( 1)   2   11  [28] 
  7  [ 8]   9  (10)  27 

การเคลื่อนไหวที่เป็นไปได้คือ 6, 8, 10 , 16, 28, 30, 32, 34, ซึ่งน้อยที่สุดคือ 6 ดังนั้นเทอมที่สี่คือ 6

ลำดับดาวด้วย:

1 10 3 6 9 4 7 2 5 8 11 14 ...

และจบลงด้วย

... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่สั้นที่สุดโดยรับจำนวนเต็มในช่วง[1, 2016](หรือ[0, 2015]ถ้าใช้ดัชนี 0) เป็นอินพุตให้ป้อนตัวเลขที่ดัชนีนั้นในลำดับอัศวินติดอยู่ คุณสามารถเลือกที่จะจัดทำดัชนีลำดับด้วยดัชนี 0 หรือดัชนี 1 แต่คุณต้องระบุรูปแบบการจัดทำดัชนีที่คุณใช้

กรณีทดสอบ (1 ดัชนี)

n    | s(n)
-----+-----
   1 |    1
   2 |   10
   3 |    3
   6 |    4
  11 |   11
  21 |   23
  51 |   95
 101 |   65
 201 |  235
 501 |  761
1001 | 1069
2001 | 1925
2016 | 2084

สำหรับผลลัพธ์ที่เป็นไปได้ทั้งหมดโปรดดูที่หน้านี้

เกณฑ์การชนะ

รหัสที่สั้นที่สุดของแต่ละภาษาชนะ มีข้อ จำกัด เกี่ยวกับช่องโหว่มาตรฐาน



1
@Annauld คำถามนั้นได้รับแรงบันดาลใจจากของฉัน (ตามที่ระบุ) เท่านั้นที่จะเข้าหลักได้เร็วขึ้น นอกจากนี้ลำดับนี้มี จำกัด ดังนั้นบางแง่มุมในการเล่นกอล์ฟอาจแตกต่างกันในแง่นั้น
Shieru Asakoto

1
ลำดับอื่นยังมี จำกัด หยุดที่จตุ12851850258
โจคิง

2
@ Joning ดี แต่เนื่องจากหยุดค่อนข้างเร็วฉันต้องการดูคำตอบใน esolangs ที่มีช่วงจำนวนเต็มน้อยกว่า (มี esolangs ใดที่ใช้จำนวนเต็ม 16 บิตหรือไม่)
Shieru Asakoto

1
ถ้าคำถามนี้ถูกโพสต์ในแซนด์บ็อกซ์นั่นไม่ได้หมายความว่าคนอื่นจะเป็นคนถามใช่มั้ย
Luis felipe De jesus Munoz

คำตอบ:


4

JavaScript (ES7),  182  181 ไบต์

f=(n,[x,y]=[2,1],a=[...Array(4e3)].map((_,n)=>[1,-1].map(s=>(i&1?-s:s)*(i+s*n-(n>0?n:-n)>>1),i=n**.5|0,n-=i*++i)))=>n--?f(n,a.find(([X,Y],j)=>(i=j,(x-X)*(y-Y))**2==4),a,a[i]=[]):i+1

ลองออนไลน์!

อย่างไร?

คำตอบของฉันที่แก้ไขเล็กน้อยในเส้นทางแห่ง Wildebeestนั้นสั้นกว่า (และเร็วกว่า) แน่นอนกว่านั้น แต่ฉันต้องการลองวิธีอื่น บังเอิญผมคิดว่ามันอาจจะง่ายต่อการใช้วิธีการนี้ในบาง esolangs

ขั้นตอนวิธีการ:

  1. 3199
  2. (X,Y)

    ((x-X)×(Y-Y))2=4

    (x,Y)

    |x-X|=1|Y-Y|=2|x-X|=2|Y-Y|=1

  3. (x,Y)=(X,Y)

  4. เรารีสตาร์ทในขั้นตอนที่ 2 หรือส่งกลับดัชนีล่าสุดที่พบถ้าเราทำเสร็จแล้ว


Node.js , 155 ไบต์

n=>(g=(x,y)=>n--?g(Buffer('QHUbcdWJ').map(m=c=>g[i=4*((x+=c%6-2)*x>(y+=c%7-2)*y?x:y)**2,i-=(x>y||-1)*(i**.5+x+y)]|i>m||(H=x,V=y,m=i))|H,V,g[m]=1):m+1)(1,2)

ลองออนไลน์!


3

05AB1E , 53 ไบต์

Xˆ0UF2D(Ÿ0KãʒÄ1¢}εX+}Dε·nàDtyÆ+yO·<.±*->}D¯KßDˆkèU}¯θ

32θn+1

ลองใช้แบบออนไลน์หรือตรวจสอบกรณีทดสอบเพิ่มเติม (หมดเวลาสำหรับกรณีทดสอบที่ใหญ่ที่สุด)

คำอธิบาย:

ดูคำอธิบายในการเชื่อมโยงของฉันเส้นทางของครืนคำตอบ ชิ้นส่วนที่ดัดแปลงเท่านั้นคือ:

2D    # Get a list in the range [-2,2]: [-2,-1,0,1,2]

และตามมา:

θ       # Only leave the last item of the list

แก้ไข: พอร์ตของวิธีการ@Arnauldใน JavaScript ของเขา (ES7) คำตอบคือ (ปัจจุบัน):

05AB1E , 57 56 ไบต์

0D‚DˆUF64D(ŸãΣ·nàDtyÆ+yO·<.±*->}©ʒX-Pn4Q}¯¡˜2£DˆU}®J¯Jk>θ

ลองใช้แบบออนไลน์หรือตรวจสอบกรณีทดสอบเพิ่มเติม (หมดเวลาสำหรับกรณีทดสอบที่ใหญ่ที่สุด)

คำอธิบาย:

‚%                # Create a pair of zeros: [0,0]
                  # (by pairing the (implicit) input with itself,
                  #  and then using modulo (implicit) input)
  DˆU             # Set both variable `X` to this, and add it to the global_array
F                 # Loop the (implicit) input amount of times:
 64D            #  Create a list in the range [-64,64]
      ã           #  Create each possible pair of `x,y`-coordinates
       Σ·nàDtyÆ+yO·<.±*->}
                  #  Sort this list in a spiral
        ©         #  Save it in the register (without popping)
 ʒ      }         #  Filter the list of coordinates by:
  X-              #   Subtract the coordinate of variable `X`
    P             #   Take the product
     n            #   Take the square
      4Q          #   Check if its equal to 4
                  # Since 05AB1E cannot remove inner lists, we use a workaround:
         ¯¡       # Split this list on each coordinate in the global_array
           ˜      # Flatten the entire list
            2£    # Only leave the first two integers as `x,y`-coordinate
                  # (if 05AB1E could remove inner lists, this would've been `¯Kн` instead)
              DˆU # Replace variable `X` with this, and add it to the global_array
                # After the loop: push all coordinates sorted in a spiral from the register
  J               # Join each coordinate together to a string
   ¯J             # Push the global_array, and also join them together to a string
                  # (if 05AB1E could index inner lists, both `J` could have been removed)
     k            # Get the index of each item of the global_array in the spiral list
      >           # Increase the 0-indexed index by 1 to make it 1-based
       θ          # And only leave the last one (which is output implicitly)

Σ·nàDtyÆ+yO·<.±*->}x,Y


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.