ลดจำนวนปัจจัยหลักให้เล็กที่สุดด้วยการแทรก


12

ได้รับสองจำนวนเต็มบวกและBกลับมาที่ตำแหน่งPที่ลดขนาดจำนวนของปัจจัยที่สำคัญ (multiplicities ขึ้นเรื่อย ๆ ) เลขที่ส่งผลให้เมื่อBถูกแทรกในที่หน้า

ตัวอย่างเช่นเมื่อกำหนดA = 1234และB = 32สิ่งเหล่านี้คือการแทรกที่เป็นไปได้ (โดยที่pถูกทำดัชนี 0) และข้อมูลที่เกี่ยวข้องเกี่ยวกับปัจจัยสำคัญของพวกเขา:

p | ผลลัพธ์ | ปัจจัยสำคัญ Ω (N) / จำนวน

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

คุณจะเห็นว่าผลที่ได้มีจำนวนน้อยที่สุดของปัจจัยสำคัญ 3 เมื่อPคือ 1 ดังนั้นในกรณีนี้โดยเฉพาะอย่างยิ่งคุณควรเอาท์พุท1

รายละเอียด

  • หากมีหลายตำแหน่งpที่ลดผลลัพธ์ให้น้อยที่สุดคุณสามารถเลือกที่จะส่งออกทั้งหมดหรือตำแหน่งใดก็ได้

  • คุณอาจเลือกการจัดทำดัชนี 0 หรือการจัดทำดัชนี 1 สำหรับpแต่ตัวเลือกนี้จะต้องสอดคล้องกัน

  • AและBสามารถนำมาเป็นจำนวนเต็มสตริงหรือรายการของตัวเลข

  • คุณสามารถแข่งขันในภาษาการเขียนโปรแกรมใด ๆและสามารถรับอินพุตและให้เอาต์พุตผ่านวิธีการมาตรฐานใด ๆในขณะที่รับทราบว่าช่องโหว่เหล่านี้ถูกห้ามโดยค่าเริ่มต้น นี่คือรหัสกอล์ฟดังนั้นการส่งที่สั้นที่สุด (คะแนนเป็นไบต์) จะชนะ!

กรณีทดสอบ

A, B -> p (ดัชนี 0) / p (ดัชนี 1 ดัชนี)

1234, 32 -> 1/2
3456, 3 -> 4/5
378, 1824 -> 0/1
1824, 378 -> 4/5
67, 267 -> ใด ๆ หรือทั้งหมด: [1, 2] / [2, 3]
435, 1 -> ใด ๆ หรือทั้งหมด: [1, 2, 3] / [2, 3, 4]
378100, 1878980901 -> ใด ๆ หรือทั้งหมด: [5, 6] / [6, 7]

เพื่อความสะดวกนี่คือรายการของสิ่งอันดับที่แสดงถึงอินพุตแต่ละคู่:

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

1
ฉันได้รับความรู้สึกนี้มีอคติต่อ 05AB1E ...
caird coinheringaahing

1
เราสามารถส่งออกจำนวนผลลัพธ์ที่ลดปัจจัยสำคัญลงแทนที่จะเป็นดัชนีของการแทรกได้หรือไม่? เช่นในกรณีการทดสอบครั้งแรกของคุณแทน132234 1
dylnan

2
@ dylnan ฉันจะไม่บอกเวลานี้
นาย Xcoder

คำตอบ:


8

Husk , 16 ไบต์

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

คาดว่าอินพุตเป็นสตริงลองใช้งานออนไลน์!

คำอธิบาย

§◄(ö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 ไบต์

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

อินพุตเป็นสตริงในลำดับย้อนกลับ ผลลัพธ์เป็นแบบ 1 หากมีการเสมอกันตำแหน่งต่ำสุดคือผลลัพธ์

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

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 ไบต์

.mlPsXbQzhl

ลองออนไลน์

คำอธิบาย

.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 ไบต์

สิ่งนี้ให้ความรู้สึกนานเกินไปเมื่อฉันเขียนมัน แต่เมื่อมองไปที่วิธีแก้ปัญหาอื่น ๆ มันก็ดูเหมือนจะมีการแข่งขัน ยังคงมีห้องพักสำหรับการปรับปรุง - cNq)โดยเฉพาะอย่างยิ่งเป็นที่น่ารำคาญฉัน คำอธิบายที่จะปฏิบัติตาม

รับอินพุตแรกเป็นสตริงและวินาทีเป็นทั้งจำนวนเต็มหรือสตริง ผลลัพธ์เป็น 0 ดัชนีและจะส่งคืนดัชนีแรกหากมีหลายวิธี

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

ลองมัน


คำอธิบาย

      :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 ไบต์

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

ลองออนไลน์!

(ดูเหมือนว่ายินดีต้อนรับคำแนะนำที่ยาว / การเล่นกอล์ฟพร้อมกับ TIO สำหรับกรณีทดสอบล่าสุด แต่อัลกอริทึมควรใช้กับกรณีนั้นโดยไม่มีปัญหา)

PowerShell ไม่ได้มีตัวประกอบที่สำคัญ ๆ สร้างอินดังนั้นนี้ยืมโค้ดจากคำตอบของฉันบนนายกรัฐมนตรีปัจจัยเพื่อน นั่นคือการfunctionประกาศของบรรทัดแรก

เรารับข้อมูล$a,$bแล้วตั้ง$pเป็น hashtable ที่ว่างเปล่า ต่อไปเราจะใช้สตริง$b$a, ทำให้มันกลายเป็นอาร์เรย์เดี่ยวกับที่คั่นด้วยผู้ประกอบการ,และอาร์เรย์ concatenate กับสิ่งที่ สิ่งที่เป็นห่วงผ่าน$aแทรก$bทุกจุดในที่สุดอาร์เรย์ concatenated $a$bด้วย

ณ จุดนี้เรามีอาร์เรย์ของแทรกทุกจุดใน$b แล้วเราจะส่งอาร์เรย์ที่ผ่านห่วง$a |%{...}แต่ละซ้ำเราใส่ลงใน Hashtable ของเราในตำแหน่งของวิธีการหลายปัจจัยสำคัญว่าองค์ประกอบโดยเฉพาะอย่างยิ่งมี$i++.countf$_

ในที่สุดเราsorthashtable ขึ้นอยู่กับvalues, เอาที่0หนึ่งของมันและเลือกName(เช่น$iดัชนีของ) ที่เหลืออยู่บนไปป์ไลน์และเอาท์พุทเป็นนัย



2

05AB1E , 27 21 ไบต์

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

ลองออนไลน์!

มันกลับต่ำสุด 0 การจัดทำดัชนีพี

ขอบคุณ @Enigma สำหรับ -6 ไบต์!

คำอธิบาย

ηõ¸ì                  # 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
โดยใช้วิธีการเดียวกันคุณสามารถบันทึก 6 ηõ¸ì¹.sRõ¸«)øεIýÒg}Wkไบต์โดยการเขียนใหม่นี้เป็น
Emigna



0

JavaScript (ES6), 120 ไบต์

รับอินพุตเป็น 2 สตริง ส่งคืนตำแหน่งที่จัดทำดัชนี 0

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

กรณีทดสอบ


0

J, 60 ไบต์

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

dyad อย่างชัดเจน ใช้ B ทางขวา, A ทางซ้าย

เอาต์พุต 0 ที่ทำดัชนี

อาจเป็นไปได้ที่จะปรับปรุงโดยไม่ใช้กล่อง

คำอธิบาย:

  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 ไบต์

0 การจัดทำดัชนี; ใช้เวลาในสตริงเป็นพารามิเตอร์ -6 ไบต์ขอบคุณ 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 ไบต์

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:])))

ในทางปฏิบัติสิ่งนี้เกินความลึกการเรียกซ้ำสูงสุดเริ่มต้นอย่างรวดเร็ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.