Мінімізуйте кількість простих факторів за допомогою вставки


12

Дано цілі додатні числа A і B , повертає позицію р , що зводить до мінімуму число простих факторів ( з урахуванням кратності) в результаті цілого числа, коли B буде вставлений в А на р .

Наприклад, з урахуванням A = 1234 та B = 32 , це можливі вставки (з p індексовано 0) та відповідна інформація про їх основні фактори:

р | Результат | Основні фактори | Ω (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, коли р дорівнює 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.
ділнан

2
@dylnan Я цього разу не скажу.
Містер Xcoder

Відповіді:


8

Лушпиння , 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 немає вбудованих простих факторів , тому це запозичує код з моєї відповіді на Prime Factors Buddies . Ось functionдекларація першого рядка .

Ми беремо введення, $a,$bа потім встановлюємо $pпорожній хештел. Далі ми беремо рядок $b$a, перетворюємо його в однотонний масив із комою-оператором ,і масив-об'єднуємо це з начинками . Матеріал являє собою через петлю $a, вставивши $bв будь-якій точці, в кінці кінців масиву зчіплюються з $a$b.

На даний момент ми маємо $bвставлений масив у кожній точці $a. Потім ми відправляємо цей масив через цикл for |%{...}. Кожна ітерація, ми вводимо в нашу хеш - таблицю в позиції скільки простих дільників , що конкретний елемент має.$i++.countf$_

Нарешті, ми sortспираємо хештел на основі values, беремо 0його та вибираємо його Name(тобто, $iіндекс). Це залишилося на конвеєрі, і вихід неявний.



2

05AB1E , 27 21 байт

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

Спробуйте в Інтернеті!

Він повертає найнижчий 0-індексований p .

Завдяки @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.
Емінья



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'

Явна діада. Приймає В праворуч, А ліворуч.

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 байт завдяки Джонатану Фреху.

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


0

Пітон, 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:])))

На практиці це досить швидко перевищує максимальну глибину рекурсії за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.