Giảm thiểu số lượng các yếu tố chính thông qua chèn


12

Cho hai số nguyên dương AB , trả về vị trí p làm giảm thiểu số lượng các thừa số nguyên tố (tính bội số) của số nguyên kết quả, khi B được chèn vào A tại p .

Ví dụ: đã cho A = 1234B = 32 , đây là những lần chèn có thể có (với p là chỉ số 0) và thông tin tương ứng về các yếu tố chính của chúng:

p | Kết quả | Yếu tố chính | (N) / Đếm

0 | 321234 | [2, 3, 37, 1447] | 4
1 | 132234 | [2, 3, 22039] | 3
2 | 123234 | [2, 3, 19, 23, 47] | 5
3 | 123324 | [2, 2, 3, 43, 239] | 5
4 | 123432 | [2, 2, 2, 3, 37, 139] | 6

Bạn có thể thấy rằng kết quả có số lượng các thừa số nguyên tố tối thiểu, 3, khi p là 1. Vì vậy, trong trường hợp cụ thể này, bạn nên xuất 1 .

Thông số kỹ thuật

  • Nếu có nhiều vị trí p làm giảm thiểu kết quả, bạn có thể chọn xuất tất cả chúng hoặc bất kỳ vị trí nào trong số chúng.

  • Bạn có thể chọn lập chỉ mục 0 hoặc lập chỉ mục 1 cho p , nhưng lựa chọn này phải nhất quán.

  • AB có thể được lấy dưới dạng số nguyên, chuỗi hoặc danh sách các chữ số.

  • Bạn có thể cạnh tranh trong bất kỳ ngôn ngữ lập trình nào và có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là môn đánh gôn, vì vậy bài nộp ngắn nhất (tính bằng byte) sẽ thắng!

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

A, B -> p (0 chỉ mục) / p (1 chỉ mục)

1234, 32 -> 1/2
3456, 3 -> 4/5
378, 1824 -> 0/1
1824, 378 -> 4/5
67, 267 -> Bất kỳ hoặc tất cả trong số: [1, 2] / [2, 3]
435, 1 -> Bất kỳ hoặc tất cả trong số: [1, 2, 3] / [2, 3, 4]
378100, 1878980901 -> Bất kỳ hoặc tất cả trong số: [5, 6] / [6, 7]

Để thuận tiện, đây là danh sách các bộ dữ liệu đại diện cho từng cặp đầu vào:

[(1234, 32), (3456, 3), (378, 1824), (1824, 378), (67, 267), (435, 1), (378100, 1878980901)]

1
Tôi có cảm giác điều này thiên về 05AB1E ...
caird coinheringaahing

1
Chúng ta có thể xuất số kết quả đã giảm thiểu các thừa số nguyên tố thay vì chỉ số của phần chèn không? ví dụ trong trường hợp thử nghiệm đầu tiên của bạn 132234thay vì 1.
dyl Nam

2
@dylnan Tôi sẽ nói không có thời gian này.
Ông Xcoder

Câu trả lời:


8

Husk , 16 byte

§◄öLpr§·++⁰↑↓oΘŀ

Mong đợi đầu vào dưới dạng chuỗi, thử trực tuyến!

Giải trình

§◄(öLpr§·++⁰↑↓)(Θŀ)  -- input A implicit, B as ⁰ (example "1234" and "32")
§ (           )(  )  -- apply A to the two functions and ..
  (ö          )      --   | "suppose we have an argument N" (eg. 2)
  (    §      )      --   | fork A and ..
  (         ↑ )      --     | take N: "12"
  (          ↓)      --     | drop N: "34"
  (     ·++⁰  )      --   | .. join the result by B: "123234"
  (   r       )      --   | read: 123234
  (  p        )      --   | prime factors: [2,3,19,23,47]
  ( L         )      --   | length: 5
  (öLpr§·++⁰↑↓)      --   : function taking N and returning number of factors
                            in the constructed number
               ( ŀ)  --   | range [1..length A]
               (Θ )  --   | prepend 0
               (Θŀ)  --   : [0,1,2,3,4]
 ◄                   -- .. using the generated function find the min over range

7

MATL , 25 byte

sh"2GX@q:&)1GwhhUYfn]v&X<

Đầu vào là các chuỗi theo thứ tự ngược lại. Đầu ra là 1 dựa. Nếu có một tie, vị trí thấp nhất là đầu ra.

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

s         % Implicitly input B as a string. Sum (of code points). Gives a number
h         % Implicitly input A as a string. Concatenate. Gives a string of length
          % N+1, where N is the length of A
"         % For each (that is, do N+1 times)
  2G      %   Push second input
  X@      %   Push 1-based iteration index
  q       %   Subtract 1
  :       %   Range from 1 to that. Gives [] in the first iteration, [1] in
          %   the second, ..., [1 2 ... N] in the last
  &)      %   Two-output indexing. Gives a substring with the selected elements,
          %   and then a substring with the remaining elements
  1G      %   Push first input
  whh     %   Swap and concatenate twice. This builds the string with B inserted
          %   in A at position given by the iteration index minus 1
  U       %   Convert to string
  Yf      %   Prime factors
  n       %   Number of elements
]         % End
v         % Concatenate stack vertically
&X<       % 1-based index of minimum. Implicitly display

6

Pyth, 20 13 11 byte

.mlPsXbQzhl

Dùng thử trực tuyến

Giải trình

.mlPsXbQzhl
.m    b         Find the minimum value...
         hl     ... over the indices [0, ..., len(first input)]...
  lP            ... of the number of prime factors...
    sX Qz       ... of the second input inserted into the first.


3

Japt , 22 21 byte

Điều này cảm thấy quá lâu khi tôi viết nó lên, nhưng, nhìn vào một số giải pháp khác, nó thực sự có vẻ hơi cạnh tranh. Tuy nhiên, có lẽ có một chút chỗ để cải thiện - cNq)Đặc biệt là làm tôi khó chịu. Giải thích để làm theo.

Lấy đầu vào đầu tiên là một chuỗi và thứ hai là số nguyên hoặc chuỗi. Kết quả là 0 chỉ mục và sẽ trả về chỉ mục đầu tiên nếu có nhiều giải pháp.

ÊÆiYVÃcNq)®°k Ê
b@e¨X

Thử nó


Giải trình

      :Implicit input of string U and integer V.
Ê     :Get the length of U.
Æ     :Generate an array of the range [0,length) and map over each element returning ...
iYV   :  U with V inserted at index Y.
à    :End mapping
c     :Append ...
Nq    :  The array of inputs joined to a string.
®     :Map over the array.
°     :Postfix increment - casts the current element to an integer.
k     :Get the prime divisors.
Ê     :Get the length.
\n    :The newline allows the array above to be assigned to variable U.
b     :Get the first index in U that returns true ...
@     :  when passed through a function that ...
e     :    checks that every element in U...
¨     :    is greater than or equal to...
X     :    the current element.
      : Implicit output of resulting integer.

2

PowerShell , 228 byte

param($a,$b)function f($a){for($i=2;$a-gt1){if(!($a%$i)){$i;$a/=$i}else{$i++}}}
$p=@{};,"$b$a"+(0..($x=$a.length-2)|%{-join($a[0..$_++]+$b+$a[$_..($x+1)])})+"$a$b"|%{$p[$i++]=(f $_).count};($p.GetEnumerator()|sort value)[0].Name

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

(Có vẻ như đề xuất dài / chơi gôn được chào đón. Cũng hết thời gian trên TIO cho trường hợp thử nghiệm cuối cùng, nhưng thuật toán sẽ hoạt động cho trường hợp đó mà không gặp vấn đề gì.)

PowerShell không có bất kỳ yếu tố tích hợp nguyên tố chính nào, vì vậy, mã này mượn mã từ câu trả lời của tôi trên Prime Factors Buddies . Đó là functiontuyên bố đầu tiên .

Chúng tôi lấy đầu vào $a,$bvà sau đó đặt thành $pmột hashtable trống. Tiếp theo, chúng ta lấy chuỗi $b$a, biến nó thành một mảng đơn với toán tử dấu phẩy ,và nối chuỗi đó với công cụ . Các công cụ là một vòng lặp thông qua $a, chèn $btại mọi điểm, cuối cùng được nối với mảng $a$b.

Tại thời điểm này, chúng tôi có một mảng $bđược chèn tại mọi điểm trong $a. Sau đó chúng tôi gửi mảng đó thông qua một vòng lặp for |%{...}. Mỗi lần lặp, chúng ta chèn vào Hashtable của chúng tôi ở vị trí $i++của .countbao nhiêu thừa số nguyên tố fmà thành phần đặc biệt $_có.

Cuối cùng, chúng tôi sorthashtable dựa trên values, lấy cái 0thứ nhất và chọn nó Name(tức là $ichỉ số). Đó là còn lại trên đường ống và đầu ra là ẩn.



2

05AB1E , 27 21 byte

ηõ¸ì¹.sRõ¸«)øεIýÒg}Wk

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

Nó trả về p chỉ số 0 thấp nhất .

Cảm ơn @Enigma cho -6 byte!

Giải trình

ηõ¸ì                  # Push the prefixes of A with a leading empty string -- [, 1, 12, 123, 1234]
    ¹.sRõ¸«)          # Push the suffixes of A with a tailing empty space. -- [1234, 123, 12, 1, ]
            ø         # Zip the prefixes and suffixes
             ε    }   # Map each pair with...
              IýÒg    # Push B, join prefix - B - suffix, map with number of primes
                   Wk # Push the index of the minimum p

1
Sử dụng cùng một phương thức, bạn có thể lưu 6 byte bằng cách viết lại như sau ηõ¸ì¹.sRõ¸«)øεIýÒg}Wk.
Emigna



0

JavaScript (ES6), 120 byte

Lấy đầu vào là 2 chuỗi. Trả về vị trí 0 chỉ mục.

f=(a,b,i=0,m=a)=>a[i>>1]?f(a,b,i+1,eval('for(n=a.slice(0,i)+b+a.slice(i),x=k=2;k<n;n%k?k++:n/=x++&&k);x')<m?(r=i,x):m):r

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


0

J, 60 byte

4 :'(i.<./)#@q:>".@(,(":y)&,)&.>/"1({.;}.)&(":x)"0 i.>:#":x'

Dyad rõ ràng. Mất B bên phải, A bên trái.

Đầu ra 0 chỉ mục.

Có thể cải thiện bằng cách không sử dụng hộp.

Giải trình:

  4 :'(i.<./)#@q:>".@(,(":x)&,)&.>/"1({.;}.)&(":y)"0 i.>:#":y'  | Whole program
  4 :'                                                       '  | Define an explicit dyad
                                                     i.>:#":y   | Integers from 0 to length of y
                                                  "0            | To each element
                                     ({.;}.)&(":y)              | Split y at the given index (result is boxed)
                     (,(":x)&,)&.>/"1                           | Put x inbetween, as a string
                  ".@                                           | Evaluate
                 >                                              | Unbox, makes list
             #@q:                                               | Number of prime factors of each
      (i.>./)                                                   | Index of the minimum

0

Python 3, 128 byte

Chỉ số 0; lấy trong chuỗi làm tham số. -6 byte nhờ Jonathan Frech.

from sympy.ntheory import*
def f(n,m):a=[sum(factorint(int(n[:i]+m+n[i:])).values())for i in range(len(n)+1)];return a.index(min(a))

:\n a-> :a.
Jonathan Frech

0

Python, 122 byte

f=lambda n,i=2:n>1and(n%i and f(n,i+1)or 1+f(n/i,i))
g=lambda A,B:min(range(len(A)+1),key=lambda p:f(int(A[:p]+B+A[p:])))

Trong thực tế, điều này vượt quá độ sâu đệ quy tối đa mặc định khá nhanh.

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.