thứ tự mát mẻ không có tiêu đề


19

Hãy xác định f n (k) là tổng của đầu tiên k của các số tự nhiên [1,) trong đó mỗi số được lặp lại n lần.

k       | 0    1    2    3    4    5    6    7    8    9
--------+-------------------------------------------------
f_1(k)  | 0    1    3    6    10   15   21   28   36   45
deltas  |   +1   +2   +3   +4   +5   +6   +7   +8   +9
--------+-------------------------------------------------
f_2(k)  | 0    1    2    4    6    9    12   16   20   25
deltas  |   +1   +1   +2   +2   +3   +3   +4   +4   +5
--------+-------------------------------------------------
f_3(k)  | 0    1    2    3    5    7    9    12   15   18
deltas  |   +1   +1   +1   +2   +2   +2   +3   +3   +3

Các đường chéo của điều này như là một mảng vuông tương tự như chuỗi OEIS A134546 .

Thử thách

Viết chương trình / hàmhai số nguyên không âm n và k và xuất ra f n (k) .

Thông số kỹ thuật

  • Quy tắc I / O tiêu chuẩn dụng .
  • Sơ hở tiêu chuẩn bị cấm .
  • Giải pháp của bạn có thể là 0 chỉ mục hoặc 1 chỉ mục cho n và / hoặc k nhưng vui lòng chỉ định đó.
  • Thách thức này không phải là tìm ra cách tiếp cận ngắn nhất trong tất cả các ngôn ngữ, mà là tìm kiếm cách tiếp cận ngắn nhất trong mỗi ngôn ngữ .
  • Mã của bạn sẽ là ghi theo byte , thường là trong mã hóa UTF-8, trừ khi được quy định khác.
  • Các hàm dựng sẵn tính toán chuỗi này là cho phép nhưng bao gồm một giải pháp không dựa vào tích hợp được khuyến khích.
  • Giải thích, ngay cả đối với các ngôn ngữ "thực tế", được khuyến khích .

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

Trong các trường hợp thử nghiệm này, n là 1 chỉ mục và k là 0 chỉ mục.

n   k      fn(k)

1   2      3
2   11     36
11  14     17
14  21     28
21  24     27
24  31     38
31  0      0

Trong một vài định dạng tốt hơn:

1 2
2 11
11 14
14 21
21 24
24 31
31 0

1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0

Thực hiện tham khảo

Điều này được viết bằng Haskell .

f n k = sum $ take k $ replicate n =<< [1..]

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

Thử thách này đã được sandbox.


Bạn có nghĩ rằng chỉnh sửa của tôi cải thiện định dạng, hoặc nó chỉ trên trình duyệt của tôi?
dùng202729

@ user202729 Heh ... nó tắt trên trình duyệt của tôi nhưng tôi nghi ngờ định dạng của tôi trông tốt trên hầu hết các trình duyệt ... Tôi sẽ chỉ giữ nguyên như vậy, nó không mất ý nghĩa gì. Trông thật lạ. : P
hoàn toàn là

Chúng ta có cần xử lý trường hợp f_n(0) = 0cho k0-index không?
Cinaski

9
"Điều tuyệt vời không có tiêu đề " Lol, tôi không phải là người duy nhất gặp khó khăn khi đặt tên cho trình tự tôi tạo ra tôi thấy ..;)
Kevin Cruijssen

3
@Fabian Không, bạn chỉ tổng hợp các số hạng đầu tiên ktừ danh sách các số tự nhiên lặp lại, không phải số đầu tiênn*k .
Martin Ender

Câu trả lời:


12

Ruby , 32 28 23 byte

->n,k{k.step(0,-n).sum}

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

Giải trình

Hãy hình dung tổng là diện tích của một hình tam giác, ví dụ với n = 3 và k = 10:

*
*
*
**
**
**
***
***
***
****

Sau đó, chúng tôi tổng hợp theo cột thay vì hàng: cột đầu tiên là k , sau đó k-n, k-2nv.v.


8

Python 2 , 34 28 byte

lambda n,k:(k+k%n)*(k/n+1)/2

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

Cảm ơn Martin Ender, Neil và Mr Xcoder đã giúp đỡ.


1
Bạn thực sự không cần cái k/nnào - k-(k/n)*nchỉ là k%n. Xem câu trả lời hàng loạt của tôi.
Neil


Cảm ơn. Tôi không nghĩ nó có thể đơn giản như vậy.
GB

8

Husk , 4 byte

Σ↑ṘN

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

Giải trình

Đây chỉ là một bản dịch trực tiếp của việc thực hiện tham chiếu trong thử thách:

   N  Start from the infinite sequence of all natural numbers.
  Ṙ   Replicate each element n times.
 ↑    Take the first k values.
Σ     Sum them.




5

Thạch , 5 byte

Rxḣ³S

Thêm một byte so với giải pháp Jelly của Mr. Mr.Xcoder nhưng đây là lần gửi đầu tiên của tôi trong Jelly và tôi vẫn bối rối về cách nhân chứng của Jelly chọn toán hạng nên tôi vẫn hài lòng. Lưu ý thứ tự của các yếu tố đầu vào ksau đón .

Giải trình

Rxḣ³S
R           Range: [1,2,...,k]
 x          Times: repeat each element n times: [1,1,1,2,2,2,...,n,n,n]
  ḣ³        Head: take the first k elements. ³ returns the first argument.
    S       Sum

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



4

JavaScript (ES6),  24  21 byte

Đưa đầu vào theo cú pháp currying (n)(k). Trả về falsethay vì0 .

n=>g=k=>k>0&&k+g(k-n)

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

Làm sao?

n =>             // main unamed function taking n
  g = k =>       // g = recursive function taking k
    k > 0 &&     // if k is strictly positive:
      k +        //   add k to the final result
      g(k - n)   //   subtract n from k and do a recursive call

Điều này tương tự như câu trả lời Ruby của @ GB .

Thử thách mô tả cách xây dựng 'cầu thang' từ trái sang phải, trong khi chức năng đệ quy này xây dựng nó từ dưới lên trên. Với n = 2k = 11 :

cầu thang


3

Mẻ, 34 byte

@cmd/cset/a(%2+%2%%%1)*(%2/%1+1)/2

Một công thức dạng đóng mà tôi tìm thấy. Đối số thứ nhất nlà 1 chỉ mục, đối số thứ hai klà 0 chỉ mục.



3

Haskell , 28 byte

n#k|m<-k`mod`n=sum[m,m+n..k]

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

Một cách tiếp cận tôi tìm thấy chỉ bằng cách bắt vít xung quanh với một số tham số phạm vi. Chắc chắn không phải là ngắn nhất nhưng thật tuyệt vời khi có rất nhiều cách tiếp cận khác nhau.


3

C, 38 34 byte

Định nghĩa đệ quy.

-4 byte nhờ Steadybox .

f(n,k){return k--?1+f(n,k)+k/n:0;}

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


32 byte bởi ông Xcoder , GB

f(n,k){return(k+k%n)*(k/n+1)/2;}

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



1
Sử dụng phương pháp của GB, 32 byte
Ông Xcoder

tio.run/ Kẻ -> 28 byte
GB

1
34 byte (phiên bản đệ quy): f(n,k){return k--?1+f(n,k)+k/n:0;} Hãy thử trực tuyến!
Steadybox

3

R , 37 33 31 byte

-6 byte nhờ Giuseppe

function(n,k)sum(rep(1:k,,k,n))

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

Không có gì lạ mắt. Việc [0:k]xử lý trường hợp khi k = 0.


1
Bạn có thể thoát khỏi niềng răng ở đây. Nếu bạn sử dụng các đối số theo thứ tự cho rep.default, bạn có thể loại bỏ [0:k]bằng cách sử dụng rep(1:k,,k,n)nhưng sau đó câu trả lời của bạn về cơ bản là của rturnbull nhưng với cơ sở R chứ không phảiR + pryr
Giuseppe

1
Bạn vẫn có thể thoát khỏi niềng răng! {}
Giuseppe

sự thay thế [0: k] khiến tôi và tôi quên mất việc niềng răng :)
NofP

2

C ++, 53 byte

Chỉ cần sử dụng công thức. nlà 1 chỉ mục và klà 0 chỉ mục.

[](int n,int k){return k/n*(k/n+1)/2*n+k%n*(k/n+1);};

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


Lưu một vài byte bằng cách lạm dụng ~toán tử. [](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
mèo trần

2

J , 13 byte

1#.]{.(#1+i.)

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

Đối số bên trái là n, bên phải là k.

i. tạo danh sách 0..k-1

1+ thêm một vào mỗi số của danh sách, bao gồm 1,2, ..., k

# tạo thành một cái móc với ở trên, vì vậy n bản sao của từng thành phần của danh sách được sao chép.

]{. lấy n đầu tiên của họ

1#. tìm tổng của chúng bằng cách chuyển đổi cơ sở.

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


Tôi thích cái móc.
cole

2

Võng mạc , 29 26 byte

\d+
$*
(?=.*?(1+)$)\1
$'
1

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm và tiêu đề để định dạng lại chúng thành đầu vào ưa thích của nó (thứ nhất 0 được lập chỉ mục k, nthứ hai 1 chỉ mục ). Tôi đã được truyền cảm hứng bởi câu trả lời Ruby của @ GB. Giải trình:

\d+
$*

Chuyển đổi sang unary.

(?=.*?(1+)$)\1
$'

Khớp mọi chuỗi nbên trong kvà thay thế trận đấu bằng mọi thứ sau trận đấu. Đây được k-n, k-2n, k-3n, nhưng ncũng là sau trận đấu, để bạn có được k, k-n, k-2nvv Điều này cũng phù hợp vớin , mà chỉ đơn giản là xóa (nó không còn cần thiết).

1

Tính tổng các kết quả và chuyển đổi thành số thập phân.



2

Perl 6 , 39 byte

->\n,\k{(0,{|($_+1 xx n)}...*)[^k].sum}

Kiểm tra nó

n k đều dựa 1

Mở rộng:

-> \n, \k { # pointy block lambda with two parameters 「n」 and 「k」

  ( # generate the sequence

    0,         # seed the sequence (this is why 「k」 is 1-based)

    {          # bare block lambda with implicit parameter 「$_」
      |(       # slip this into outer sequence
        $_ + 1 # the next number
        xx n   # repeated 「n」 times (this is why 「n」 is 1-based)
      )
    }

    ...        # keep doing that until

    *          # never stop

  )[ ^k ]      # get the first 「k」 values from the sequence
  .sum         # sum them
}






1

Clojure, 54 byte

#(nth(reductions +(for[i(rest(range))j(range %)]i))%2)

Đối số thứ 2 klà 0-index, (f 14 20)28 cũng vậy .


1

APL + THẮNG, 13 byte

+/⎕↑(⍳n)/⍳n←⎕

Nhắc cho đầu vào màn hình cho n và sau đó cho k. Chỉ số gốc = 1.



1

Japt , 7 6 byte

Ban đầu lấy cảm hứng từ giải pháp của GB và phát triển thành một cổng!

Lấy klàm đầu vào đầu tiên và nlà đầu vào thứ hai.

õ1Vn)x

Thử nó


Giải trình

Đầu vào ngầm định của số nguyên U=k& V=n. Tạo một mảng các số nguyên ( õ) từ 1đến Umột bước Vphủ định ( n) và giảm nó bằng phép cộng ( x).


1

R , 27 byte

Hàm ẩn danh có kntheo thứ tự đó. Tạo một danh sách độ dài k(đối số thứ ba đến rep) bao gồm 1thông qua k(đối số thứ nhất đến rep), lặp lại mỗi nlần phần tử (đối số thứ tư đểrep ). Sau đó lấy tổng của danh sách đó.

nlà 1 chỉ mục và klà 0 chỉ mục. Trả về một lỗi cho n<1.

pryr::f(sum(rep(1:k,,k,n)))

Hãy thử trực tuyế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.