Đầu tiên xoắn ốc, sau đó chéo


8

Cho một số đầu vào tích cực n, xây dựng một chuỗi các số từ 1đến n^2, với 1ở phía trên bên trái, xoắn ốc theo chiều kim đồng hồ. Lấy tổng các đường chéo (nếu nlà số lẻ, số giữa n^2được tính hai lần) và xuất số đó.

Ví dụ cho n = 1:

1

(1) + (1) = 2

Ví dụ cho n = 2:

1 2
4 3

(1+3) + (4+2) = 4 + 6 = 10

Ví dụ cho n = 4:

 1  2  3 4
12 13 14 5
11 16 15 6
10  9  8 7

(1+13+15+7) + (10+16+14+4) = 36 + 44 = 80

Ví dụ về n = 5:

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

(1+17+25+21+9) + (13+23+25+19+5) = 73 + 85 = 158

Thêm quy tắc và làm rõ

  • Đây là OEIS A059924 và có một số giải pháp dạng đóng trên trang đó.
  • Đầu vào và đầu ra có thể được coi là phù hợp với kiểu số nguyên của ngôn ngữ của bạn.
  • Đầu vào và đầu ra có thể được đưa ra trong bất kỳ định dạng thuận tiện .
  • Bạn có thể chọn 0-index hoặc 1-index, như tôi ở đây trong các ví dụ của tôi, để bạn gửi. Vui lòng cho biết bạn đang làm gì.
  • Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là để áp dụng tất cả các quy tắc chơi gôn thông thường và mã ngắn nhất (tính bằng byte) sẽ thắng.

Câu trả lời:


21

R , 43 34 byte

function(n)(8*n^3-3*n^2+4*n+3)%/%6

Hãy thử trực tuyến!

Các trang OEIS liệt kê các công thức sau đây để biết a(n):

(16*n^3 - 6*n^2 + 8*n + 3 - 3*(-1)^n)/12

Tuy nhiên, tôi đã bỏ qua ngay để đến phần PROG nơi tìm thấy mã PARI sau:

floor((16*n^3 - 6*n^2 + 8*n + 3 - 3*(-1^n))/12))

Đương nhiên, +3-3*(-1^n)cũng giống như +6vậy, chúng ta có thể đơn giản hóa công thức được liên kết, trước tiên bằng cách giảm nó thành

(16*n^3-6*n^2+8*n+6)/12 -> (8*n^3-3*n^2+4*n+3)/6

và sử dụng %/%, phân chia số nguyên, thay vì /để loại bỏ sự cần thiết floor.


1
+3-3*(-1)^nkhông thực sự giống như 6, mặc dù sự khác biệt bị mất trong phân chia số nguyên.
fergusq

@fergusq bạn đúng, nhưng công thức được đưa ra như biểu thức trong PARI (mà tôi dựa trên giải pháp của mình) có +3-3*(-1^n)cùng công thức +6. Tôi sẽ cập nhật câu trả lời của tôi để làm cho điều đó rõ ràng hơn.
Giuseppe

@Giuseppe +6Nếu nlà số lẻ, nhưng +0khi nào nthì chẵn
Bergi

3
@Bergi 3-3*(-1^n)luôn luôn 6nhưng 3-3*(-1)^ncó hành vi xen kẽ đó. Công thức ban đầu có công thức sau, điều này làm cho việc sử dụng phép chia số nguyên không cần thiết, vì nó luôn chia hết cho 12
Giuseppe

1
À, đúng rồi. Mặc dù điều đó thật kỳ lạ khi tác giả ban đầu bỏ qua điều này, phải không?
Bergi

5

Python 2 , 30 byte

Đã lưu một số byte bằng cách chuyển cách tiếp cận của Giuseppe .

lambda n:((8*n-3)*n*n+4*n+3)/6

Hãy thử trực tuyến!

Python 2 ,  36  34 byte

Đã lưu thêm một số byte nhờ @LeakyNun .

lambda n:((8*n-3)*n*n+4*n+n%2*3)/6

Hãy thử trực tuyến!




@LeakyNun Cảm ơn và cảm ơn.
Ông Xcoder

2
Tín dụng 30 byte cho Giuseppe để tiếp cận
Leaky Nun

@LeakyNun Tôi cũng đang cập nhật với điều đó
Ông Xcoder

3

Toán học, 19 byte

((8#-3)#*#+4#+3)/6&

Bạn có thể chạy nó với cú pháp sau:

((8#-3)#*#+4#+3)/6&[5]

Nơi 5có thể được thay thế với đầu vào.

Bạn có thể dùng thử trong Hộp cát Wolfram (Sao chép-Dán + Đánh giá các ô)


3

Toán học, 19 byte

((8#-3)#*#+4#+3)/6&

Hãy thử trực tuyến!

Đã lưu một số byte bằng cách chuyển cách tiếp cận của Giuseppe.

Toán học, 58 byte

Tôi luôn thích câu hỏi với câu trả lời được đưa ra hơn so với oeis (cho câu hỏi và câu trả lời hay)

LinearRecurrence[{3,-2,-2,3,-1},{0,2,10,34,80},2#][[#+1]]&

Sẽ không phải là golfer để sử dụng các hình thức đóng?
Nữ tu rò rỉ

1
nhiều câu trả lời đang sử dụng đơn giản hóa của tôi, vì vậy bạn cũng có thể làm như vậy
Giuseppe



1

Khối , 33 byte

I:u8**.../\*3t3n*3t+u@O,6+3+t3*4p

Hãy thử trực tuyến!

phiên bản khối:

      I : u
      8 * *
      . . .
/ \ * 3 t 3 n * 3 t + u
@ O , 6 + 3 + t 3 * 4 p
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Thực hiện thuật toán tương tự như câu trả lời R của tôi . Tôi nghi ngờ điều này có thể được đánh golf xuống.




1

Excel, 35 30 byte

Đã lưu 5 byte bằng cách sử dụng phương pháp của Giuseppe .

=INT((8*A1^3-3*A1^2+4*A1+3)/6)

Nỗ lực đầu tiên:

=(8*A1^3-3*A1^2+4*A1+3*MOD(A1,2))/6

Được phát triển từ việc triển khai trực tiếp công thức từ OEIS (37 byte):

=(16*A1^3-6*A1^2+8*A1+3-3*(-1)^A1)/12

+3-3*(-1)^A1logic có thể được thay đổi thành 6*MOD(A1,2).

=(16*A1^3-6*A1^2+8*A1+6*MOD(A1,2))/12

Không lưu byte, nhưng cho phép loại bỏ một yếu tố phổ biến cho 2 byte.


1

05AB1E ,  13  12 byte

Sử dụng kỹ thuật chuyển đổi cơ sở tương tự như đệ trình Jelly của Leaky Nun

Có lẽ có một cách ngắn hơn để tạo danh sách các hệ số

-1 byte nhờ Datboi (sử dụng khoảng trắng ans quấn để đánh bại nén (!))

8 3(4 3)¹β6÷

Hãy thử trực tuyến!

Làm sao?

8 3(4 3)¹β6÷               stack: []
8            - literal            ['8']
  3          - literal            ['8','3']
   (         - negate             ['8',-3]
    4        - literal            ['8',-3,'4']
      3      - literal            ['8',-3,'4','3']
       )     - wrap               [['8',-3,'4','3']]
        ¹    - 1st input (e.g. 4) [['8',-3,'4','3'], 4]
         β   - base conversion    [483]
          6  - literal six        [483,6]
           ÷ - integer division   [80]
             - print TOS           80

13 tuổi của tôi ...

•VŠ•S3(1ǝ¹β6÷

•2ùë•₂в3-¹β6÷

•мå•12в3-¹β6÷

Tất cả sử dụng nén để tìm danh sách các hệ số.


8 3(4 3)¹β6÷để an toàn 1 byte (mặc dù không có nén ưa thích)
Datboi





Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.