Le xorspace d'un ensemble d'entiers est l'ensemble de tous les entiers qui peuvent être obtenus en combinant les entiers de départ avec l'opérateur xor au niveau du bit habituel ( ^
). Par exemple, le xorspace de (8, 4)
est (0, 4, 8, 12)
: 0 est 4 ^ 4, 12 est 4 ^ 8 et aucun autre nombre ne peut être atteint. Notez que les nombres de départ sont toujours inclus, par cette définition (par exemple, 4 est 4 ^ 4 ^ 4).
Votre objectif est d'écrire le programme le plus court qui prend en entrée une liste d'entiers non négatifs et génère le nombre d'éléments dans leur xorspace.
- Les failles standard sont interdites.
- L'entrée et la sortie peuvent être dans l'un des formats habituels . L'entrée est garantie pour être valide, non vide et sans doublons.
- Votre code devrait pouvoir traiter tous les cas de test en moins d'une journée .
Cas de test
Input: 0
Output: 1
Input: 6
Output: 2
Input: 8 4
Ouput: 4
Input: 0 256
Output: 2
Input: 256 259 3
Output: 4
Input: 60 62 94 101 115
Output: 32
Input: 60 62 94 101 115 40 91
Output: 32
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Output: 64
Input: 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384
Output: 32768
l{mxFdy
.y
appliqué au cas de test 1 à 63 est beaucoup trop lent. Je n'ai pas de mémoire 2 ^ 63.MATL , 11 octets
Essayez-le en ligne!
Le dernier cas de test ne s'exécute pas dans l'interpréteur en ligne en raison de limitations de mémoire, mais s'exécute hors ligne en moins de 2 secondes sur un ordinateur moderne.
Explication
Pour l'entrée de taille
n
, cela fait ce qui suit:n
fois:Code commenté.
Exemple
Les résultats intermédiaires (étapes 2.1 et 2.3) pour la saisie
[256 259 3]
sont:Première itération:
[256 259 3]
avec[256 259 3]
: le calcul de toutes les paires de bits-XOR donne la matriceAttacher
[256 259 3]
et dédupliquerDeuxième itération: résultat courant
[0 3 259 256]
avec[256 259 3]
. Après déduplication, cela donne à nouveauTroisième itération: encore
La sortie est donc
4
(nombre d'entrées de résultat).la source
M
. La taille du vecteur de résultats intermédiaires ne dépasse donc jamaisM
, et la complexité est O (M*M
). L'OP a dit que la définition exacte den
n'a pas d'importance, donc si je définisn
commeM
je peux prétendre que c'est O (n*n
).Haskell , 64 octets
f
prend une liste d'entiers et retourne un entier.Essayez-le en ligne!
Cela ne gère pas une liste vide, pour cela vous pouvez mais
$0:
au lieu de l'espace aprèsmaximum
.Comment ça fonctionne
m
de la liste est zéro, renvoie 1.la source
Mathematica, 52 octets
la source
05AB1E , 8 octets
Essayez-le en ligne!
Tous les cas de test se terminent en moins d'une minute sur TIO.
la source
2^n
partie: /âü^Ùg
jusqu'à ce que je vois que vous pouvez xor plus d'une fois, bonne solution.Python 2 , 55 octets
Essayez-le en ligne!
Beats out fonctions:
Ørjan Johansen belle méthode d'élimination des rangs de est un octet plus courte.
Python 2 , 54 octets
Essayez-le en ligne!
la source
Gelée ,
98 octetsTermine tous les cas de test en moins de 8 ans secondes sur TIO, avec des besoins en mémoire négligeables.
Essayez-le en ligne!
Comment ça fonctionne
la source
Python, 113 octets
la source
u+=[c][c in s:]
c'est l'équivalent de votreif
instruction.