Trình tự hình thoi


11

Hãy tưởng tượng liệt kê các yếu tố của rhombi phát triển [1],[1,3,1],[1,3,5,3,1],…(chỉ các số lẻ sao cho chúng thẳng hàng). Điều này sẽ trông như sau, lưu ý rằng bạn luôn bắt đầu liệt kê với 1:

                   01
       1        02 03 04
 1   2 3 4   05 06 07 08 09          …
       5        10 11 12
                   13
(1) (1,3,1)    (1,3,5,3,1)    (1,3,5,7,5,3,1)   …

Bây giờ nếu bạn bắt đầu tính tổng các cột ( [1],[2],[1,3,5],[4],[5],[2,6,10],…), bạn sẽ có được chuỗi hình thoi . Đây là 100 yếu tố đầu tiên của chuỗi đã nói:

1,2,9,4,5,18,35,24,9,10,33,60,91,70,45,16,17,54,95,140,189,154,115,72,25,26,81,140,203,270,341,288,231,170,105,36,37,114,195,280,369,462,559,484,405,322,235,144,49,50,153,260,371,486,605,728,855,754,649,540,427,310,189,64,65,198,335,476,621,770,923,1080,1241,1110,975,836,693,546,395,240,81,82,249,420,595,774,957,1144,1335,1530,1729,1564,1395,1222,1045,864,679,490,297,100

Tôi đang

Bạn có thể tự do chọn một trong ba phương thức nhập / xuất này (bạn sẽ không cần xử lý các đầu vào không hợp lệ):

  • Cho một số nguyên n đầu ra phần tử thứ n trong chuỗi đó (0- hoặc 1 được lập chỉ mục, sự lựa chọn của bạn)
  • Cho một số nguyên n đầu ra n phần tử đầu tiên của chuỗi đó
  • In / trả lại chuỗi không xác định

Tủ thử

Vui lòng tham khảo 100 thuật ngữ đầu tiên ở trên, đây là một số ví dụ lớn hơn (1 chỉ mục):

101 -> 101
443 -> 1329
1000 -> 49000    
1984 -> 164672
2017 -> 34289
2018 -> 30270
3000 -> 153000

Câu trả lời:


3

Người tuyết , 72 byte

((}1vn2nD#`nPnCdU!*2nM1`nR:#nSNaB#`nS2nMNdE;aM|#NdE2nP+#`nSNdE`|aA#nM*))

Đây là một chương trình con lấy đầu vào 1 chỉ mục và trả về đầu ra tương ứng thông qua permavar +.

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

((        // begin subroutine
 }        // we'll only need 3 variables - b, e, g
 1vn2nD   // b = 0.5
 #`       // retrieve input and swap, now b = input and e = 0.5
 nP       // power, resulting in b=sqrt(input)
 nC       // ceiling - this gives the index i of the rhombus we want
 dU!*     // keep a copy of i in the permavar ! for later use
 2nM1`nR  // generate the range [1, 2i)
 :        // map the following block over the range...
  #nS     // subtract i, resulting in e.g. [-3 -2 -1 0 1 2 3] for i=4
  NaB     // absolute value - [3 2 1 0 1 2 3]
  #`nS    // subtract from i, giving [1 2 3 4 3 2 1]
  2nMNdE  // double and decrement, [1 3 5 7 5 3 1]
 ;aM      // map
 |        // shove the rhombus columns into g
 #NdE2nP  // b = (i-2)^2
 +#`      // move b into e and replace it with the original input
 nSNdE    // subtract the two and decrement, giving input-(i-2)^2-1
 `|aA     // this is the index into the rhombus columns that we want
 #nM*     // multiply by the original input and return
))

Điều này về cơ bản sử dụng thuật toán tương tự như câu trả lời của ông Xcoder , chỉ có một điểm khác biệt là ở đây chúng tôi chỉ tạo ra các cột của hình thoi mà chúng tôi cần, đó là cái trần (sqrt (n)). Để minh họa tại sao điều này hoạt động, đây là các đầu vào tương ứng với mỗi hình thoi:

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

Lưu ý rằng cột bên trái tương ứng chính xác với trần của căn bậc hai của mỗi phần tử trong cột bên phải. Để có được chỉ số dựa trên 1 từ đây, chúng ta chỉ cần trừ bình phương của chỉ số của hình thoi trước đó.


2

Thạch , 10 byte

Ḥ€€’ŒBFị@×

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

Một liên kết chương trình / đơn âm đầy đủ trả về thuật ngữ thứ N (1 chỉ mục).

Tôi nhận thấy rằng mỗi tổng là chỉ số của cột đó trong danh sách tổng thể của các cột (chính đầu vào) nhân với chỉ số của cột đó trong Hình thoi tương ứng, do đó không cần thực sự tạo các hàng.

Làm sao?

Ḥ $$ 'BFị @ × ~ Chương trình đầy đủ. Tôi sẽ gọi đầu vào N.

  € ~ Với mỗi số nguyên X trong phạm vi [1, N].
€ ~ Nhân đôi mỗi số nguyên trong phạm vi [1, X].
   '~ Giảm (trừ 1).
    B ~ Bounce (yếu tố khôn ngoan). Palindromize mỗi.
      F ~ Làm phẳng.
       ị @ ~ Lấy phần tử tại chỉ số N trong danh sách của chúng tôi.
         × ~ Nhân với N.


2

JavaScript (ES7), 42 41 byte

Đã lưu 1 byte nhờ @ovs

Chỉ số 0. Một biểu thức dạng đóng có nguồn gốc từ A004737 .

n=>((k=n**.5|0)-Math.abs(n+k*~k))*2*++n+n

Các trường hợp thử nghiệm


2

Befunge, 62 60 byte

&:1>:00p:*`|
00:-\*:g00:<>2-\-0v!`\g
*.@v+1<g00:<^*2g00_2*1+

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

Giải trình

Mã nguồn với các đường dẫn thực thi được tô sáng

*Chúng tôi bắt đầu bằng cách đọc số phần tử dựa trên một, n , từ stdin và lưu một bản sao.
*Sau đó, chúng tôi xác định hình thoi nào chúng tôi đang ở, bằng cách đếm một số nguyên, r , cho đến khi r*r >= n.
*Cột bù từ phía bên phải của hình thoi, c , là r*r - n.
*Để có được phần bù đó được phản ánh xung quanh trục trung tâm, chúng tôi kiểm tra xem c >= r.
*Và nếu có, thì c phản ánh trở thành r*2 - 2 - c.
*Khi chúng ta có c phản ánh , tổng của cột chỉ đơn giản là (c*2 + 1) * n.



1

Thạch , 8 byte

_.ạ²€ṂḤ×

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

Làm thế nào nó hoạt động

_.ạ²€ṂḤ×  Main link. Argument: n

_.        Subtract 0.5; yield (n - 0.5).
   ²€     Square each; yield [1², 2², ..., n²].
  ạ       Take the absolute differences of (n - 0.5) and each of the squares.
     Ṃ    Take the minimum.
      Ḥ   Unhalve; double the minimum.
       ×  Multiply the result by n.
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.