Você recebe um conjunto de números inteiros positivos. Você deve organizá-los em pares de modo que:
- Cada par contém 2 números, um dos quais é múltiplo do outro. Por exemplo, 8 é um múltiplo de 4 e 9 é um múltiplo de 9.
- Se o mesmo número ocorrer muitas vezes no conjunto inicial, ele poderá ser usado várias vezes nos pares; um número pode até ser emparelhado com outra ocorrência do mesmo número
- O número máximo possível de pares é obtido.
A saída deve ser o número de pares. O menor código vence.
Dados de amostra
2,3,4,8,9,18
-> 3
7,14,28,42,56
-> 2
7,1,9,9,4,9,9,1,3,9,8,5
-> 6
8,88,888,8888,88888,888888
-> 3
2,6,7,17,16,35,15,9,83,7
-> 2
code-golf
math
number
number-theory
permutations
ghosts_in_the_code
fonte
fonte
2,3,4,8,9,18
. (Cada número em que lista é um factor e / ou múltiplo de pelo menos dois outros números na lista, mas que tem apenas uma solução.)Respostas:
Haskell,
1091077670 bytesObrigado a nimi por salvar 33 bytes e me ensinar um pouco mais de Haskell. :)
Obrigado ao xnor por salvar outros 6 bytes.
Sim, meu primeiro golfe Haskell. Funciona da mesma forma que todas as respostas até agora (bem, não exatamente: conta apenas o comprimento do prefixo mais longo de pares válidos em cada permutação, mas isso é equivalente e é realmente o que meu código CJam original fez).
Para golfitude extra, também é ineficiente ao gerar recursivamente todas as permutações do sufixo cada vez que os dois primeiros elementos de uma permutação são um par válido.
fonte
f=
necessário?chunksOf
é dolorosa. Realmente não conheço a biblioteca padrão de Haskell para saber se existe uma função equivalente mais curta. Eu mesmo tentei implementá-lo, mas ele saiu dois ou três bytes mais que a importação.[]
e[_]
ao mesmo tempo colocar og x=[]
segundo é realmente inteligente. Vou tentar. Obrigado :)f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
.CJam,
2218 bytesExperimente online.
Espera entrada na forma de uma lista no estilo CJam.
Isso é um pouco ineficiente para listas maiores (e o Java provavelmente ficará sem memória a menos que você forneça mais).
Explicação
fonte
[1 2 3 4 5 6 7 8 9 10]
No entanto,[7 1 9 9 4 9 9 1 3 9 8 1]
que é uma lista mais longa, funciona corretamente. Por que é que?10! = 3628800
, Mas12! / 5! / 3! = 665280
. Portanto, fica sem memória para o primeiro caso. Se você o executou no console com o interpretador Java, poderia dizer ao Java para usar mais memória e o primeiro caso também funcionaria (embora possa demorar um pouco, não sei).Pitão, 13 bytes
A complexidade do tempo e do armazenamento é realmente terrível. A primeira coisa que faço é criar uma lista com todas as permutações da lista original. Isso requer
n*n!
armazenamento. As listas de entrada com comprimento 9 já demoram bastante tempo.Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
Mathematica,
95938783796058 bytesLeva alguns segundos para os exemplos maiores.
fonte
Matlab (120 + 114 = 234)
a Principal:
a função topper é chamada pela parte principal.
a entrada está no formato
[. . .]
fonte
Matlab (365)
Aparentemente, isso é mais longo, mas oneliner e executivo, e eu consegui escapar da
perms
função porque leva uma eternidade.Esta função leva muitas repetições para ficar bem silenciosa devido a funções anônimas, estou aberto a sugestões aqui :)
fonte