Vamos dar um conjunto de inteiros superior a 1 e chamá-lo de X . Definiremos S (i) como o conjunto de todos os membros de X divisíveis por i onde i> 1 . Gostaria de escolher dentre esses subconjuntos um grupo de conjuntos que
Sua união é o conjunto X
Nenhum elemento de X está em dois dos conjuntos.
Por exemplo, podemos reagrupar {3..11}
como
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
Alguns conjuntos não podem ser expressos dessa maneira. Por exemplo, se usarmos {3..12}
, 12
é um múltiplo de 3 e 4, impedindo que nossos sets sejam mutuamente exclusivos.
Alguns conjuntos podem ser expressos de várias maneiras, por exemplo, {4..8}
podem ser representados como
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
mas também pode ser representado como
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Tarefa
Nosso objetivo é escrever um programa que terá um conjunto como entrada e produzirá o menor número de subconjuntos que o cobrem dessa maneira. Se não houver, você deve gerar algum valor que não seja um número inteiro positivo (por exemplo 0
).
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Testes
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
fonte
[5..5]
? Podemos receber coisas como[8..4]
?12
é um múltiplo de ambos3
e4
impede que nossos sets sejam mutuamente exclusivos ": por quê? Não vejo mais nada na declaração do problema que exija12
entrar nos dois subconjuntos.[22,24,26,30]
são todos múltiplos de2
. Tem certeza de que não seria melhor excluí-lo e colocá-lo na caixa de areia?Respostas:
Python 2 , 167 bytes
Experimente online!
-9 bytes graças a Zacharý
-4 bytes graças ao Sr. Xcoder
-2 bytes usando listas em vez de conjuntos
-5 bytes usando em
a in [...]
vez deany([a == ...])
.-2 bytes graças ao Sr. Xcoder
-8 bytes ao mesclar instruções
-5 bytes graças ao Sr. Xcoder
-7 bytes graças ao Sr. Xcoder / Zacharý
+7 bytes para corrigir o erro
-1 byte graças aos ovs
Nota
Isso é extremamente lento para números máximos maiores porque não é de forma alguma otimizado; não em 2 minutos no dispositivo do Sr. Xcoder para
[22, 24, 26, 30]
.fonte
Clingo , 51 bytes
Demo
fonte
x(3..12).
(ou preciso atualizar?). BTW, você pode sugerir uma boa introdução ao clingo?UNSATISFIABLE
nesse caso. Eu principalmente usei o guia Potassco .Mathematica, 105 bytes
Experimente
copiar e colar o código com ctrl + v,
cole a entrada no final do código,
pressione Shift + Enter para executar
entrada
recebe uma lista como entrada
0, se não houver
fonte
Check
Haskell, 136 bytes
Experimente online!
Como funciona
Tome muito tempo para
{22,24,26,30}
.fonte
Gelatina,
3835343331282524232019 bytes-5 bytes graças a Leaky Nun
Experimente online!
Acho que o terceiro caso de teste funciona, mas é muito lento.
0
é emitido quando não há soluções.Explicação (pode ter entendido errado esta explicação):
fonte
ṀḊŒPðḍ@þ@⁹Sḟ1ðÐḟḢL
ṀḊ
na verdade é um truque muito legal!Julia, 91 bytes
fonte
[Text to display](link to website)