El código gris es una secuencia de números binarios de ancho de bits n
donde los números sucesivos difieren solo en un bit (ver ejemplo de salida).
Entrada de ejemplo:
3
Salida de ejemplo:
000
001
011
010
110
111
101
100
Notas:
- Esta pregunta parece tener un engaño, pero no lo es, porque esa pregunta no es un código de golf, y exige resultados diferentes. Sin embargo, será útil verificar sus respuestas.
- Puede suponer una variable
n
que contiene la entrada.
Respuestas:
JavaScript (77)
Versión más amigable para el navegador (console.log y prompt ()):
fuente
for(i=0;i<(l=1<<n);i++)console.log((i^(i>>1)|l).toString(2).slice(1));
Pitón 2 (47)
La expresión
i/2^i
para eli
'número de código gris es de esta respuesta . Para agregar ceros iniciales que rellenan la longitudn
, agrego2**n
antes de convertir a una cadena binaria, creando una cadena de longitudn+1
. Luego, trunco el1
prefijo de tipo inicial y numérico0b
con[3:]
.fuente
K (ngn / k) , 10 bytes
Pruébalo en línea!
fuente
!
me tomó por sorpresa. muy genial !APL (Dyalog Classic) , 11 bytes
Pruébalo en línea!
n⍴2
es2 2...2
- un vector den
dos⍳
son los índices de unan
matriz tridimensional con forma2 2...2
, es decir, una matriz 2 × 2 × ... × 2 de vectores anidados. Como usamos 0-indexing (⎕IO←0
), esos son todos vectores binarios de longitudn
.,
aplanar la forma 2 × 2 × ... × 2, por lo que obtenemos un vector de 2 n vectores binarios anidados↑
"mezclar": convierte el vector de vectores en una matriz sólida de 2 n × n. Se parece a esto:0,
antepone ceros a la izquierda de la matriz2≠/
calcula el pairwise (2
) xor (≠
) a lo largo de la última dimensión (/
en oposición a⌿
); en otras palabras, cada elemento se corrige con su vecino correcto, y la última columna desaparecefuente
Japt ,
1412 bytesAfeitado dos bytes gracias a ETHproductions .
Pruébalo en línea!
fuente
ù
se usa. Dado queN.z(n)
es una división entera con arg = 2 predeterminado, puede guardar dos bytes con2pU Ç^z)¤ùTU
: ¡ Pruébelo en línea!Python - 54
Basado en un algoritmo de la referencia dada en el desafío:
Sin golf:
fuente
PowerShell (168)
¡El PowerShell amateur regresa con otro intento de golF! Espero que no te importe! Por lo menos, estas preguntas son divertidas y una experiencia de aprendizaje para empezar. Asumiendo que n ha sido ingresado, tenemos:
Debido a que el PowerShell con el que estoy trabajando es solo 2.0, no puedo usar ningún cmdlets de desplazamiento de bits que pueda hacer que el código sea más corto. Así que aproveché un método diferente descrito en la fuente de la pregunta , volteando la matriz y agregándola a sí misma, agregando un 0 al frente de la mitad superior y un 1 a la mitad inferior.
fuente
F #
(86)(84)(80)Esto probablemente podría mejorarse aún más.
También tenga en cuenta que si se ejecuta en FSI,
open System;;
primero deberá hacerlo . Si desea evitar importar eso (y si no le importa el orden en que se imprimen los valores), puede usar esta versión de 82 caracteres:fuente
Rubí -
4239Mismo algoritmo, idioma diferente:
Cambiar de
#map
a#times
como @voidpigeon sugiere guardar 3 caracteres.fuente
[*0...2**n].map
que pueda usar(2**n).times
.J, 24 bytes
Pruébalo en línea!
Implementación directa del algoritmo "XOR con su propia mitad de piso". Tenga en cuenta que
22 b.
es XOR.fuente
MATL , 10 bytes
Pruébalo en línea!
El viejo método "XOR n con n >> 2".
W
- calcular 2 ^ (entrada) (obtiene entrada implícitamente):q
- crear rango de números de 0 a 2 ^ n - 1t
- duplicar ese rango2/k
- MATL no tiene desplazamiento de bits, así que divide (cada número) entre 2 y pisoZ~
- elementOR XOR ese resultado con la matriz original de 0 a 2 ^ n - 1B
: convierta cada número del resultado a binario(salida de visualización implícita)
fuente
K (ngn / k) , 25 bytes
Pruébalo en línea!
|:\x
es "exploración inversa x". aplica inversa a x hasta que la salida es igual a la entrada y muestra cada iteración. retorna (0 1; 1 0) en el primer pase.0 1,''
es "0 1 unir cada uno". une un 0 a cada valor de 1st elem, y 1 a cada valor de 2nd elem, dando ((0 0; 0 1); (1 1; 1 0)) en el primer pase,/
es "unirse" y se aplana a la lista.(x-1){...}/0 1
es "aplicar {func} más de0 1
x-1 veces". toma la salida de la última iteración como entradafuente
APL (22)
Esto genera una matriz n-por-2 ^ n que contiene los bits como sus filas:
Explicación:
{
...}⍣(n-1)⍪0 1
: ejecuta losn-1
tiempos de la función con la entrada inicial de la matriz(0 1)T
(que es el código gris de 1 bit)(0,⍵)
: cada fila de⍵
con un0
prefijo,⍪
: encima de,1,⊖⍵
: cada fila de⍵
con un1
prefijo, en orden inversofuente
Jq 1,5 ,
105100 bytesAsume que N proporciona información. p.ej
Expandido
Pruébalo en línea!
fuente
Japt , 10 bytes
Pruébalo en línea!
fuente
T-SQL 134
Este desafío está pidiendo devolver el poder cartesiano de {(0), (1)}. Este fragmento construye el código que ejecutaría el producto cartesiano de {(0), (1)} n veces.
fuente