ลำดับการเรียงสับเปลี่ยนเกลียว


17

เราสามารถสะสมจำนวนธรรมชาติในเกลียวเป็นรูปสี่เหลี่ยมผืนผ้า:

 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

แต่ตอนนี้เรามีพวกมันอยู่บนตะแกรงสี่เหลี่ยมเราสามารถคลายเกลียวในลำดับที่แตกต่างกันเช่นไปตามเข็มนาฬิกาเริ่มทิศเหนือ:

 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, 4, 3, 2, 9, 8, 7, 6, 5, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, ...

งานของคุณคือการคำนวณลำดับนี้ ( OEIS A020703แต่มีการเตือนผู้สปอยเลอร์: มันมีคำจำกัดความที่น่าสนใจอีกสูตรหนึ่งและหลายสูตรที่คุณอาจต้องการคิดออกเอง)

สนุกกับความเป็นจริง:ทั้งหมด 8 คำสั่งที่คลี่คลายได้มีรายการ OEIS ของตัวเอง

ความท้าทาย

รับค่าเป็นจำนวนเต็มบวกnคืนค่าnองค์ประกอบ th ของลำดับด้านบน

คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์

ใช้กฎมาตรฐานของ

กรณีทดสอบ

1       1
2       4
3       3
4       2
5       9
6       8
7       7
8       6
9       5
100     82
111     111
633     669
1000    986
5000    4942
9802    10000
10000   9802

สำหรับรายการที่สมบูรณ์และรวมถึงการn = 11131 ดูไฟล์ B บน OEIS

คำตอบ:


6

เยลลี่11 10 ไบต์

’ƽð²+ḷ‘Ḥ_

อีกคำตอบที่เจลลี่บนโทรศัพท์ของฉัน

’ƽð²+ḷ‘Ḥ_   A monadic hook:
’ƽ          Helper link. Input: n
’             n-1
 ƽ            Atop integer square root. Call this m.
   ð         Start a new dyadic link. Inputs: m, n
    ²+ḷ‘Ḥ_    Main link:
    ²+ḷ       Square m, add it to itself,
       ‘      and add one.
        Ḥ     Double the result
         _    and subtract n.

ลองมันนี่


มีเคล็ดลับในการเริ่มต้นกับ Jelly ไหม? ฉันไม่สามารถบอกได้ว่าส้อม / ตะขอแยกวิเคราะห์ได้อย่างไร
ลินน์

เรียนรู้ APL หรือ J ก่อน โซ่นั้นง่ายกว่ารถไฟจริง ๆ เพราะฟังก์ชั่นทั้งหมดนั้นมีความคงที่
lirtosiast

ฉันเห็น. ใช่ฉันมีประสบการณ์ J ฉันคิดว่าฉันจะพยายามอ่านjelly.pyและหาโซ่ที่ได้รับการสนับสนุน
ลินน์

2
คุณพิมพ์นรกบนโทรศัพท์ของคุณยังไง! น่าประทับใจยิ่งกว่ารหัสของมัน!
DJMcMayhem

8

Japt, 20 19 16 ไบต์

V=U¬c)²-V *2-U+2

ทดสอบออนไลน์!

โดยอาศัยการสังเกตว่า

F (N) = ceil (N ^ .5) * (ceil (N ^ .5) -1) - N + 2

หรือมากกว่านั้น

F (N) = สแควร์แรกที่มากกว่าหรือเท่ากับ N, ลบสแควร์รูท, ลบ N, บวก 2

ฉันไม่รู้ว่าคำอธิบายนี้อยู่ในหน้า OEIS หรือไม่เพราะฉันยังไม่ได้ดู


5

จูเลีย 28 ไบต์

n->2((m=isqrt(n-1))^2+m+1)-n

นี่คือฟังก์ชั่นแลมบ์ดาที่รับจำนวนเต็มและคืนค่าจำนวนเต็ม หากต้องการเรียกใช้กำหนดค่าให้กับตัวแปร

เรากำหนดmให้เป็นจำนวนเต็มที่มากที่สุดเช่นที่m 2n -1 คือรากที่สองของn -1 ( isqrt) แล้วเราสามารถลดความซับซ้อนของการแสดงออก OEIS 2 ( ม. + 1) ม. - n + 2 ลงไปเพียงแค่ 2 ( ม. 2 + M + 1) - n

ลองออนไลน์



2

ES7, 31 28 26 ไบต์

n=>(m=--n**.5|0)*++m*2-~-n

ฉันค้นพบสูตรของ Alex อย่างอิสระ แต่ฉันไม่สามารถพิสูจน์ได้เพราะฉันไม่ได้อยู่ใกล้คอมพิวเตอร์ในเวลานั้น

แก้ไข: บันทึก 3 ไบต์ส่วนหนึ่งขอบคุณ @ETHproductions บันทึกอีก 2 ไบต์


n=>((m=--n**.5|0)+m*m)*2-n+1ฉันจะไปทำงาน
ETHproductions

@ETHproductions ขอบคุณฉันสงสัยในตัวฉันเองว่าจะทำอย่างไร--nในนั้น ...
Neil

@ETHproductions เฮ้ฉันสามารถโกน 2 ไบต์จากคำตอบของคุณ
Neil


1

MATL , 16 13 ไบต์

qX^Y[tQ*Q2*G-

ขึ้นอยู่กับลินน์คำตอบ CJam

ลองออนไลน์! (Y[ถูกแทนที่ด้วยkตามการเปลี่ยนแปลงในภาษา)

q       % input n. Subtract 1
X^      % square root
Y[      % floor
tQ      % duplicate and add 1
*       % multiply
Q       % add 1
2*      % multiply by 2
G-      % subtract n

วิธีนี้ใช้วิธีการที่แตกต่างจากคำตอบอื่น ๆ ( 16 ไบต์ ):

6Y3iQG2\+YLt!G=)

มันสร้างเมทริกซ์เกลียวสองตัว (ที่จริงแล้วเวอร์ชันพลิกในแนวตั้ง แต่ไม่ส่งผลกระทบต่อเอาต์พุต) อันแรกก็คือ

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

และอันที่สองติดตามเส้นทางที่แก้ไข:

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

เมื่อต้องการค้นหาnหมายเลข -th ของลำดับมันพอเพียงที่จะหาnในเมทริกซ์ที่สองและเลือกหมายเลขที่สอดคล้องกันในครั้งแรก เมทริกซ์ต้องมีขนาดใหญ่พอที่nจะปรากฏขึ้นและควรมีขนาดคี่เพื่อให้จุดเริ่มต้น (หมายเลข1) อยู่ในตำแหน่งเดียวกันทั้งคู่

ลองออนไลน์ด้วย! (6Y3ถูกย้ายไปตามการเปลี่ยนแปลงในภาษา)

6Y3      % 'spiral' string
i        % input n
QG2\+    % round up to an odd number large enough
YL       % generate spiral matrix of that size: first matrix
t!       % duplicate and transpose: second matrix
G=       % logical index that locates n in the second matrix
)        % use that index into first matrix

0

Brachylogขนาด 20 ไบต์

-1$r$[I*I+I+1=*2-?=.

นี่ใช้เทคนิคเดียวกับคำตอบอื่น ๆ

คำอธิบาย

-1                   § Build the expression Input - 1
  $r                 § Square root of Input - 1
    $[I              § Unify I with the floor of this square root
       *I+I+1        § Build the expression I * I + I + 1
             =*2-?   § Evaluate the previous expression (say, M) and build the expression
                     § M * 2 - Input
                  =. § Unify the output with the evaluation of M * 2 - Input

ข้อเท็จจริงที่น่าสนใจตรงกลางเกี่ยวกับคำตอบนี้คือมันง่ายกว่าและสั้นกว่าที่จะใช้=มากกว่าวงเล็บ

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