Dada uma matriz de números inteiros positivos, produz uma matriz estável dos fatores primos distintos desses números inteiros. Em outras palavras, para cada número inteiro na entrada em ordem, obtenha seus fatores primos, classifique-os e acrescente quaisquer números primos que ainda não estejam na saída.
Casos de teste
[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]
[] -> []
A saída pode ser como uma matriz ou lista de números inteiros ou seqüências de caracteres, saída delimitada ou qualquer outro meio padrão de gerar uma lista ordenada de números.
Isso é código-golfe , então a resposta mais curta em bytes vence.
code-golf
array-manipulation
primes
Stephen
fonte
fonte
Respostas:
05AB1E , 3 bytes
Saídas como uma lista de Strings.
Experimente online!
2sable , 3 bytes
Sim, isso também funciona no 2sable. Também retorna uma lista de Strings.
Experimente online!
fonte
f U
. Adoro.Casca , 3 bytes
1 byte salvo graças ao @Zgarb .
Experimente online!
Explicação
fonte
Σ†
pode serṁ
.Utilitários Bash + GNU, 37
Experimente online .
fonte
nl|sort|...
pode ser feito usandoawk
:awk '!a[$0]++'
(imprima se não for visto antes; portanto, a ordem nunca será perdida), economizando 15 bytes. Em seguida, osed
comando pode ser eliminado usando um comando um pouco mais longoawk
:factor|awk '!/:/&&!a[$0]++' RS='[ \n]+'
(divida registros em espaços e novas linhas, ignore registros com:
), economizando outros 4 bytes.tr
:factor|tr \ \\n|awk '!/:/&&!a[$0]++'
(que é dois espaços após a primeira barra invertida)MATL , 6 bytes
Experimente online!
Explicação:
Boatos interessantes de MATL: geralmente, todas as funções se aplicam a vetores (matrizes) com a mesma facilidade. Mas, nesse caso, o número de fatores é variável para cada entrada, e o Matlab e, por extensão, o MATL geralmente lidam apenas com matrizes quadradas, então tive que usar um loop for
"
.Além disso, o MATL possui dois principais operadores de concatenação:
h
ev
, concatenação horizontal e vertical. O comportamento deles difere significativamente:v
concatena a pilha inteira, mesmo que tenha apenas um elemento como em nossa primeira iteração.h
usa exatamente dois elementos e falhará se apenas um estiver presente, tornando-o inadequado para este aplicativo.fonte
Braquilog , 6 bytes
Experimente online!
Braquilog , 6 bytes
Experimente online!
Explicação
fonte
Pitão ,
54 bytesExperimente aqui! ou Verifique todos os casos de teste.
Alternativo:
{sPM
Explicação
fonte
PowerShell , 102 bytes
Experimente online!
(Empresta a idéia de fatoração da resposta de TessellatingHeckler sobre "Ponha-se atrás de mim, Satanás-Prime!")
Recebe a entrada como uma matriz literal
$x
. Cria uma nova matriz vazia$a
. Loops over$x
. Cada iteração faz um loop do2
número atual, verificando se esse é um fator-and
primo e, em seguida,|sort
a saída dele, e anexado a$a
. Quando terminar de atravessar$x
, nós então a saída$a
, mas|select
apenas os-u
números nique dos mesmos. Isso explora o fato de que o uniqueify vai da esquerda para a direita, mantendo a primeira ocorrência, que corresponde à descrição do problema. Esses números são deixados no pipeline e a saída é implícita.fonte
CJam, 11 bytes
Função que recebe matriz de entradas e gera uma matriz de entradas.
Versão de teste
fonte
S*
dentro do colchete próximo.Gaia , 4 bytes
Experimente online!
Explicação
fonte
Geléia ,
54 bytes1 byte graças ao aplauso.
Experimente online!
fonte
Æf
, então provavelmente pode soltar um byte comÆfFQ
Pyke , 4 bytes
Experimente aqui!
Explicação
fonte
Mathematica, 64 bytes
entrada
fonte
Select[#&@@@Gather[#&@@@Join@@FactorInteger@#],#>1&]&
Haskell, 77 bytes
Explicação:
x!y
operador retorna uma lista de todos os fatores primosx
maiores ou iguais ay
(!2)
função retorna uma lista de todos os fatores primos de seu argumentoExperimente online.
fonte
Braquilog , 6 bytes
Experimente online!
Explicação
fonte
[10,9,8,7,6,5,4,3,2,1]
. Deve ser[2, 5, 3, 7]
, não[2, 3, 5, 7]
ḋᵐoᵐcd
Ohm v2 , 3 bytes
Mais um byter de 3 bytes (graças a idiomas com auto-vetorização).
Experimente online!
Explicação
fonte
Japt , 6 bytes
Teste-o
Explicação
Entrada implícita da matriz
U
. Mapeie (m
) sobre ele, obtendo os fatores (k
) de cada elemento. Achatar (c
), obter os elementos exclusivos (â
) e gerar implicitamente.fonte
Python 3 ,
128 125116 bytesEsta é uma solução Python pura. Sem pacotes. Agradecimentos a Halvard por salvar 9 bytes.
Experimente online!
Python 2 ,
133 127126 bytesExperimente online!
Python 2 ,
142 138134 bytesExperimente online!
Muito surpreso por ainda não haver resposta em Python. Trabalhando no golfe.
fonte
Deorst , 16 bytes
Experimente online!
Feito com a ajuda de @cairdcoinheringaahing na sala de bate-papo de Deorst (observe que as soluções são diferentes).
Explicação
fonte
Deorst , 16 bytes
Experimente online!
Feito com a ajuda de @ Mr.Xcoder. Isso é muito longo para uma linguagem de pseudo-golfe.
Como funciona
fonte
Pyke , 4 bytes
Experimente aqui!
fonte
Oitava, 61 bytes
Experimente online!
fonte
MY, 17 bytes
Experimente online!
Quão?
⎕
entrada avaliadaḊ
divisores (vetoriza / vecifica)ḟ
aplainar’⊢f(‘
decremento, filtro, incremento (remove1
)53ǵ'
a string'P'
na página de código do MY, que é o teste de primalidade. Infelizmente0x35=53
é o 16º número primo, e não há um comando para pressionar16
para a pilha> _ <.ƒ
Como uma funçãof(
filtrar por issoū
unificar←
resultadofonte
C ++, 118 bytes
Precisa passar a entrada em a
std::vector<int>
, retorna outrastd::vector<int>
para saída.fonte
J, 10 bytes
Tenho certeza que algum J-er inteligente poderia tornar isso mais curto.
fonte
Na verdade , 5 bytes
Experimente online!
Explicação:
fonte
Python 2,
88119103 bytesAqui vamos nós. Com a classificação correta.
Aparentemente, não consigo fazê-lo funcionar no TIO, porque o pacote não é suportado. Ele roda na minha máquina. Aqui estão as minhas saídas de teste:
De alguma forma, não fui capaz de fazer a função como uma função lambda. Sempre que tento retornar a compreensão da lista, ele retorna [Nenhum, Nenhum, ...]. Se eu estou apenas negligenciando algo, alguém poderia apontar esse erro? Obrigado pelo feedback!
Editar:
Usando o algoritmo de classificação Mr. Xcoders, eu poderia reduzir o código em 16 bytes. Obrigado por essa parte.
fonte
[2, 5, 3, 7]
. A ordem das saídas é importante.sorted(set().union(*map(primefac,l)))
s.append(x) for
->s.append(x)for
,primefac(i)) for
->primefac(i))for
,[]) if
->[])if
Braingolf , 7 bytes
Experimente online!
Oh, olha, é basicamente uma cadeia de 4 embutidos
Explicação
fonte
[10,9,8,7,6,5,4,3,2,1]
. - A ordem é importante: você deve retornar em[2, 5, 3, 7]
vez de[2, 3, 5, 7]
.K
só faz mal aqui.APL (Dyalog Extended) , SBCS de 4 bytes
Experimente online!
fonte