Một trò chơi nhân tố


13

Đầu vào

Một số nguyên duy nhất .1x1015

Đầu ra

Số lượng lớn nhất của số nguyên dương khác biệt có sản phẩm .x

Ví dụ

Đầu vào: 1099511627776. Đầu ra: 9. Một danh sách các yếu tố tối ưu có thể là: (1, 2, 4, 8, 16, 32, 64, 128, 4096).

Đầu vào: 127381. Đầu ra 4. Một danh sách các yếu tố tối ưu có thể là: (1, 17, 59, 127).

Liên quan đến câu hỏi cũ này .


9
Bạn có thể thêm một vài trường hợp thử nghiệm? (Tốt nhất là có kích thước hợp lý.)
Arnauld

8
Đưa ra nhận xét của bạn về hầu hết các câu trả lời: nếu bạn đang tìm kiếm mã hiệu quả thay vào đó, điều này chắc chắn không nên được gắn thẻ là code-golf. Bạn có thể xem xét fastest-codehoặc fastest-algorithmcho một thách thức sắp tới. Nếu bạn thực sự muốn tất cả các câu trả lời hoạt động trong một thời gian giới hạn trong phạm vi được chỉ định, thì nó nên được đề cập rõ ràng. (Và tôi đã đề xuất một phạm vi nhỏ hơn để nó không xung đột code-golfhoàn toàn.)
Arnauld

@Arnauld Không, tôi cẩn thận để biến nó thành golf-golf và không ai bị đánh giá vì điều đó. Sẽ thật tuyệt nếu mã có thể chạy cho các phạm vi đầu vào được chỉ định.
Anush


1
x=1, 2, ...tôi nhận được f(x)=1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 3, 4, 2, 3cái mà tôi không tìm thấy trong OEIS. Rõ ràng là các hồ sơ sẽ xuất hiện cho số giai thừa x. Ví dụ như nhỏ nhất sẽ xnhư vậy . Tôi đoán chỉ phụ thuộc vào số mũ của thừa số nguyên tố. Vì vậy, để tìm thấy chúng tôi có thể đơn giản hóa để . f(x)=1313!ff(13^4*19^7*29^2)f(2^7*3^4*5^2)
Jeppe Stig Nielsen

Câu trả lời:


5

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

Max[Length/@Cases[Subsets@Divisors@#,{a__}/;1a==#]]&

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

Lưu 4 byte nhờ @attinat

Đây cũng là một phiên bản 153 byte tính toán 109951162777610^15

Max[Length/@Table[s=RandomSample@Flatten[Table@@@FactorInteger[#]];Last@Select[Times@@@TakeList[s,#]&/@IntegerPartitions@Length@s,DuplicateFreeQ],5!]]+1&      

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

Kết quả cho 10^1512

{1, 2, 4, 5, 10, 16, 25, 40, 50, 100, 125, 250}


Sự cố với 1099511627776
Anush

7
@Anush Nó không sụp đổ. Chỉ cần bộ nhớ. Bạn đã không nói bất cứ điều gì về giới hạn bộ nhớ. Đây là mã golf
J42161217

Có tôi nhận ra. Sẽ thật tuyệt nếu bạn thực sự có thể chạy mã phạm vi đầu vào được chỉ định trong câu hỏi.
Anush

6
@Anush Đây là mã golf. Câu trả lời không hay. Vui lòng xác định tiêu chí của bạn. Một câu trả lời là hợp lệ hoặc không. Tôi nghĩ vấn đề ở đây là câu hỏi ... Có lẽ bạn nên thay đổi nó thành "thuật toán đầy đủ nhất"
J42161217

3
@Anush Tôi đã thực hiện một chỉnh sửa trong câu trả lời của mình và thêm một phiên bản nữa rất nhanh và hiệu quả trong trường hợp bạn muốn kiểm tra nó
J42161217


3

05AB1E , 9 byte

Rất kém hiệu quả. Sẽ hết thời gian trên TIO cho các số có số lượng lớn các ước.

ÑæʒPQ}€gZ

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

Giải trình

Ñ          # push a list of divisors of the input
 æ         # push the powerset of that list
  ʒPQ}     # filter, keep only the lists whose product is the input
      €g   # get the length of each
        Z  # take the maximum

Mã TIO của bạn dường như xuất 3 thay vì 9.
Anush

@Anush: Đó là một số khác với ví dụ của bạn (vì đó là một lần do nhiều yếu tố). Tôi có lẽ nên sử dụng một ví dụ khác biệt hơn.
Emigna

€gZlà một chút hiệu quả hơn so éθgvới cùng một bytecount.
Grimmy

@Grimy: Đúng. Nó sẽ không có nhiều khác biệt vì đó là bộ lọc là kẻ xấu lớn ở đây, nhưng nó không gây hại gì khi hoạt động hiệu quả hơn một chút :)
Emigna

2

Perl 6 , 38 byte

{$!=$_;+grep {$!%%$_&&($!/=$_)},1..$_}

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

Đưa ra cách tiếp cận tham lam để chọn ước.


Không chấm dứt với 1099511627776
Anush

6
@Anush Vâng, cuối cùng nó chấm dứt . Nói chung, câu trả lời là hợp lệ nếu thuật toán của chương trình sẽ hoạt động với bất kỳ đầu vào nào, nếu nó được cung cấp nhiều bộ nhớ và thời gian như nó muốn. Vì đây là môn đánh gôn , tôi đã tối ưu hóa nó cho độ dài mã chứ không phải độ phức tạp thuật toán
Jo King

2

Javascript (ES6), 39 byte

f=(n,i=0)=>n%++i?n>i&&f(n,i):1+f(n/i,i)

Có lẽ một vài byte có thể được lưu ở đây và ở đó. Chỉ cần sử dụng thuật toán tham lam cho các yếu tố.


2

Thạch , 9 byte

ŒPP=³ƊƇẈṀ

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

-1 byte nhờ ai đó

-2 byte nhờ ErikTheOutgolfer


Trong khi chuẩn bị đầu vào cho siêu nhân OEIS, tôi đã tạo ra một chương trình Jelly có thể chơi được 11 byte (sử dụng một cách tiếp cận khác) và không thể đăng câu trả lời Jelly vì vậy tôi sẽ giả vờ tôi chơi golf một byte từ giải pháp của bạn: ÆE×8‘½’:2S‘(nó hoạt động với sức mạnh của phần "công thức" OEIS cho A003056). Tuyên bố từ chối trách nhiệm: có thể sai, nhưng nó hoạt động trên các trường hợp thử nghiệm.
đại từ của tôi là monicareinstate

Nó dường như không chấm dứt với 1099511627776
Anush

@someone không hoạt động trong 36 nhưng cảm ơn
HyperNeutrino

@Anush yeah, nó rất chậm vì tôi đã chơi golf, không được tối ưu hóa cho hiệu quả
HyperNeutrino

1
ÆDx21


2

Brachylog , 8 byte

f;?⟨⊇×⟩l

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

(Cách tiếp cận ngây thơ {~×≠l}ᶠ⌉, tạo ra vô số giải pháp có thêm 1 trước khi loại bỏ chúng , và do đó không thực sự chấm dứt. Tuy nhiên, đó không phải là vấn đề vì nó có cùng số byte!)

Đưa đầu vào thông qua biến đầu vào và đầu ra thông qua biến đầu ra. Tiêu đề trên TIO chứa một bản sao của hầu hết các mã nhằm mục đích cho bạn thấy danh sách các yếu tố là gì, nhưng điều này hoạt động hoàn toàn tốt mà không có nó. Vì trước tiên đưa ra danh sách con lớn hơn, vị từ này về cơ bản thực hiện giống như hầu hết các câu trả lời khác, nhưng không tạo ra và lọc rõ ràng quyền hạn hoàn chỉnh của các yếu tố, nhờ quay lui.

            The output
       l    is the length of
    ⊇       a sublist (the largest satisfying these constraints)
f           of the factors of
            the input
 ; ⟨  ⟩     which
     ×      with its elements multiplied together
  ?         is the input.


1

Gaia , 10 9 byte

Π=
dz↑⁇(l

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

Theo cùng một "thuật toán" như đã thấy ở nơi khác - lọc bộ quyền hạn dài nhất với sản phẩm bằng số và trả về độ dài của nó.

	| helper function
Π=	| is prod(list)==n (implicit)?
	|
	| main function; implicitly takes n
dz	| divisor powerset (in decreasing order of size)
  ↑⁇	| filter by helper function
    (l	| take the first element and take the length (implicitly output)

0

Ngao , 15 byte

p}_`nq#:;qQ@s~Q

Sắp có liên kết TIO (khi dennis kéo)

Về cơ bản là một cổng của giải pháp 05AB1E của @ Emigna.

Giải trình

                - Implicit Q = first input
p               - Print...
 }              - The last element of...
  _             - Sorted...
   `nq          - Lengths of... (map q => q.len)
           @s   - Items in powerset of
             ~Q - Proper divisors of Q
      #         - Where... (filter)
        ;q      - Product of subset
       :        - Equals...
          Q     - Q

0

C # (Trình biên dịch tương tác Visual C #) , 54 byte

int f(int n,int i=0)=>n%++i<1?1+f(n/i,i):n>i?f(n,i):0;

Sử dụng cách tiếp cận tương tự như câu trả lời của @ vrugtehagel và @ JoKing.

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


Giả sử tôi đã triển khai logic của bạn một cách chính xác, một giải pháp 53 byte (mà tôi không thể loại bỏ từ khóa "return"): Hãy thử trực tuyến!
đại từ của tôi là monicareinstate

1
@someone Cảm ơn, nhưng theo meta, các chức năng phải được sử dụng lại . Ngoài ra, tôi không biết liệu có thể chấp nhận các khai báo bên ngoài hàm không để lại dấu chấm phẩy hay không, có thể tạo một bài đăng meta về điều đó.
Hiện thân của sự thiếu hiểu biết

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.