Défi
Étant donné une liste d'entiers positifs, recherchez s'il existe une permutation où en prenant jusqu'à un bit de chacun des entiers, un nombre binaire composé de tous les 1
s peut être créé.
Le nombre de bits du nombre binaire résultant est égal au MSB le plus élevé de la liste des entiers.
Sortie
Votre code doit générer ou renvoyer une valeur truey / falsey indiquant si une telle permutation existe.
Exemples
Vérité:
Avec la liste [4, 5, 2]
et sa représentation binaire [100, 101, 10]
, nous pouvons utiliser les troisième, premier et deuxième bits, respectivement, pour créer 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
Avec la liste [3, 3, 3]
, tous les nombres ont à la fois le premier et le deuxième bits définis 1
, afin que nous puissions faire notre choix avec un nombre à épargner:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
Avec la liste [4, 6, 2]
, aucun des nombres n'a le premier bit défini comme 1
, donc le nombre binaire ne peut pas être créé:
4 -> 100
6 -> 110
2 -> 010
Avec la liste [1, 7, 1]
, un seul des deux nombres a les deuxième et troisième bits définis comme 1
et le nombre ne peut pas être créé:
1 -> 001
7 -> 111
1 -> 001
De toute évidence, si le nombre maximal de bits définis dépasse le nombre d'entiers, le nombre de résultats ne peut jamais être créé.
Cas de test
Vérité:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
Falsey:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]
Règles
Les failles standard sont interdites. Comme il s'agit de code-golf , l'entrée la plus courte gagne!
Réponses:
Gelée , 11 octets
Essayez-le en ligne!
Comment ça marche
la source
J , 30 octets
Tout le mérite revient à mon collègue Marshall .
Fonction de préfixe tacite sans nom.
Essayez-le en ligne!
(
@
est la composition de la fonction)#:
antibase-2|:
transposer(
…)^:2
Appliquez deux fois la fonction suivante:1-
Boolean negate>./
le maximum@
du$
longueurs d'axe{.
prendre (remplissage avec des zéros) de|:
l'argument transposé+./ .*
"magie déterminante folle" *[:
ne pas accrocher (no-op - sert à composer la partie précédente avec le reste)* Dans les mots de Marshall.
la source
JavaScript (ES6),
104...9383 octetsRenvoie
0
ou1
.Cas de test
Afficher l'extrait de code
Méthode
Étant donné le tableau d'entrée A = [a 0 , a 1 , ..., a N-1 ] , nous recherchons une permutation [a p [0] , a p [1] , ..., a p [N- 1] ] de A et d'un entier x ≤ N tel que:
Formaté et commenté
la source
Husk , 14 octets
Essayez-le en ligne!
Explication
la source
05AB1E ,
232220 octets-1 octet grâce à Mr.Xcoder
Vrai: 1, Faux: 0
Essayez-le en ligne!
Explications:
la source
Wolfram Language (Mathematica) , 65 octets
Essayez-le en ligne!
Explication
Nous commençons par convertir toutes les entrées en listes binaires.
Ensuite, nous remplissons toutes ces listes de zéros à gauche pour rendre le tableau rectangulaire. Le résultat est stocké
n
pour plus tard.Oui, force brute, obtenons toutes les permutations possibles de l'entrée.
Ceci obtient la trace de chaque permutation, c'est-à-dire la somme des éléments diagonaux de la permutation. En d'autres termes, nous additionnons le MSB du premier numéro, le MSB suivant du deuxième numéro et ainsi de suite. Si la permutation est valide, toutes ces valeurs seront égales à 1 et il y aura autant de 1 s que le plus grand nombre d'entrée est large.
Nous obtenons la trace maximale, car la trace ne peut jamais être supérieure à celle d'une permutation valide.
Le côté droit est juste une version golfique de
Length @ First @ n
, c'est-à-dire qu'il obtient la largeur du tableau rectangulaire, et donc la largeur du plus grand nombre d'entrée. Nous voulons nous assurer que la trace d'une permutation est égale à cela.la source
PHP,
255243160 octets-12 octets, sorti le tri
-83 octets (!) Grâce à Titus
Essayez-le en ligne!
Imprime 1 pour véridique, rien pour falsey.
Version originale non golfée:
la source
function f($a,$v=NULL,$b=[]){($v=$v??(1<<log(max($a),2)+1)-1)||die("1");if($p=array_pop($a))while($p-=$i)($b[$i=1<<log($p,2)]|$v<$i)||f($a,$v-$i,[$i=>1]+$b);}
true
:die("1")
→die(!0)
.Lua 5.2, 85 octets
Cela définit x comme une fonction qui accepte un nombre variable d'entrées (qui devrait être des entiers 32 bits) et s'imprime sur stdout soit "true" soit "false".
Usage:
la source
[1,15,3,1]
semble revenirtrue
au lieu defalse
par exemple. Voici votre code le compilateur en ligne de TIO. Les deux autres cas de test qui échouent sont[1,7,1]
et[15,15,15]
. Tous les autres cas de test produisent les résultats corrects.PHP, 121 octets
Essayez-le en ligne .
panne
la source
J , 49 octets
Dois-je également compter le «g =.»? Je suis prêt à l'ajouter.
Un long verbe explicite cette fois. J'en ai essayé un tacite pour le même algorithme, mais il s'est avéré être encore plus long et plus laid que cela. Loin de la solution d'Adám.
Explication: (y est le bon argument de la fonction)
Essayez-le en ligne!
la source
Python 3 ,
126120 octets6 octets enregistrés grâce à M. Xcoder
Essayez-le en ligne!
la source
[0]+[...]
Est inutile non?any(g(x[:i]+x[i+1:],n-1)for i in range(len(x))if x[i]&2**n)
devrait suffire.Gelée , 17 octets
Un lien monadique prenant une liste de chiffres et revenant
1
(véridique) ou0
(falsey).Essayez-le en ligne!
Cela expirera sur TIO pour le plus long de chacun des cas de test.
Comment?
la source
R ,
247 octets221 octetsEssayez-le en ligne!
Version non golfée
J'ai réalisé que la vérification sans ligne n'était pas nécessaire avec les
drop=F
arguments. Suppression également de quelques espaces blancs embêtants.la source
PHP, 152 octets
N'imprime rien pour faux, 1 pour vrai.
Non golfé:
la source
Gelée , 17 octets
Suite de tests.
la source
C, 79 octets
la source
try it online
lien serait également utile.[1, 7, 1]
devrait retourner faux, et[52, 114, 61, 19, 73, 54, 83, 29]
devrait retourner vrai