Учитывая массив положительных целых чисел, выведите стабильный массив различных простых множителей этих чисел. Другими словами, для каждого целого числа во входных данных по порядку, получайте его простые множители, сортируйте их и добавляйте к выходным данным все простые числа, которых еще нет в выходных данных.
Тестовые случаи
[1,2,3,4,5,6,7,8,9,10] -> [2,3,5,7]
[10,9,8,7,6,5,4,3,2,1] -> [2,5,3,7]
[100,99,98,1,2,3,4,5] -> [2,5,3,11,7]
[541,60,19,17,22] -> [541,2,3,5,19,17,11]
[1,1,2,3,5,8,13,21,34,45] -> [2,3,5,13,7,17]
[6,7,6,7,6,7,6,5] -> [2,3,7,5]
[1] -> []
[8] -> [2]
[] -> []
Вывод может быть в виде массива или списка целых чисел или строк, вывода с разделителями или любого другого стандартного средства вывода упорядоченного списка чисел.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Ответы:
05AB1E , 3 байта
Выходы в виде списка строк.
Попробуйте онлайн!
2sable , 3 байта
Да, это также работает в 2sable. Также возвращает список строк.
Попробуйте онлайн!
источник
f U
. Любить это.Шелуха , 3 байта
1 байт сохранен благодаря @Zgarb .
Попробуйте онлайн!
объяснение
источник
Σ†
может бытьṁ
.Утилиты Bash + GNU, 37
Попробуйте онлайн .
источник
nl|sort|...
можно сделать с помощьюawk
:awk '!a[$0]++'
(распечатать, если не видел раньше; поэтому порядок никогда не теряется), сохраняя 15 байтов. Затемsed
команду можно удалить, используя чуть более длиннуюawk
:factor|awk '!/:/&&!a[$0]++' RS='[ \n]+'
(разделить записи по пробелам и символам новой строки, пропустить записи с помощью:
), сохранив еще 4 байта.tr
:factor|tr \ \\n|awk '!/:/&&!a[$0]++'
(это два пробела после первой обратной косой черты)MATL , 6 байтов
Попробуйте онлайн!
Объяснение:
Интересные трюки MATL: как правило, все функции применяются к векторам (массивам) так же легко. Но в этом случае число факторов является переменным для каждого входа, и Matlab и, соответственно, MATL имеют дело только с квадратными матрицами, поэтому мне пришлось использовать цикл for
"
.Кроме того, MATL имеет две основные операторы конкатенации:
h
иv
, по горизонтали и вертикали конкатенацию. Их поведение существенно отличается:v
объединяет весь стек, даже если он имеет только один элемент, как в нашей первой итерации.h
занимает ровно два элемента и потерпит неудачу, если присутствует только один, что делает его непригодным для данного приложения.источник
Brachylog , 6 байт
Попробуйте онлайн!
Брахилог , 6 байт
Попробуйте онлайн!
объяснение
источник
Pyth ,
54 байтаПопробуй это здесь! или Проверьте все контрольные примеры.
Альтернатива:
{sPM
объяснение
источник
PowerShell , 102 байта
Попробуйте онлайн!
(Идея факторизации заимствована из ответа Тесселлатинга Геклера на: «Отстань от меня, Сатана-Прайм!»)
Принимает ввод как буквенный массив
$x
. Создает новый пустой массив$a
. Перебирает$x
. Каждую итерацию мы перебираем2
до текущего числа, проверяем, является ли этот фактор-and
простым, затем|sort
выводим его и добавляем к нему$a
. Когда мы закончим$x
, мы выводим,$a
но|select
только их-u
уникальные номера. Это использует тот факт, что uniqueify идет слева направо, сохраняя первое вхождение, которое соответствует описанию проблемы. Эти числа остаются в конвейере и вывод неявный.источник
CJam, 11 байт
Функция, которая принимает массив целых и выдает массив целых.
Тестовая версия
источник
S*
в закрывающую скобку.Gaia , 4 байта
Попробуйте онлайн!
объяснение
источник
Желе ,
54 байта1 байт благодаря хлопку
Попробуйте онлайн!
источник
Æf
, так что вы, вероятно, можете сбросить байт с помощьюÆfFQ
Пайк , 4 байта
Попробуй это здесь!
объяснение
источник
Mathematica, 64 байта
вход
источник
Select[#&@@@Gather[#&@@@Join@@FactorInteger@#],#>1&]&
Haskell, 77 байт
Объяснение:
x!y
оператор возвращает список всех главных факторовx
, которые больше или равноy
(!2)
функция возвращает список всех простых делителей аргументаПопробуйте онлайн.
источник
Брахилог , 6 байт
Попробуйте онлайн!
объяснение
источник
[10,9,8,7,6,5,4,3,2,1]
. Должно быть[2, 5, 3, 7]
, нет[2, 3, 5, 7]
ḋᵐoᵐcd
Ом v2 , 3 байта
Еще один 3-х байтовый (благодаря языкам с авто-векторизацией).
Попробуйте онлайн!
объяснение
источник
Japt , 6 байт
Проверь это
объяснение
Неявный ввод массива
U
. Map (m
) над ним, получая факторы (k
) каждого элемента. Flatten (c
), получить уникальные элементы (â
) и неявно выводить.источник
Python 3 ,
128 125116 байтовЭто чистое решение Python. Нет пакетов. Спасибо Halvard за сохранение 9 байтов.
Попробуйте онлайн!
Python 2 ,
133, 127,126 байтПопробуйте онлайн!
Python 2 ,
142 138134 байтаПопробуйте онлайн!
Очень удивлен, что пока не было ответа от Python. Работаю в гольф.
источник
Deorst , 16 байт
Попробуйте онлайн!
Сделано с помощью @cairdcoinheringaahing в чате Deorst (обратите внимание, что решения разные).
объяснение
источник
Deorst , 16 байт
Попробуйте онлайн!
Сделано с помощью @ Mr.Xcoder. Это слишком долго для языка псевдогольфинга.
Как это устроено
источник
Пайк , 4 байта
Попробуй это здесь!
источник
Октава, 61 байт
Попробуйте онлайн!
источник
МОЙ, 17 байт
Попробуйте онлайн!
Как?
⎕
оцененный вкладḊ
делители (векторизация / вектизация)ḟ
расплющить’⊢f(‘
декремент, фильтр, приращение (удаляет1
)53ǵ'
строка'P'
в кодовой странице MY, которая проверяет первичность. К сожалению,0x35=53
это 16-е простое число, и нет команды для добавления16
в стек> _ <.ƒ
как функцияf(
фильтр по этомуū
uniquify←
выходисточник
C ++, 118 байт
Необходимо передать вход в a
std::vector<int>
, возвращает другойstd::vector<int>
для вывода.источник
J, 10 байт
Я уверен, что какой-нибудь умный Джер сможет сделать это короче.
источник
На самом деле , 5 байтов
Попробуйте онлайн!
Объяснение:
источник
Python 2,
88119103 байтаВот так. С правильной сортировкой.
По-видимому, я не могу заставить его работать на TIO, потому что пакет не поддерживается. Это работает на моей машине, хотя. Вот мои тестовые результаты:
Как-то я не смог сделать функцию лямбда-функцией. Всякий раз, когда я пытаюсь вернуть понимание списка, он возвращает [Нет, Нет, ...]. Если я просто что-то упускаю, кто-то может указать на эту ошибку? Спасибо за ответ!
Редактировать:
Используя алгоритм сортировки Mr. Xcoders, я мог сократить код на 16 байт. Спасибо за эту часть.
источник
[2, 5, 3, 7]
. Порядок выходных данных имеет значение.sorted(set().union(*map(primefac,l)))
s.append(x) for
->s.append(x)for
,primefac(i)) for
->primefac(i))for
,[]) if
->[])if
Braingolf , 7 байтов
Попробуйте онлайн!
О, смотри, это в основном цепочка из 4 встроенных
объяснение
источник
[10,9,8,7,6,5,4,3,2,1]
. - Порядок имеет значение: вы должны вернуться[2, 5, 3, 7]
вместо[2, 3, 5, 7]
.K
только вред.APL (Dyalog Extended) , 4 байта SBCS
Попробуйте онлайн!
источник