Te dan un conjunto de enteros positivos. Debe organizarlos en pares de manera que:
- Cada par contiene 2 números, uno de los cuales es múltiplo de otro. Por ejemplo, 8 es múltiplo de 4 y 9 es múltiplo de 9.
- Si el mismo número aparece muchas veces en el conjunto inicial, se puede usar tantas veces en los pares; un número puede incluso emparejarse con otra ocurrencia del mismo número
- Se obtiene el número máximo posible de pares.
La salida debe ser el número de pares. El código más corto gana.
Data de muestra
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
fantasmas_en_el_código
fuente
fuente
2,3,4,8,9,18
. (Cada número en esa lista es un factor y / o múltiplo de al menos otros dos números en la lista, pero solo tiene una solución.)Respuestas:
Haskell,
1091077670 bytesGracias a nimi por guardar 33 bytes y enseñarme algo más de Haskell. :)
Gracias a xnor por guardar otros 6 bytes.
Sí, mi primer campo de golf de Haskell. Funciona igual que todas las respuestas hasta ahora (bueno, no del todo: solo cuenta la longitud del prefijo más largo de pares válidos en cada permutación, pero eso es equivalente y en realidad es lo que hizo mi código CJam original).
Para una mayor golfitud también es extra ineficiente al generar recursivamente todas las permutaciones del sufijo cada vez que los dos primeros elementos de una permutación son un par válido.
fuente
f=
necesario?chunksOf
es dolorosa. Realmente no conozco la biblioteca estándar de Haskell para saber si hay una función equivalente más corta. Intenté implementarlo yo mismo, pero salió dos o tres bytes más que la importación.[]
y[_]
al mismo tiempo poner elg x=[]
segundo lugar es realmente inteligente. Lo intentaré. Gracias :)f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
.CJam,
2218 bytesPruébalo en línea.
Espera entrada en forma de una lista de estilo CJam.
Esto es un poco ineficiente para listas más grandes (y Java probablemente se quedará sin memoria a menos que le des más).
Explicación
fuente
[1 2 3 4 5 6 7 8 9 10]
Sin embargo,[7 1 9 9 4 9 9 1 3 9 8 1]
que es una lista más larga, funciona correctamente. ¿Porqué es eso?10! = 3628800
pero12! / 5! / 3! = 665280
. Entonces se queda sin memoria para el primer caso. Si lo ejecutó desde la consola con el intérprete de Java, podría decirle a Java que use más memoria y el primer caso funcionaría también (aunque podría llevar un tiempo, no lo sé).Pyth, 13 bytes
El tiempo y la complejidad del almacenamiento es realmente terrible. Lo primero que hago es crear una lista con todas las permutaciones de la lista original. Esto requiere
n*n!
almacenamiento. Las listas de entrada con longitud 9 ya toman bastante tiempo.Pruébelo en línea: demostración o conjunto de pruebas
Explicación:
fuente
Mathematica,
95938783796058 bytesToma unos segundos para los ejemplos más grandes.
fuente
Matlab (120 + 114 = 234)
principal:
la función principal se llama por la parte principal.
la entrada está en la forma
[. . .]
fuente
Matlab (365)
Esto aparentemente es más largo, pero en línea y ejecutivo, y logré escapar de la
perms
función porque lleva una eternidad.Esta función requiere muchas repeticiones para funcionar bien en silencio debido a las funciones anónimas, estoy abierto a sugerencias aquí :)
fuente