Le code gris est une séquence de nombres binaires de largeur de bit n
où les nombres successifs ne diffèrent que d'un seul bit (voir l'exemple de sortie).
Exemple d'entrée:
3
Exemple de sortie:
000
001
011
010
110
111
101
100
Remarques:
- Cette question semble avoir une dupe mais ce n'est pas le cas, car cette question n'est pas un code-golf, et elle exige une sortie différente. Cela vous aidera cependant à vérifier ses réponses.
- Vous pouvez supposer une variable
n
qui contient l'entrée.
Réponses:
JavaScript (77)
Version plus conviviale pour le navigateur (console.log et prompt ()):
la source
for(i=0;i<(l=1<<n);i++)console.log((i^(i>>1)|l).toString(2).slice(1));
Python 2 (47)
L'expression
i/2^i
pour lei
'numéro de code gris provient de cette réponse . Pour ajouter des zéros non significatifs à la longueurn
, j'ajoute2**n
avant de convertir en chaîne binaire, créant une chaîne de longueurn+1
. Ensuite, je tronque le1
préfixe principal et le type de numéro0b
avec[3:]
.la source
K (ngn / k) , 10 octets
Essayez-le en ligne!
la source
!
m'a pris par surprise. très cool !APL (Dyalog Classic) , 11 octets
Essayez-le en ligne!
n⍴2
est2 2...2
- un vecteur den
deux⍳
est les indices d'unn
tableau -dimensionnel de forme2 2...2
- c'est-à-dire un tableau 2 × 2 × ... × 2 de vecteurs imbriqués. Comme nous utilisons 0-indexing (⎕IO←0
), ce sont tous des vecteurs binaires de longueurn
.,
aplatir la forme 2 × 2 × ... × 2, nous obtenons donc un vecteur de 2 n vecteurs binaires imbriqués↑
"mix" - convertit le vecteur de vecteurs en une matrice solide 2 n × n. Cela ressemble à ceci:0,
ajoute des zéros à gauche de la matrice2≠/
calcule la paire (2
) xor (≠
) le long de la dernière dimension (/
par opposition à⌿
); en d'autres termes, chaque élément est xor-ed avec son voisin droit, et la dernière colonne disparaîtla source
Japt ,
1412 octetsRasé de deux octets grâce à ETHproductions .
Essayez-le en ligne!
la source
ù
utilisation. Puisqu'ilN.z(n)
s'agit d'une division entière avec par défaut arg = 2, vous pouvez enregistrer deux octets avec2pU Ç^z)¤ùTU
: Essayez-le en ligne!Python - 54
Basé sur un algorithme de la référence donnée dans le défi:
Non golfé:
la source
PowerShell (168)
Amateur PowerShell'r de retour avec une nouvelle tentative de golf! J'espère que cela ne vous dérange pas! À tout le moins, ces questions sont amusantes et une expérience d'apprentissage pour démarrer. En supposant que n a été entré, nous avons:
Étant donné que le PowerShell avec lequel je travaille n'est que 2.0, je ne peux utiliser aucune applet de commande de décalage de bits qui pourrait rendre le code plus court. J'ai donc profité d'une méthode différente décrite dans la source de la question , en retournant le tableau et en l'ajoutant à lui-même, en ajoutant un 0 à l'avant de la moitié supérieure et un 1 à la moitié inférieure.
la source
F #
(86)(84)(80)Cela pourrait probablement être encore amélioré.
Notez également que si vous utilisez FSI, vous devez d'
open System;;
abord le faire. Si vous souhaitez éviter d'importer cela (et si vous ne vous souciez pas de l'ordre dans lequel les valeurs sont imprimées), vous pouvez utiliser cette version à 82 caractères:la source
Rubis -
4239Même algorithme, langue différente:
Passer de
#map
à#times
comme @voidpigeon suggère d'enregistrer 3 caractères.la source
[*0...2**n].map
vous pouvez utiliser(2**n).times
.J, 24 octets
Essayez-le en ligne!
Implémentation simple de l'algorithme "XOR avec sa propre moitié au sol". Notez que
22 b.
c'est XOR.la source
MATL , 10 octets
Essayez-le en ligne!
La bonne vieille méthode "XOR n avec n >> 2".
W
- calculer 2 ^ (entrée) (obtient l'entrée implicitement):q
- créer une plage de nombres de 0 à 2 ^ n - 1t
- dupliquer cette plage2/k
- MATL n'a pas de décalage de bits, donc divisez (chaque nombre) par 2 et étageZ~
- élément XOR ce résultat avec le tableau d'origine de 0 à 2 ^ n - 1B
- convertir chaque nombre du résultat en binaire(afficher implicitement la sortie.)
la source
K (ngn / k) , 25 octets
Essayez-le en ligne!
|:\x
est "reverse scan x". applique inverse à x jusqu'à ce que la sortie soit égale à l'entrée et affiche chaque itération. renvoie (0 1; 1 0) lors de la première passe.0 1,''
est "0 1 joindre chacun". joint un 0 à chaque valeur du 1er elem et 1 à chaque valeur du 2e elem, donnant ((0 0; 0 1); (1 1; 1 0)) au premier passage,/
est "join over" et s'aplatit à la liste.(x-1){...}/0 1
est "appliquer {func} plus de0 1
x-1 fois". prend la sortie de la dernière itération en entréela source
APL (22)
Cela génère une matrice n par 2 ^ n contenant les bits comme ses lignes:
Explication:
{
...}⍣(n-1)⍪0 1
: exécutez lesn-1
temps de fonction avec l'entrée initiale de la matrice(0 1)T
(qui est le code gris 1 bit)(0,⍵)
: chaque ligne⍵
avec un0
préfixe,⍪
: au dessus de,1,⊖⍵
: chaque ligne⍵
avec un1
préfixe, dans l'ordre inversela source
Jq 1,5 ,
105100 octetsSuppose que N fournit une entrée. par exemple
Étendu
Essayez-le en ligne!
la source
Japt , 10 octets
Essayez-le en ligne!
la source
T-SQL 134
Ce défi demande de rendre la puissance cartésienne de {(0), (1)}. Cet extrait construit le code qui exécuterait le produit cartésien de {(0), (1)} n fois.
la source