Inspirado (con la explicación robada) esto
Antecedentes
Digamos que tiene dos listas A = [a_1, a_2, ..., a_n]
y B = [b_1, b_2, ..., b_n]
de enteros. Decimos que A
es potencialmente divisible por B
si hay una permutación de B
eso que hace a_i
divisible por b_i
para todos i
. El problema es entonces: ¿es posible reordenar (es decir, permutar) de B
modo que a_i
sea divisible por b_i
para todos i
? Por ejemplo, si tienes
A = [6, 12, 8]
B = [3, 4, 6]
A continuación, la respuesta sería True
, como B
pueden ser reordenados B = [3, 6, 4]
y entonces tendríamos que a_1 / b_1 = 2
, a_2 / b_2 = 2
y a_3 / b_3 = 2
, todos los cuales son números enteros, por lo que A
es potencialmente divisible por B
.
Como un ejemplo que debería generar False
, podríamos tener:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
La razón False
es que no podemos reordenar B
ya que 25 y 5 están dentro A
, pero el único divisor en B
sería 5, por lo que uno quedaría fuera.
Tu tarea
Obviamente, su tarea es determinar si dos listas (dadas como entrada) son potencialmente divisibles. Puede tomar la entrada de cualquier manera aceptada, como con la salida.
Los duplicados en las listas son una posibilidad, y las únicas restricciones de tamaño en los enteros son su idioma. Todos los enteros en ambas listas serán mayores que 0, y ambas listas serán del mismo tamaño.
Como con todos los problemas de decisión, los valores de salida deben ser 2 valores distintos que representen verdadero y falso.
Este es un código de golf, ¡el código más corto gana!
Casos de prueba
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
fuente
Respuestas:
Jalea , 5 bytes
Devuelve 0 para Verdadero , 1 para Falso .
Pruébalo en línea!
Cómo funciona
fuente
Casco ,
765 bytesGuardado 2 bytes gracias a @Zgarb
Toma los argumentos en orden inverso y devuelve
1
porTrue
y0
paraFalse
.Pruébalo en línea!
Explicación
fuente
VΠMz¦P
debería funcionar para 6 bytes.Mz
puede ser‡
.▼▲
lugar de▲▼
. Buena idea en cualquier caso!05AB1E , 7 bytes
Entrada: toma las listas B y A (orden inverso)
Salida: 1 cuando es verdadero, 0 de lo contrario
Pruébalo en línea!
Explicaciones:
fuente
MATL ,
876 bytes1 byte apagado usando una idea de la respuesta de Dennis 'Jelly
Las entradas son
B
, entoncesA
. La salida es0
si es divisible o1
si no.Pruébalo en línea!
Explicación
fuente
Mathematica, 52 bytes
gracias @ngenisis por -5 bytes
fuente
Cases
es generalmente más corto:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 bytesDevuelve un booleano.
Casos de prueba
Mostrar fragmento de código
fuente
Haskell ,
7974686261 bytesPruébalo en línea!
Guardado 1 byte gracias a @nimi
fuente
f a=any((<1).sum.zipWith rem a).permutations
.R + combinat ,
696658 bytes-3 bytes gracias a Jarko Dubbeldam
otro -8 bytes gracias a Jarko
Curiosamente, R no tiene un generador incorporado para generar todas las permutaciones. Devuelve un booleano.
Además, con la segunda mejora de Jarko,
any
obliga la lista a un vector delogical
con una advertencia.Pruébalo en línea! (violín r)
fuente
Mathematica, 42 bytes
fuente
Jalea , 7 bytes
Pruébalo en línea!
Complejidad factorial en la longitud de la lista.
fuente
any
incorporado? TILPyth - 11 bytes
Test Suite .
fuente
J, 27 bytes
Pruébalo en línea!
Toma la primera lista como el argumento izquierdo y la segunda lista como el derecho.
fuente
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 bytesVersión de prueba
Función que toma la matriz B como primer argumento y la matriz A como segundo argumento. Tenga en cuenta que en la versión de prueba cambio el orden a A y luego a B.
fuente
JavaScript (ES6), 100 bytes
Algo ineficiente; un extra
&
lo aceleraría.fuente
PHP,
112 180178 bytesEstaba pensando demasiado corto.
La función anónima toma dos matrices, devuelve
NULL
falso y1
verdadero.Lanza un error si la segunda matriz contiene
0
.Pruébalo en línea .
fuente
$f([6,5],[3,5])
.C (gcc) , 191 bytes
Pruébalo en línea!
Uso:
f(int size, int size, int *a, int *b)
devuelve
1
si es divisible, de lo0
contrario. Ver ejemplo de uso en TIO.(Tengo que hacer permutaciones de la manera difícil en C, por lo que esto no es competitivo)
fuente
Perl 6 , 38 bytes
En realidad, la respuesta de @ nwellnhof parece ser demasiado legible, así que me propuse seguir la excelente tradición de Perl de código de solo escritura :—).
1 byte guardado gracias a @nwellnhof.
Pruébalo en línea!
Qué hace: es una función anónima que toma dos argumentos de lista. Cuando decimos
@^a
, nos referimos al primero, cuando@^b
, es el segundo.(@^a,)
es una lista que contiene la lista@^a
.@^b.permutations
es la lista de todas las permutaciones de@^b
. El operador "XZ %%" hace todos los pares posibles de esa lista a la izquierda y todas las permutaciones a la derecha, y usa el operador "Z %%" en ellos, que es la operación estándar "zip" usando el operador de divisibilidad %%.El
max
operador proporciona el elemento más grande de la lista (en este caso, es la lista que tiene másTrue
's'). Luego lo reducimos usando el operador lógico AND para ver si todos los elementos de esa lista "más verdadera" son verdaderos, y ese es el resultado. Es una copia casi exacta de lo que escribió @nwellnhof, simplemente usando operadores oscuros para recortar bytes.fuente
permutations
, claramente es demasiado legible;)[&&]
conmin
para guardar otro byte.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
fuera posibleBrachylog , 6 bytes
Pruébalo en línea!
The predicate succeeds if the two lists are potentially divisible and fails if they are not.
fuente
Python 2, 92 bytes
Try it online!
Yer basic implementation.
fuente
Python 2, 90 bytes
Try it online!
fuente
Ruby, 56 bytes
Try it online!
Fairly straightforward, exploits the fact that
permutation
exists.fuente
Scala, 60 Bytes
Golfed:
Ungolfed:
fuente
Japt,
1211 bytesOutputs
true
orfalse
.Test it
Explanation
Implicit input of arrays
U
&V
(A
&B
, respectively)Generate an array of all permutations of
V
.Check if any of the elements (sub-arrays) return true.
Check if every element in the current sub-array returns true when passed through the following function, with
X
being the current element andY
the current index.Get the element in
U
at indexY
.Check if it's divisible by
X
.fuente