Inspiré (avec l'explication volée) de cette
Contexte
Disons que vous avez deux listes A = [a_1, a_2, ..., a_n]
et B = [b_1, b_2, ..., b_n]
des nombres entiers. Nous disons A
est potentiellement divisible par B
s'il y a une permutation B
qui rend a_i
divisible par b_i
pour tous i
. Le problème est alors: est-il possible de réorganiser (c'est-à-dire permuter) de B
sorte que cela a_i
soit divisible par b_i
pour tous i
? Par exemple, si vous avez
A = [6, 12, 8]
B = [3, 4, 6]
Alors la réponse serait True
, comme B
peut être réorganisés pour être B = [3, 6, 4]
et nous aurions que a_1 / b_1 = 2
, a_2 / b_2 = 2
et a_3 / b_3 = 2
, qui sont tous des entiers, donc A
est potentiellement divisible par B
.
À titre d'exemple qui devrait sortir False
, nous pourrions avoir:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
La raison en False
est que nous ne pouvons pas réorganiser B
car 25 et 5 sont entrés A
, mais le seul diviseur en B
serait 5, donc un serait omis.
Ta tâche
Votre tâche consiste évidemment à déterminer si deux listes (données en entrée) sont potentiellement divisibles. Vous pouvez accepter les entrées de n'importe quelle manière acceptée, comme pour les sorties.
Les doublons dans les listes sont une possibilité, et les seules restrictions de taille sur les entiers sont votre langue. Tous les entiers des deux listes seront supérieurs à 0 et les deux listes seront de taille égale.
Comme pour tous les problèmes de décision, les valeurs de sortie doivent être 2 valeurs distinctes qui représentent vrai et faux.
C'est un code-golf donc le code le plus court gagne!
Cas de test
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
la source
Réponses:
Gelée , 5 octets
Renvoie 0 pour Vrai , 1 pour Faux .
Essayez-le en ligne!
Comment ça fonctionne
la source
Husk ,
765 octetsSauvegardé 2 octets grâce à @Zgarb
Prend les arguments dans l'ordre inverse et retourne
1
pourTrue
et0
pourFalse
.Essayez-le en ligne!
Explication
la source
VΠMz¦P
devrait fonctionner pendant 6 octets.Mz
peut l'être‡
.▼▲
au lieu de▲▼
. Belle idée en tout cas!05AB1E , 7 octets
Entrée: prend les listes B et A (ordre inversé)
Sortie: 1 si vrai, 0 sinon
Essayez-le en ligne!
Explications:
la source
MATL ,
876 octets1 octet de moins en utilisant une idée de la réponse de Dennis 'Jelly
Les entrées sont
B
doncA
. La sortie est0
divisible ou1
non.Essayez-le en ligne!
Explication
la source
Mathematica, 52 octets
merci @ngenisis pour -5 octets
la source
Cases
est généralement plus court:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 octetsRenvoie un booléen.
Cas de test
Afficher l'extrait de code
la source
Haskell ,
7974686261 octetsEssayez-le en ligne!
1 octet enregistré grâce à @nimi
la source
f a=any((<1).sum.zipWith rem a).permutations
.Combinaison R + ,
696658 octets-3 octets grâce à Jarko Dubbeldam
encore -8 octets grâce à Jarko
bizarrement, R n'a pas de fonction intégrée pour générer toutes les permutations. Renvoie un booléen.
De plus, avec la deuxième amélioration de Jarko,
any
contraint la liste à un vecteurlogical
avec un avertissement.Essayez-le en ligne! (r-violon)
la source
Mathematica, 42 octets
la source
Gelée , 7 octets
Essayez-le en ligne!
Complexité factorielle dans la longueur de la liste.
la source
any
intégrée? TILPyth - 11 octets
Suite de tests .
la source
J, 27 octets
Essayez-le en ligne!
Prend la première liste comme argument de gauche et la deuxième liste comme argument de droite.
la source
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 octetsVersion de test
Fonction qui prend le tableau B comme premier argument et le tableau A comme deuxième argument. Notez que dans la version test, je passe la commande à A puis B.
la source
JavaScript (ES6), 100 octets
Un peu inefficace; un supplément
&
l'accélérerait.la source
PHP,
112 180178 octetsJe pensais trop court.
la fonction anonyme prend deux tableaux, renvoie
NULL
pour la fausse et1
pour la vérité.Lance une erreur si le second tableau contient
0
.Essayez-le en ligne .
la source
$f([6,5],[3,5])
.C (gcc) , 191 octets
Essayez-le en ligne!
Usage:
f(int size, int size, int *a, int *b)
renvoie
1
si divisable,0
sinon. Voir l'exemple d'utilisation sur TIO.(Je dois faire des permutations à la dure en C, donc ce n'est guère compétitif)
la source
Perl 6 , 38 octets
En fait, la réponse de @ nwellnhof semble trop lisible, alors j'ai décidé de suivre la belle tradition Perl du code en écriture seule :—).
1 octet enregistré grâce à @nwellnhof.
Essayez-le en ligne!
Qu'est-ce que cela fait: c'est une fonction anonyme qui prend deux arguments de liste. Quand nous disons
@^a
, nous voulons dire le premier, quand@^b
, c'est le second.(@^a,)
est une liste contenant la liste@^a
.@^b.permutations
est la liste de toutes les permutations de@^b
. L'opérateur "XZ %%" crée toutes les paires possibles de cette liste à gauche et toutes les permutations à droite, et utilise l'opérateur "Z %%" sur elles, qui est l'opération "zip" standard utilisant l'opérateur de divisibilité %%.L'
max
opérateur donne le plus grand élément de la liste (dans ce cas, c'est la liste qui contient le plusTrue
). Nous la réduisons ensuite à l'aide de l'opérateur logique AND pour voir si tous les éléments de cette liste "la plus vraie" sont vrais, et c'est le résultat. C'est une copie presque exacte de ce que @nwellnhof a écrit, en utilisant simplement des opérateurs obscurs pour raser les octets.la source
permutations
, c'est clairement beaucoup trop lisible;)[&&]
parmin
pour enregistrer un autre octet.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
possibleBrachylog , 6 octets
Essayez-le en ligne!
Le prédicat réussit si les deux listes sont potentiellement divisibles et échoue dans le cas contraire.
la source
Python 2 , 92 octets
Essayez-le en ligne!
Votre implémentation de base.
la source
Python 2 , 90 octets
Essayez-le en ligne!
la source
Rubis , 56 octets
Essayez-le en ligne!
Assez simple, exploite le fait qui
permutation
existe.la source
Scala, 60 octets
Golfé:
Non golfé:
la source
Japt ,
1211 octetsSorties
true
oufalse
.Essaye-le
Explication
Saisie implicite des tableaux
U
&V
(A
&B
, respectivement)Générez un tableau de toutes les permutations de
V
.Vérifiez si l'un des éléments (sous-tableaux) renvoie true.
Vérifiez si chaque élément du sous-tableau actuel retourne vrai lorsqu'il est passé par la fonction suivante,
X
étant l'élément courant etY
l'index courant.Obtenez l'élément dans l'
U
indexY
.Vérifiez si elle est divisible par
X
.la source