Tổng hợp các kết hợp với sự lặp lại


8

Viết mã ngắn nhất bạn có thể giải quyết vấn đề sau:

Đầu vào:

Một số nguyên X có 2 <= XX <= 100

Đầu ra:

Tổng số kết hợp của 2, 3 và 5 (cho phép lặp lại, các vấn đề đặt hàng) có tổng bằng X.

Ví dụ:

Đầu vào: 8

Đầu ra : 6, bởi vì các kết hợp hợp lệ là:

3+5
5+3
2+2+2+2
2+3+3
3+2+3
3+3+2

Đầu vào: 11

Đầu ra : 16, bởi vì các kết hợp hợp lệ là

5+3+3
5+2+2+2
3+5+3
3+3+5
3+3+3+2
3+3+2+3
3+2+3+3
3+2+2+2+2
2+5+2+2
2+3+3+3
2+3+2+2+2
2+2+5+2
2+2+3+2+2
2+2+2+5
2+2+2+3+2
2+2+2+2+3

Đầu vào: 100

Đầu ra : 1127972743581281, bởi vì các kết hợp hợp lệ là ... nhiều

Đầu vào và đầu ra có thể là bất kỳ hình thức hợp lý. Số byte thấp nhất trong mỗi ngôn ngữ sẽ thắng. Luật tiêu chuẩn được áp dụng.


1
Chào mừng đến với PPCG! Thật không may, ở đây chúng tôi không trả lời các câu hỏi lập trình chung. Tuy nhiên, bạn có thể nhận trợ giúp về Stack Overflow . Chỉ cần chắc chắn kiểm tra trung tâm trợ giúp của họ trước khi yêu cầu. :)
Erik the Outgolfer 16/218

1
Ai đó có thể điều chỉnh lại điều này thành một thách thức? Bởi vì đây sẽ là một niềm vui.
Bạch tuộc ma thuật Urn

1
@Shaggy Ugghhh ... lọc qua các thử thách với từ sumtrong đó không phải là một ý tưởng hay để cố gắng giải quyết câu hỏi đó ...
Bạch tuộc ma thuật Urn

2
Tôi viết lại câu hỏi của bạn một chút để làm cho nó phù hợp hơn với codegolf. Tôi cũng thay đổi kết quả cho đầu vào 11từ 12đến 16. Tất nhiên, vui lòng sửa lỗi này nếu tôi hiểu nhầm ý định của bạn
TonMedel 16/2/18

Câu trả lời:




3

Bình thường , 9 byte

/sM{y*P30

Hãy thử nó ở đây!

Bình thường , 16 byte

l{s.pMfqT@P30T./

Hãy thử nó ở đây

Làm sao?

  1. Tạo các thừa số nguyên tố của 30 , cụ thể là [2, 3, 5] , lấy quyền hạn của nó lặp lại N lần, loại bỏ các phần tử trùng lặp, tính tổng mỗi danh sách và đếm số lần xuất hiện của N trong đó.

  2. Đối với mỗi parition số nguyên p , nó kiểm tra xem p có bằng p ∩ primefac (30) không . Nó chỉ giữ cho những người thỏa mãn điều kiện này và với mỗi phân vùng còn lại k , nó sẽ nhận được danh sách hoán vị của k , làm phẳng danh sách kết quả theo 1 cấp, sao chép nó và lấy ra độ dài.


3

Thạch , 11 byte

5ÆRẋHŒPQḅ1ċ

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

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

5ÆRẋHŒPQḅ1ċ -> Chương trình đầy đủ. Đối số: N, một số nguyên.
5ÆR -> Đẩy tất cả các số nguyên tố từ 2 đến 5, bao gồm.
   H -> Lặp lại danh sách này N / 2 lần.
     P -> Tạo quyền hạn.
       Q -> Xóa các mục trùng lặp.
        1 -> Chuyển đổi từng từ unary (nghĩa là tổng hợp từng danh sách)
          -> Đếm số lần xuất hiện của N vào danh sách này.

Tăng tốc bằng cách thay thế ³bằng H(sau đó sẽ hết thời gian vào lúc 12 chứ không phải 6)
Jonathan Allan

@Jonathan ALLan Xong, cảm ơn.
Ông Xcoder

2

Perl, 38 byte

Bao gồm +1chop

perl -pE '$_=1x$_;/^(...?|.{5})+$(?{$\++})\1/}{' <<< 11; echo

Đủ thú vị tôi phải sử dụng \1để buộc quay lại. Thông thường tôi sử dụng ^nhưng trình tối ưu hóa regex có vẻ quá thông minh cho điều đó và cho kết quả quá thấp. Có lẽ tôi sẽ phải bắt đầu đưa ra số phiên bản perl khi sử dụng thủ thuật này vì trình tối ưu hóa có thể thay đổi ở mọi phiên bản. Điều này đã được thử nghiệm trênperl 5.26.1

Điều này 49là hiệu quả và thực sự có thể xử lý X=100(nhưng tràn vào X=1991)

perl -pe '$\=$F[@F]=$F[-2]+$F[-3]+$F[-5]for($F[5]=1)..$_}{' <<< 100;echo




1

MATL , 15 byte

:"5Zq@Z^!XsG=vs

Rất không hiệu quả: bộ nhớ cần thiết là cấp số nhân.

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

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

:"       % For each k in [1 2 ... n], where n is implicit input
  5Zq    %   Push primes up to 5, that is, [2 3 5]
  @      %   Push k
  Z^     %   Cartesian power. Gives a matrix where each row is a Cartesian k-tuple
  !Xs    %   Sum of each row
  G=     %   Compare with input, element-wise
  vs     %   Concatenate all stack contents vertically and sum
         % Implicit end. Implicit display





0

Bình thường, 12 byte

l{fqQsTy*P30

Điều này cực kỳ kém hiệu quả và đạt đến giới hạn bộ nhớ cho các đầu vào trên 5.

Dùng thử trực tuyến

Giải trình

l{fqQsTy*P30
         P30   Get the prime factors of 30 [2, 3, 5].
        *   Q  Repeat them (implicit) input times.
       y       Take the power set...
  fqQsT        ... and filter the ones whose sum is the input.
l{             Count unique lists.


0

Ngôn ngữ Wolfram (Mathicala) , 43 byte

Tr[Multinomial@@@{2,3,5}~FrobeniusSolve~#]&

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

Giải thích: FrobeniusSolvetính toán tất cả các giải pháp của tổng không có thứ tự 2a + 3b + 5c = n, sau đó chỉ Multinomialra có bao nhiêu cách chúng ta có thể đặt hàng các khoản tiền đó.

Hoặc chúng ta chỉ có thể sao chép giải pháp của mọi người khác cho cùng một số byte:

f@1=0;f[0|2|3|4]=1;f@n_:=Tr[f/@(n-{2,3,5})]

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.